YouTube分析週間レポート
上級
これはMarket Research分野の自動化ワークフローで、17個のノードを含みます。主にCode, Merge, Telegram, HttpRequest, ScheduleTriggerなどのノードを使用。 YouTubeチャネル分析レポートを週次でTelegramへ自動送信
前提条件
- •Telegram Bot Token
- •ターゲットAPIの認証情報が必要な場合あり
カテゴリー
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "aPiq5niR5CX4IKG0",
"meta": {
"instanceId": "f7f67beee184b74727132a2cae80d905bf826da624b8008bfa0c397ee8879752",
"templateCredsSetupCompleted": true
},
"name": "YouTube Analytics Weekly Report",
"tags": [
{
"id": "os3elkx460WptGK8",
"name": "abdulazizahwan",
"createdAt": "2025-07-21T03:08:06.372Z",
"updatedAt": "2025-07-21T03:08:06.372Z"
}
],
"nodes": [
{
"id": "08eb2d97-5306-47ce-8571-3ad837bc6c52",
"name": "チャンネル概要",
"type": "n8n-nodes-base.httpRequest",
"position": [
672,
-720
],
"parameters": {
"url": "https://youtubeanalytics.googleapis.com/v2/reports ",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "ids",
"value": "channel==MINE"
},
{
"name": "startDate",
"value": "={{ $now.minus({ weeks: 1 }).toISODate() }}"
},
{
"name": "endDate",
"value": "={{ $now.toISODate() }}"
},
{
"name": "metrics",
"value": "=views,estimatedMinutesWatched,averageViewDuration,likes,comments,subscribersGained,subscribersLost"
},
{
"name": "dimensions",
"value": "=day"
},
{
"name": "sort",
"value": "day"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "M5Kja7WVORPz6Bks",
"name": "YouTube Credential"
}
},
"typeVersion": 4.2
},
{
"id": "cea3c6b3-f849-420e-9df2-bcd55c9c3ff3",
"name": "週間トップ動画",
"type": "n8n-nodes-base.httpRequest",
"position": [
672,
-496
],
"parameters": {
"url": "https://youtubeanalytics.googleapis.com/v2/reports ",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "ids",
"value": "channel==MINE"
},
{
"name": "startDate",
"value": "={{ $now.minus({ weeks: 1 }).toISODate() }}"
},
{
"name": "endDate",
"value": "={{ $now.toISODate() }}"
},
{
"name": "metrics",
"value": "=views,estimatedMinutesWatched,averageViewDuration"
},
{
"name": "dimensions",
"value": "=video"
},
{
"name": "sort",
"value": "=-views"
},
{
"name": "maxResults",
"value": "=5"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "M5Kja7WVORPz6Bks",
"name": "YouTube Credential"
}
},
"typeVersion": 4.2
},
{
"id": "f87af746-24f4-43a5-82c1-400c5cf70b68",
"name": "トラフィックソース",
"type": "n8n-nodes-base.httpRequest",
"position": [
672,
-144
],
"parameters": {
"url": "https://youtubeanalytics.googleapis.com/v2/reports ",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "ids",
"value": "channel==MINE"
},
{
"name": "startDate",
"value": "={{ $now.minus({ weeks: 1 }).toISODate() }}"
},
{
"name": "endDate",
"value": "={{ $now.toISODate() }}"
},
{
"name": "metrics",
"value": "=views,estimatedMinutesWatched"
},
{
"name": "dimensions",
"value": "=insightTrafficSourceType"
},
{
"name": "sort",
"value": "views"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "M5Kja7WVORPz6Bks",
"name": "YouTube Credential"
}
},
"typeVersion": 4.2
},
{
"id": "2bf25aae-c867-46a8-8f4f-968553448659",
"name": "視聴者属性",
"type": "n8n-nodes-base.httpRequest",
"position": [
672,
64
],
"parameters": {
"url": "https://youtubeanalytics.googleapis.com/v2/reports ",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "ids",
"value": "channel==MINE"
},
{
"name": "startDate",
"value": "={{ $now.minus({ weeks: 1 }).toISODate() }}"
},
{
"name": "endDate",
"value": "={{ $now.toISODate() }}"
},
{
"name": "metrics",
"value": "=viewerPercentage"
},
{
"name": "dimensions",
"value": "=ageGroup,gender"
},
{
"name": "sort",
"value": "=ageGroup,gender"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "M5Kja7WVORPz6Bks",
"name": "YouTube Credential"
}
},
"typeVersion": 4.2
},
{
"id": "5c0f2672-7568-4db6-897e-665a4cce7382",
"name": "テキストメッセージ送信",
"type": "n8n-nodes-base.telegram",
"position": [
2528,
-272
],
"webhookId": "0e7dd1e3-7c40-458e-9cee-c08a44ddb02a",
"parameters": {
"text": "={{ $json.text }}",
"chatId": "-1001415788700",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"id": "qV4GRZZ4v7NAemUj",
"name": "abdulazizahwan_Bot"
}
},
"typeVersion": 1.2
},
{
"id": "227fce63-b178-485b-8f9c-d316820012be",
"name": "IDをタイトルに変換",
"type": "n8n-nodes-base.httpRequest",
"position": [
1136,
-352
],
"parameters": {
"url": "https://www.googleapis.com/youtube/v3/videos",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "part",
"value": "snippet,statistics"
},
{
"name": "id",
"value": "={{$json.videoIdsCsv}}"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "M5Kja7WVORPz6Bks",
"name": "YouTube Credential"
}
},
"typeVersion": 4.2
},
{
"id": "a129db52-cddf-43dc-8028-ba6aa00953d8",
"name": "視聴者属性フォーマッタ",
"type": "n8n-nodes-base.code",
"position": [
960,
64
],
"parameters": {
"jsCode": "// Input: 1 item berisi response JSON dari HTTP node di field 'data'\nconst res = items[0].json; // sesuaikan kalau output Anda beda\nconst headers = res.columnHeaders.map(h => h.name);\nconst out = (res.rows || []).map(r => {\n const obj = {};\n headers.forEach((h, i) => obj[h] = r[i]);\n return obj;\n});\nreturn out.map(o => ({ json: o }));\n"
},
"typeVersion": 2
},
{
"id": "d84e6e62-be1f-46d2-9700-d086bfa7e3f9",
"name": "トラフィックソースフォーマッタ",
"type": "n8n-nodes-base.code",
"position": [
960,
-144
],
"parameters": {
"jsCode": "// Input: 1 item berisi response JSON dari HTTP node di field 'data'\nconst res = items[0].json; // sesuaikan kalau output Anda beda\nconst headers = res.columnHeaders.map(h => h.name);\nconst out = (res.rows || []).map(r => {\n const obj = {};\n headers.forEach((h, i) => obj[h] = r[i]);\n return obj;\n});\nreturn out.map(o => ({ json: o }));\n"
},
"typeVersion": 2
},
{
"id": "34965865-7bc9-462c-812d-9f27b230dca9",
"name": "週間トップ動画フォーマッタ",
"type": "n8n-nodes-base.code",
"position": [
960,
-496
],
"parameters": {
"jsCode": "// Ambil data dari node sebelumnya\nconst res = items[0].json;\n\n// Ambil header kolom\nconst headers = res.columnHeaders.map(h => h.name);\n\n// Ubah rows jadi array of object\nconst parsed = (res.rows || []).map(r => {\n const obj = {};\n headers.forEach((h, i) => obj[h] = r[i]);\n\n // Rename views -> views_weekly\n if (obj.views !== undefined) {\n obj.views_weekly = obj.views;\n delete obj.views;\n }\n\n return obj;\n});\n\n// Ambil hanya kolom video (ID)\nconst ids = parsed.map(v => v.video);\n\n// Gabungkan jadi string CSV\nconst csv = ids.join(',');\n\n// Return satu item dengan field videoIdsCsv + juga parsed rows\nreturn [{\n json: {\n videoIdsCsv: csv,\n topVideos: parsed\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "adc07ff7-d09e-41f5-9635-2314d9911f45",
"name": "チャンネル概要フォーマッタ",
"type": "n8n-nodes-base.code",
"position": [
960,
-720
],
"parameters": {
"jsCode": "// Input: 1 item berisi response JSON dari HTTP node di field 'data'\nconst res = items[0].json; // sesuaikan kalau output Anda beda\nconst headers = res.columnHeaders.map(h => h.name);\nconst out = (res.rows || []).map(r => {\n const obj = {};\n headers.forEach((h, i) => obj[h] = r[i]);\n return obj;\n});\nreturn out.map(o => ({ json: o }));\n"
},
"typeVersion": 2
},
{
"id": "3d7fa276-77c3-46a1-9841-231d7f49f6cb",
"name": "週間視聴数と全期間視聴数の結合",
"type": "n8n-nodes-base.merge",
"position": [
1312,
-480
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "0e8c5e71-2f95-4db0-947a-3eeaf2636b4c",
"name": "結合ノード1 2 3",
"type": "n8n-nodes-base.merge",
"position": [
1728,
-480
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "2acfbe97-ce35-48e5-8a16-6ddc9331465a",
"name": "結合ノード1 2 3 4",
"type": "n8n-nodes-base.merge",
"position": [
1952,
-272
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "618d7960-3e49-4657-bed9-e71e81df10a1",
"name": "全出力フォーマッタ",
"type": "n8n-nodes-base.code",
"position": [
2144,
-272
],
"parameters": {
"jsCode": "// Ambil semua item hasil merge\nconst arr = items.map(i => i.json);\n\nconst result = {\n overview: [],\n topVideos: [],\n trafficSources: [],\n audience: []\n};\n\nfor (const item of arr) {\n // Cek apakah ini Overview (punya key 'day')\n if (item.day) {\n result.overview.push(item);\n }\n // Cek apakah ini objek gabungan TopVideos (ada 'items' dan 'topVideos')\n else if (item.items && item.topVideos) {\n \n // Ini bagian yang diubah\n result.topVideos = item.items.map(videoDetail => {\n // 1. Cari data analitik yang cocok berdasarkan ID video\n const analyticsData = item.topVideos.find(\n analyticsVideo => analyticsVideo.video === videoDetail.id\n );\n\n // 2. Gabungkan data dalam objek baru\n return {\n id: videoDetail.id,\n title: videoDetail.snippet.title,\n views_alltime: videoDetail.statistics.viewCount, // Total views seumur hidup\n views_weekly: analyticsData ? analyticsData.views_weekly : 0, // Views mingguan dari data analitik\n likes: videoDetail.statistics.likeCount,\n comments: videoDetail.statistics.commentCount,\n thumbnail: videoDetail.snippet.thumbnails?.default?.url\n };\n });\n }\n // Cek apakah ini Traffic Source (ada 'insightTrafficSourceType')\n else if (item.insightTrafficSourceType) {\n result.trafficSources.push(item);\n }\n // Cek apakah ini Audience (ada 'ageGroup')\n else if (item.ageGroup) {\n result.audience.push(item);\n }\n}\n\nreturn [{ json: result }];"
},
"typeVersion": 2
},
{
"id": "fd65cc2a-ed80-4382-814e-da36f3e820e2",
"name": "Telegram メッセージフォーマッタ",
"type": "n8n-nodes-base.code",
"position": [
2336,
-272
],
"parameters": {
"jsCode": "const data = items[0].json;\n\n// Ambil hanya 7 hari terakhir\nconst last7 = data.overview.slice(-7);\n\n// Hitung total & rata-rata\nconst totalViews = last7.reduce((sum, d) => sum + d.views, 0);\nconst totalLikes = last7.reduce((sum, d) => sum + d.likes, 0);\nconst totalComments = last7.reduce((sum, d) => sum + d.comments, 0);\nconst totalSubsGained = last7.reduce((sum, d) => sum + d.subscribersGained, 0);\nconst totalSubsLost = last7.reduce((sum, d) => sum + d.subscribersLost, 0);\nconst avgDuration = Math.round(\n last7.reduce((sum, d) => sum + d.averageViewDuration, 0) / last7.length\n);\n\n// Ambil rentang tanggal\nconst start = last7[0].day;\nconst end = last7[last7.length - 1].day;\n\nlet text = `📊 *Channel Summary (Last 7 days)*\\n`;\ntext += `Periode: ${start} ➝ ${end}\\n`;\ntext += `👁️ Views: ${totalViews}\\n`;\ntext += `⏱️ Avg. View Duration: ${avgDuration} detik\\n`;\ntext += `👍 Likes: ${totalLikes} | 💬 Comments: ${totalComments}\\n`;\ntext += `👥 Subs +${totalSubsGained} / -${totalSubsLost}\\n\\n`;\n\n// Top 5 Videos\ntext += `🔥 *Top 5 Videos*\\n`;\nfor (const v of data.topVideos.slice(0, 5)) {\n // --- BARIS INI YANG DIUBAH ---\n text += `- ${v.title}\\n 📈 ${v.views_weekly} (Last Week) | 👁️ ${v.views_alltime} (Total) | 👍 ${v.likes} | 💬 ${v.comments}\\n`;\n}\n\n// Top 3 Traffic Sources\ntext += `\\n🚦 *Top 3 Sources*\\n`;\nconst sortedSources = data.trafficSources.sort((a,b)=>b.views - a.views);\nfor (const s of sortedSources.slice(0, 3)) {\n text += `- ${s.insightTrafficSourceType}: ${s.views} views\\n`;\n}\n\n// Audience Demography (top 3)\ntext += `\\n👥 *Top Audience*\\n`;\nconst sortedAudience = data.audience.sort((a,b)=>b.viewerPercentage - a.viewerPercentage);\nfor (const aud of sortedAudience.slice(0, 3)) {\n text += `- ${aud.ageGroup} ${aud.gender}: ${aud.viewerPercentage}%\\n`;\n}\n\nreturn [{ json: { text } }];"
},
"typeVersion": 2
},
{
"id": "32373234-a574-4aae-a877-2f929952bf8c",
"name": "結合ノード1 2",
"type": "n8n-nodes-base.merge",
"position": [
1456,
-704
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "70a6943e-1f85-4536-a678-96d1106244d3",
"name": "毎週日曜6時に実行",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
96,
-240
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtHour": 6
}
]
}
},
"typeVersion": 1.2
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "94e8065d-cf9b-4a01-8434-3f29cf4ea43b",
"connections": {
"f87af746-24f4-43a5-82c1-400c5cf70b68": {
"main": [
[
{
"node": "d84e6e62-be1f-46d2-9700-d086bfa7e3f9",
"type": "main",
"index": 0
}
]
]
},
"08eb2d97-5306-47ce-8571-3ad837bc6c52": {
"main": [
[
{
"node": "adc07ff7-d09e-41f5-9635-2314d9911f45",
"type": "main",
"index": 0
}
]
]
},
"32373234-a574-4aae-a877-2f929952bf8c": {
"main": [
[
{
"node": "0e8c5e71-2f95-4db0-947a-3eeaf2636b4c",
"type": "main",
"index": 0
}
]
]
},
"cea3c6b3-f849-420e-9df2-bcd55c9c3ff3": {
"main": [
[
{
"node": "34965865-7bc9-462c-812d-9f27b230dca9",
"type": "main",
"index": 0
}
]
]
},
"227fce63-b178-485b-8f9c-d316820012be": {
"main": [
[
{
"node": "3d7fa276-77c3-46a1-9841-231d7f49f6cb",
"type": "main",
"index": 1
}
]
]
},
"0e8c5e71-2f95-4db0-947a-3eeaf2636b4c": {
"main": [
[
{
"node": "2acfbe97-ce35-48e5-8a16-6ddc9331465a",
"type": "main",
"index": 0
}
]
]
},
"2acfbe97-ce35-48e5-8a16-6ddc9331465a": {
"main": [
[
{
"node": "618d7960-3e49-4657-bed9-e71e81df10a1",
"type": "main",
"index": 0
}
]
]
},
"618d7960-3e49-4657-bed9-e71e81df10a1": {
"main": [
[
{
"node": "fd65cc2a-ed80-4382-814e-da36f3e820e2",
"type": "main",
"index": 0
}
]
]
},
"2bf25aae-c867-46a8-8f4f-968553448659": {
"main": [
[
{
"node": "a129db52-cddf-43dc-8028-ba6aa00953d8",
"type": "main",
"index": 0
}
]
]
},
"70a6943e-1f85-4536-a678-96d1106244d3": {
"main": [
[
{
"node": "08eb2d97-5306-47ce-8571-3ad837bc6c52",
"type": "main",
"index": 0
},
{
"node": "cea3c6b3-f849-420e-9df2-bcd55c9c3ff3",
"type": "main",
"index": 0
},
{
"node": "f87af746-24f4-43a5-82c1-400c5cf70b68",
"type": "main",
"index": 0
},
{
"node": "2bf25aae-c867-46a8-8f4f-968553448659",
"type": "main",
"index": 0
}
]
]
},
"d84e6e62-be1f-46d2-9700-d086bfa7e3f9": {
"main": [
[
{
"node": "0e8c5e71-2f95-4db0-947a-3eeaf2636b4c",
"type": "main",
"index": 1
}
]
]
},
"adc07ff7-d09e-41f5-9635-2314d9911f45": {
"main": [
[
{
"node": "32373234-a574-4aae-a877-2f929952bf8c",
"type": "main",
"index": 0
}
]
]
},
"34965865-7bc9-462c-812d-9f27b230dca9": {
"main": [
[
{
"node": "227fce63-b178-485b-8f9c-d316820012be",
"type": "main",
"index": 0
},
{
"node": "3d7fa276-77c3-46a1-9841-231d7f49f6cb",
"type": "main",
"index": 0
}
]
]
},
"fd65cc2a-ed80-4382-814e-da36f3e820e2": {
"main": [
[
{
"node": "5c0f2672-7568-4db6-897e-665a4cce7382",
"type": "main",
"index": 0
}
]
]
},
"a129db52-cddf-43dc-8028-ba6aa00953d8": {
"main": [
[
{
"node": "2acfbe97-ce35-48e5-8a16-6ddc9331465a",
"type": "main",
"index": 1
}
]
]
},
"3d7fa276-77c3-46a1-9841-231d7f49f6cb": {
"main": [
[
{
"node": "32373234-a574-4aae-a877-2f929952bf8c",
"type": "main",
"index": 1
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - 市場調査
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
マルチサイト製品価格監視:Claude-Sonnet、Google シート、Telegram アラート
電子商取引価格監視システム:Firecrawl・Claude-Sonnet AI・Telegramを使用
Code
Wait
Merge
+
Code
Wait
Merge
19 ノードCheng Siong Chin
市場調査
地政学のニュースフラッシュアラート
地政学のニューススナップをAIスコアリングとTelegramアラートでフィルタリング
If
Code
Merge
+
If
Code
Merge
30 ノードDev Dutta
市場調査
GPT-4とApifyを基盤としたAI駆動型競合他社・市場インテリジェンスシステム
GPT-4とApifyを基盤としたAI駆動型競合他社・市場インテリジェンスシステム
Code
Merge
Slack
+
Code
Merge
Slack
12 ノードMarth
市場調査
YouTubeコメントの感情とキーワードエクスプローラー
Gemini AIを使ってYouTubeコメントの感情とキーワードを分析し、Telegram経由でレポートを送信する
Set
Code
Telegram
+
Set
Code
Telegram
20 ノードBudi SJ
市場調査
オランダの公共採用情報をTenderNedで自動収集
オランダの公開請求データ収集を TenderNed で自動化
Xml
Code
Merge
+
Xml
Code
Merge
28 ノードWessel Bulte
市場調査
GPT-4インサイトとSlackを使用した週次SEOレポートの自動配信
GPT-4洞察とSlackを使って週次のSEOレポートを自動化
Set
Code
Merge
+
Set
Code
Merge
42 ノードMarcelo Abreu
市場調査