AutomationFlowsGeneral › Generate SEO Keyword Search Volume with Google API

Generate SEO Keyword Search Volume with Google API

Original n8n title: Generate SEO Keyword Search Volume Data Using Google API

Generate Seo Keyword Search Volume Data Using Google Api. Uses manualTrigger, stickyNote, splitOut, noOp. Event-driven trigger; 12 nodes.

Event trigger★★★★☆ complexity12 nodesHTTP Request
General Trigger: Event Nodes: 12 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "f4570aad-db25-4dcd-8589-b1c8335935de",
      "name": "When clicking \u2018Test workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        480,
        1800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1c1be9d6-3fd5-44c2-a7dd-d291b9efe65b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -260,
        1360
      ],
      "parameters": {
        "color": 4,
        "width": 657.3293805248016,
        "height": 843.3412992154545,
        "content": "## Generate SEO Keyword Search Volume Data using Google API\n\n## Use Case\nGenerate accurate search volume data for SEO keyword research:\n- You have a list of potential keywords to target for your website SEO but don't know their actual search volume\n- You need historical data to identify seasonal trends in keyword popularity\n- You want to assess keyword difficulty to prioritize your content strategy\n- You need data-driven insights for planning your SEO campaigns\n\n## What this Workflow Does\nThe workflow connects to Google's Keyword Planner API to retrieve keyword metrics for your SEO research:\n\n- Fetches monthly search volume for each keyword\n- Provides historical trends data for the past 12 months\n- Calculates keyword difficulty scores\n- Delivers competition metrics from Google Ads\n\n\n## Setup\n1. Fill the `Set 20 Keywords` with up to 20 Keywords of your choosing in an array e.g. [\"keyword 1\", \"keyword 2\",...]\n2. Create a Google Ads API account and add credentials to `Get Search Data` node\n3. Replace the `Connect to your own database` with your own database for the output\n\n\n## How to Adjust it to Your Needs\n- Change the `Set 20 Keywords` node input to a source of your choosing e.g. Airtable database with 20 keywords\n- Connect to output source of your choosing \n\n\nMade by Simon @ automake.io"
      },
      "typeVersion": 1
    },
    {
      "id": "adbbe4ee-d671-4b9b-b619-47f7522e2af4",
      "name": "Split Out by KW",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1180,
        1800
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "results"
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "654c95b4-1018-496e-a0eb-75fddfd98d68",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        622.1526025594685,
        1740
      ],
      "parameters": {
        "color": 7,
        "width": 250.00985945500486,
        "height": 249.10159911061476,
        "content": "**Set up to 20 keywords** "
      },
      "typeVersion": 1
    },
    {
      "id": "0ddcd5f2-fb3b-425c-95d3-f22b9b99c3c4",
      "name": "Sticky Note25",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1400,
        1740
      ],
      "parameters": {
        "color": 7,
        "width": 231.51775697271012,
        "height": 213.62075341687063,
        "content": "**Update record in own Database**"
      },
      "typeVersion": 1
    },
    {
      "id": "dca7e597-4aa9-440b-8861-2453a5e455fe",
      "name": "Sticky Note26",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        891.5919235222407,
        1740
      ],
      "parameters": {
        "color": 7,
        "width": 475.3228796552902,
        "height": 250.67161641737852,
        "content": "**POST request to Google API for Keyword Data**"
      },
      "typeVersion": 1
    },
    {
      "id": "217565a9-0c8b-4725-bbda-bcd1968567ac",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        2000
      ],
      "parameters": {
        "color": 3,
        "width": 248.59379819295242,
        "height": 94.39142091152823,
        "content": "**REQUIRED**\nRemove pinned data in 'Set >= 20 Keywords' to test and connect to own datasource if desired"
      },
      "typeVersion": 1
    },
    {
      "id": "a836e364-0526-47aa-938a-d32cc47efbd8",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        2000
      ],
      "parameters": {
        "color": 3,
        "width": 723.161826981043,
        "height": 217.5249520543415,
        "content": "**REQUIRED**\nAt this time 15/10/2024 this API endpoint is the latest, it will need to be updated as it changes\nhttps://developers.google.com/google-ads/api/docs/concepts/call-structure\n\n**Replace the following in the HTTP request with your own account values**\n- URL >> customer_id must be your own account customer id e.g. '1234567890' in https://googleads.googleapis.com/v16/customers/1234567890:generateKeywordHistoricalMetrics\n- developer-token\n- login-customer-id"
      },
      "typeVersion": 1
    },
    {
      "id": "3dac2fe3-8710-49cc-87ed-918972d00354",
      "name": "Sticky Note21",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1400,
        1640
      ],
      "parameters": {
        "color": 3,
        "width": 284.87764467541297,
        "height": 80,
        "content": "**REQUIRED**\nConnect to your own database / GSheet / Airtable base to output these"
      },
      "typeVersion": 1
    },
    {
      "id": "806fd20d-4bc4-41a3-9ef7-77561e2cfc0c",
      "name": "Set >=20 Keywords",
      "type": "n8n-nodes-base.set",
      "notes": "Insert up to 20 keywords to test",
      "position": [
        680,
        1800
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "973e949e-1afd-4378-8482-d2168532eff6",
              "name": "Keyword",
              "type": "array",
              "value": "=[\"workflow automation software\", \"enterprise workflow automation\", \"finance automation software\", \"saas automation platform\", \"automation roi calculator\", \"hr process automation\", \"data synchronization software\", \"n8n workflow automation\", \"scalable business operations\", \"n8n vs zapier\", \"lead generation automation\", \"automation consulting services\", \"n8n automation\", \"marketing automation tools\", \"custom automation solutions\", \"ecommerce automation solutions\", \"business process automation\", \"small business automation\", \"no code automation\", \"crm automation integration\"] "
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "430d4950-1e49-460e-bb9b-56e0e825e621",
      "name": "Connect to your own database.",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1460,
        1800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "464cfe3f-3a3f-4ec0-882d-861e48916e0b",
      "name": "Get Search Data",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Seed KW with Vol & Comp\n\nhttps://developers.google.com/google-ads/api/docs/concepts/call-structure Google API call structure",
      "position": [
        960,
        1800
      ],
      "parameters": {
        "url": "https://googleads.googleapis.com/v16/customers/{customer_id}:generateKeywordHistoricalMetrics",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "keywords",
              "value": "={{ $json.Keyword }}"
            },
            {
              "name": "keywordPlanNetwork",
              "value": "GOOGLE_SEARCH"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/json"
            },
            {
              "name": "developer-token",
              "value": "replace-with-value"
            },
            {
              "name": "login-customer-id",
              "value": "replace-with-value"
            }
          ]
        },
        "nodeCredentialType": "googleAdsOAuth2Api"
      },
      "credentials": {
        "googleAdsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": false,
      "retryOnFail": true,
      "typeVersion": 4.2
    }
  ],
  "connections": {
    "Get Search Data": {
      "main": [
        [
          {
            "node": "Split Out by KW",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out by KW": {
      "main": [
        [
          {
            "node": "Connect to your own database.",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set >=20 Keywords": {
      "main": [
        [
          {
            "node": "Get Search Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Set >=20 Keywords",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

How this works

This workflow empowers SEO specialists and content marketers to swiftly obtain accurate search volume data for targeted keywords, saving hours of manual research and enabling data-driven decisions on content strategy. It processes a list of keywords you provide, querying the Google API to retrieve monthly search volumes, competition levels, and related metrics essential for optimising website visibility. The key step involves splitting the input keywords into individual queries before sending them via HTTP requests to the Google API, ensuring efficient handling of bulk data without overwhelming the service.

Use this workflow when analysing keyword performance for upcoming campaigns or auditing existing content, particularly if you already have Google API credentials set up for reliable access. Avoid it for real-time applications or when dealing with extremely high-volume keyword lists, as API rate limits may apply; instead, consider batching over multiple runs. Common variations include adding nodes to export results to Google Sheets for collaborative review or integrating with tools like Ahrefs for supplementary data enrichment.

About this workflow

Generate Seo Keyword Search Volume Data Using Google Api. Uses manualTrigger, stickyNote, splitOut, noOp. Event-driven trigger; 12 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

Kv Cloudflare Key Value Database Full Api Integration Workflow. Uses stickyNote, httpRequest, manualTrigger. Event-driven trigger; 47 nodes.

HTTP Request
General

Reputation Engine — Site Refresh. Uses httpRequest, executeWorkflowTrigger. Event-driven trigger; 35 nodes.

HTTP Request, Execute Workflow Trigger
General

Reputation Engine — Content Generator. Uses httpRequest. Event-driven trigger; 30 nodes.

HTTP Request
General

PRECALL. Uses executeWorkflowTrigger, httpRequest. Event-driven trigger; 23 nodes.

Execute Workflow Trigger, HTTP Request
General

Blog Post → Social Media. Uses rssFeedTrigger, httpRequest. Event-driven trigger; 22 nodes.

Rss Feed Trigger, HTTP Request