8
n8n 한국어amn8n.com

구글 플레이 스토어와 SerpApi 앱 순위 및 평점 모니터링

중급

이것은Market Research, Multimodal AI분야의자동화 워크플로우로, 15개의 노드를 포함합니다.주로 Code, Wait, SerpApi, GoogleSheets, SplitInBatches 등의 노드를 사용하며. 구글 플레이 스토어와 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)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수15
카테고리2
노드 유형7
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34