Google PlayストアとSerpApiアプリランキングと評価のモニタリング
中級
これはMarket Research, Multimodal AI分野の自動化ワークフローで、15個のノードを含みます。主にCode, Wait, SerpApi, GoogleSheets, SplitInBatchesなどのノードを使用。 Google PlayストアとSerpApiアプリランキング評価監視システム
前提条件
- •Google Sheets API認証情報
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "886f6aad18962318bf6e0e61dcc99fe4272655356eb72558c67fde0caf721bc9",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "663b52e3-3baa-40b9-b236-7a2b9bac0f1f",
"name": "ランキング・評価ログ更新",
"type": "n8n-nodes-base.googleSheets",
"position": [
820,
40
],
"parameters": {
"columns": {
"value": {
"rank": "={{ $json.rank }}",
"rating": "={{ $json.rating }}",
"keyword": "={{ $('Search Google Play').item.json.search_parameters.q }}",
"searched_at": "={{ $now.toISO() }}",
"app_title_to_match": "={{ $('Loop Over Keywords').item.json.app_title_to_match }}"
},
"schema": [
{
"id": "searched_at",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "searched_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "app_title_to_match",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "app_title_to_match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "keyword",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "keyword",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "rank",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "rank",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "rating",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "rating",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {
"useAppend": true
},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "url",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
}
},
"credentials": {},
"typeVersion": 4.5
},
{
"id": "c2840876-46bb-4355-9e89-b90743a5ed4c",
"name": "待機",
"type": "n8n-nodes-base.wait",
"position": [
1260,
115
],
"webhookId": "71256d52-4b36-45a3-9e45-f55f28df091a",
"parameters": {
"amount": 4
},
"typeVersion": 1.1
},
{
"id": "cd4f9a3b-2ef8-4d7d-b016-887a81eda107",
"name": "スケジュールトリガー",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-280,
115
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 10
}
]
}
},
"typeVersion": 1.2
},
{
"id": "d8f9a1e2-8686-4aef-9ab4-49e694ff494a",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
-180
],
"parameters": {
"color": 7,
"width": 200,
"height": 460,
"content": "## Schedule\n\nConfigured to run at 10 AM UTC every day. Adjust as needed or trigger it manually."
},
"typeVersion": 1
},
{
"id": "f6ce04bc-263c-44c6-b650-1b6947c1a1e4",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
-180
],
"parameters": {
"color": 7,
"width": 400,
"height": 460,
"content": "## Get Keywords and Titles to Match\n\nReads your Google Sheet to fetch your keywords and app titles to match.\n\nThen loops over each row."
},
"typeVersion": 1
},
{
"id": "2c3c0cbb-ff02-488d-b81b-cfac44bcea2a",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
540,
-180
],
"parameters": {
"color": 7,
"width": 220,
"height": 460,
"content": "## Parse Rank & Rating\n\nCode to find and parse target app's rank and rating. Assigns \"N/A\" if an app title is not found in the results."
},
"typeVersion": 1
},
{
"id": "52f66150-7693-4a10-9751-f753a97de6d1",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
-180
],
"parameters": {
"color": 7,
"width": 200,
"height": 460,
"content": "## Search Google Play\n\nSearches keyword in SerpApi's Google Play Store API."
},
"typeVersion": 1
},
{
"id": "f4ea5441-9de0-42a2-9dea-aa545c23f18e",
"name": "検索キーワードとタイトル取得",
"type": "n8n-nodes-base.googleSheets",
"position": [
-60,
115
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "url",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
}
},
"credentials": {},
"typeVersion": 4.5
},
{
"id": "68f1519c-061d-4a95-8d45-f79ff7082ec6",
"name": "キーワードループ処理",
"type": "n8n-nodes-base.splitInBatches",
"position": [
160,
120
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "7c9a95f8-5e5e-44e3-a6ec-9eeb014ec3c7",
"name": "Google Play検索",
"type": "n8n-nodes-serpapi.serpApi",
"position": [
380,
40
],
"parameters": {
"q": "={{ $json.keyword }}",
"operation": "google_play",
"requestOptions": {},
"additionalFields": {}
},
"credentials": {},
"typeVersion": 1
},
{
"id": "ab545189-47c1-4074-ba76-020667b0101c",
"name": "対象アプリのランキング・評価解析",
"type": "n8n-nodes-base.code",
"position": [
600,
40
],
"parameters": {
"jsCode": "index = $input.first().json.organic_results[0].items.findIndex(obj => obj.title.includes($('Loop Over Keywords').first().json.app_title_to_match));\n\nif (index >= 0) {\n rank = index + 1;\n rating = $input.first().json.organic_results[0].items[index].rating\n} else {\n rank = \"N/A\"\n rating = \"N/A\"\n}\n\nreturn {\n rank: rank,\n rating: rating\n};"
},
"typeVersion": 2
},
{
"id": "f92cd971-38f9-4878-896b-a0781fee0f60",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
780,
-460
],
"parameters": {
"width": 440,
"height": 740,
"content": "## Update Google Sheet\n\nLogs results to results log and updates last run overview sheet.\n\nAdd your own Google Sheet here.\n\nIf the mappings get wiped when you add your Google Sheet, here they are:\n\nsearched_at: `{{ $now.toISO() }}`\napp_title_to_match: `{{ $('Loop Over Keywords').item.json.app_title_to_match }}`\nkeyword: `{{ $('Search Google Play').item.json.search_parameters.q }}`\nrank: `{{ $json.rank }}`\nrating: `{{ $json.rating }}`\n\nThe update last run node should match on `title_keyword_pair`. Enter this expression to match on:\n\n`{{ $('Loop Over Keywords').item.json.title_keyword_pair }}`"
},
"typeVersion": 1
},
{
"id": "3ed6ab74-e07f-4b8c-a57b-6f918204bba9",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1240,
-180
],
"parameters": {
"color": 7,
"width": 200,
"height": 460,
"content": "## Delay\n\nWait 4 seconds before going to next row to not hit Google Sheets API's per minute quota limit. You can remove/adjust this if you have a a higher quota limit on the Google Sheets API. "
},
"typeVersion": 1
},
{
"id": "958079ab-11a4-464b-8a7d-fc832083bf5e",
"name": "付箋6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-860,
-420
],
"parameters": {
"width": 520,
"height": 1040,
"content": "## Google Play Store App Rank and Rating Monitoring\n\n### What and who this is for\n\nThis workflow will be useful for anyone looking to do SEO tracking on the Google Play Store. It automates checking Google Play Store rank positions and average ratings for a list of app titles.\n\nThe SerpApi component can also be modified to use other APIs for anyone looking for SEO tracking on any other search engine supported by SerpApi.\n\n### How it works\n\nThis workflow takes in a list of keywords and app titles to identify the apps' rank in Google Play Store search results. It also grabs the average rating of the app. The search uses SerpApi's Google Play Store API.\n\nThe results are then synced to two different sheets in a Google Sheet. The first is a log of all past run. The latest results are appended to the bottom of the log. The second updates a kind of \"dashboard\" to show the results from the latest run.\n\nThe workflow includes a Wait node that delays 4 seconds between each app title and keyword pair to prevent hitting the default Google Sheets' API per minute rate limit. You can delete this if you have a high enough custom rate limit on the Google Sheets API.\n\nThe Schedule Trigger is configured to run at 10 AM UTC every day.\n\n### How to use\n\n1. Create a free SerpApi account here: https://serpapi.com/\n1. Add SerpApi credentials to n8n. Your SerpApi API key is here: https://serpapi.com/manage-api-key\n1. Connect your Google Sheets accounts to n8n. Help available here: https://n8n.io/integrations/google-sheets/\n1. Copy this Google Sheet to your own Google account: https://docs.google.com/spreadsheets/d/1DiP6Zhe17tEblzKevtbPqIygH3dpPCW-NAprxup0VqA/edit?gid=1750873622#gid=1750873622\n1. Set your own list of keywords and app titles to match in the 'Latest Run' sheet. This is the source list used to run the searches and must be set.\n1. Connect your Google Sheet in the 'Get Keywords and Titles to Match' Google Sheet node\n1. Connect your Google Sheet in the 'Update Rank & Rating Log' Google Sheet node\n1. Connect your Google Sheet again in the 'Update Latest Run' Google Sheet node\n1. (Optional) Update the schedule or disable the schedule to only run manually\n\n### Documentation\n\n[SerpApi Google Play Store API](https://serpapi.com/google-play-api)\n[SerpApi n8n Node Intro Guide](https://serpapi.com/blog/boost-your-n8n-workflows-with-serpapis-verified-node/)\n"
},
"typeVersion": 1
},
{
"id": "dd0c2409-a2d4-49d4-81eb-9124d7628957",
"name": "最終実行日時更新",
"type": "n8n-nodes-base.googleSheets",
"position": [
1040,
40
],
"parameters": {
"columns": {
"value": {
"rank": "={{ $('Parse Rank & Rating for Target App').item.json.rank }}",
"rating": "={{ $('Parse Rank & Rating for Target App').item.json.rating }}",
"keyword": "={{ $('Loop Over Keywords').item.json.keyword }}",
"searched_at": "={{ $now.toISO() }}",
"app_title_to_match": "={{ $('Loop Over Keywords').item.json.app_title_to_match }}",
"title_keyword_pair": "={{ $('Loop Over Keywords').item.json.title_keyword_pair }}"
},
"schema": [
{
"id": "app_title_to_match",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "app_title_to_match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "keyword",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "keyword",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title_keyword_pair",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "title_keyword_pair",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "rank",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "rank",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "rating",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "rating",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "searched_at",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "searched_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"title_keyword_pair"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "url",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
}
},
"credentials": {},
"typeVersion": 4.5
}
],
"pinData": {},
"connections": {
"c2840876-46bb-4355-9e89-b90743a5ed4c": {
"main": [
[
{
"node": "68f1519c-061d-4a95-8d45-f79ff7082ec6",
"type": "main",
"index": 0
}
]
]
},
"cd4f9a3b-2ef8-4d7d-b016-887a81eda107": {
"main": [
[
{
"node": "f4ea5441-9de0-42a2-9dea-aa545c23f18e",
"type": "main",
"index": 0
}
]
]
},
"dd0c2409-a2d4-49d4-81eb-9124d7628957": {
"main": [
[
{
"node": "c2840876-46bb-4355-9e89-b90743a5ed4c",
"type": "main",
"index": 0
}
]
]
},
"68f1519c-061d-4a95-8d45-f79ff7082ec6": {
"main": [
[],
[
{
"node": "7c9a95f8-5e5e-44e3-a6ec-9eeb014ec3c7",
"type": "main",
"index": 0
}
]
]
},
"7c9a95f8-5e5e-44e3-a6ec-9eeb014ec3c7": {
"main": [
[
{
"node": "ab545189-47c1-4074-ba76-020667b0101c",
"type": "main",
"index": 0
}
]
]
},
"663b52e3-3baa-40b9-b236-7a2b9bac0f1f": {
"main": [
[
{
"node": "dd0c2409-a2d4-49d4-81eb-9124d7628957",
"type": "main",
"index": 0
}
]
]
},
"f4ea5441-9de0-42a2-9dea-aa545c23f18e": {
"main": [
[
{
"node": "68f1519c-061d-4a95-8d45-f79ff7082ec6",
"type": "main",
"index": 0
}
]
]
},
"ab545189-47c1-4074-ba76-020667b0101c": {
"main": [
[
{
"node": "663b52e3-3baa-40b9-b236-7a2b9bac0f1f",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - 市場調査, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Google MapsレビューをGoogleスプレッドシートに同期
SerpApiを利用したGoogle MapsレビューからGoogle表格への同期
If
Set
Code
+
If
Set
Code
22 ノードSerpApi
市場調査
MetaAdsクリエイティブインサイトリサーチャーv1.4
Google VisionとVideo Intelligence APIを使ってMeta広告のクリエイティブを分析する
If
Set
Code
+
If
Set
Code
32 ノードKirill Khatkevich
市場調査
Googleトレンド、ニュース、Firecrawl、そしてClaude AIを使った自動コンテンツ戦略
Google トレンド、ニュース、Firecrawl、Claude AI を用いた自動コンテンツ戦略
Set
Code
Aggregate
+
Set
Code
Aggregate
22 ノードGrowth AI
市場調査
YouTubeコメントの感情とキーワードエクスプローラー
Gemini AIを使ってYouTubeコメントの感情とキーワードを分析し、Telegram経由でレポートを送信する
Set
Code
Telegram
+
Set
Code
Telegram
20 ノードBudi SJ
市場調査
10 - ビジネスマップトラッカー
SerpAPI、Google Table、Airtableを使用した毎日の競合調査の自動化
If
Code
Airtable
+
If
Code
Airtable
15 ノードAvkash Kakdiya
市場調査
OpenAIのgpt-image-1とAIキャプションを使ってInstagramカルーセルを作成し、公開する
Google SheetsからGPT-Image-1とAIキャプションを使用してInstagramカルーセルを自動生成
If
Set
Code
+
If
Set
Code
32 ノードJorge Martínez
マルチモーダルAI