DataForSEO + Google Sheets: keyword research done
Your keyword research shouldn’t live in five browser tabs, two CSV exports, and a “final-final” spreadsheet you’re afraid to touch. But that’s how it usually goes. One more manual export, one more copy-paste, one more broken column.
SEO managers feel it when they need fast SERP intel for a content plan. Content leads run into it when writers ask for “just a few more keyword ideas.” And if you run an agency, you’re probably rebuilding the same research workbook for every client. This DataForSEO Sheets automation turns that mess into a clean, repeatable process.
You’ll see what the workflow pulls (related keywords, suggestions, keyword ideas, autocomplete, subtopics, and SERP/PAA), how it organizes everything in Google Sheets, and where the real time savings come from.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: DataForSEO + Google Sheets: keyword research done
flowchart LR
subgraph sg0["Manual Launch Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Launch Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Retrieve Sheet Data", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Create Worksheet File", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Move Drive File", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Related Items", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Related Metrics", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Suggestions", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Suggested Fields", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Idea Items", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Idea Fields", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Autocomplete", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Autocomplete Fields", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Subtopics", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Related Keywords"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Keyword Suggestions"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Keyword Ideas"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Autocomplete"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Subtopics"]
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Subtopic Fields", pos: "b", h: 48 }
n19@{ icon: "mdi:database", form: "rounded", label: "Append Related Master", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Append Related Sheet", pos: "b", h: 48 }
n21@{ icon: "mdi:database", form: "rounded", label: "Append Suggestions Master", pos: "b", h: 48 }
n22@{ icon: "mdi:database", form: "rounded", label: "Append Suggested Sheet", pos: "b", h: 48 }
n23@{ icon: "mdi:database", form: "rounded", label: "Append Ideas Master", pos: "b", h: 48 }
n24@{ icon: "mdi:database", form: "rounded", label: "Append Ideas Sheet", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Append Autocomplete Master", pos: "b", h: 48 }
n26@{ icon: "mdi:database", form: "rounded", label: "Append Autocomplete Sheet", pos: "b", h: 48 }
n27@{ icon: "mdi:database", form: "rounded", label: "Append Subtopics Master", pos: "b", h: 48 }
n28@{ icon: "mdi:database", form: "rounded", label: "Append Subtopics Sheet", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand SERP Items", pos: "b", h: 48 }
n30@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map SERP Fields", pos: "b", h: 48 }
n31@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter PAA Type", pos: "b", h: 48 }
n32@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Organic Type", pos: "b", h: 48 }
n33["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch SERP Results"]
n34@{ icon: "mdi:database", form: "rounded", label: "Append SERP Master", pos: "b", h: 48 }
n35@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand SERP Details", pos: "b", h: 48 }
n36@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map SERP Detail", pos: "b", h: 48 }
n37@{ icon: "mdi:database", form: "rounded", label: "Append SERP Details", pos: "b", h: 48 }
n31 --> n35
n32 --> n30
n4 --> n5
n6 --> n7
n8 --> n9
n10 --> n11
n12 --> n18
n29 --> n31
n29 --> n32
n35 --> n36
n5 --> n19
n30 --> n34
n7 --> n21
n9 --> n23
n11 --> n25
n36 --> n37
n18 --> n27
n3 --> n13
n3 --> n14
n3 --> n15
n3 --> n16
n3 --> n17
n3 --> n33
n1 --> n2
n17 --> n12
n15 --> n8
n2 --> n3
n19 --> n20
n21 --> n22
n23 --> n24
n25 --> n26
n27 --> n28
n33 --> n29
n13 --> n4
n16 --> n10
n14 --> n6
n0 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n31,n32 decision
class n1,n2,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n34,n37 database
class n13,n14,n15,n16,n17,n33 api
classDef customIcon fill:none,stroke:none
class n13,n14,n15,n16,n17,n33 customIcon
The Problem: Keyword Research Turns Into Spreadsheet Chaos
Keyword research sounds simple until you try to do it “properly.” You pull related keywords from one place, suggestions from another, then you still need autocomplete, People Also Ask, and a quick SERP gut-check. Now you’re exporting CSVs, pasting into Sheets, cleaning columns, deduplicating, and trying to remember which tab contains the version you trust. And if you’re researching multiple seed keywords, you repeat the whole routine over and over. It’s not hard work. It’s just endless.
The friction compounds. Here’s where it breaks down in real teams.
- Exports come in different formats, so your “master sheet” becomes a one-off formatting project every time.
- Manual copying makes errors sneak in, especially for CPC, competition, and keyword difficulty fields.
- SERP insights and “People Also Ask” questions are often skipped because pulling them is a hassle.
- Research gets stuck in someone’s laptop folder instead of living in a shared, organized Google Drive location.
The Solution: DataForSEO Research Sent Straight Into a Structured Sheet
This n8n workflow runs your keyword research like a mini pipeline. You start with a simple input sheet (primary keyword, location, language). When you launch the workflow, it creates a brand-new Google Sheet named with today’s date, builds out a set of tabs (master, related keywords, keyword ideas, suggestions, autocomplete, subtopics, SERP, content), then moves that sheet into a dedicated Google Drive folder so it’s easy to find later. From there, it calls multiple DataForSEO endpoints and collects everything you’d normally assemble by hand: related keyword lists, suggestions, keyword ideas, autocomplete queries, subtopics, plus SERP results including “People Also Ask.” Finally, n8n maps the responses into consistent columns and appends rows into the right tabs.
The workflow starts on-demand via a manual trigger, so you run it when you’re planning content. DataForSEO pulls the datasets, n8n splits the responses into individual items, and Google Sheets becomes the destination for every clean, formatted row. You end with a research workbook you can hand to a writer (or import into a briefing system) without apologizing first.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you research 10 seed keywords for a new blog cluster. Manually, you might pull 6 datasets (related keywords, suggestions, ideas, autocomplete, subtopics, plus SERP/PAA), and spend maybe 10 minutes per dataset per seed keyword once you include exporting and cleaning. That’s roughly 10 hours of busywork. With this workflow, you update one input sheet, click “Test workflow,” and wait while DataForSEO fills a dated workbook. Your “work” is mostly review and prioritization, not formatting rows.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store inputs and research outputs.
- Google Drive to file the generated workbook in a folder.
- DataForSEO credentials (get HTTP Basic Auth details in your DataForSEO dashboard)
Skill level: Intermediate. You’ll connect accounts, paste credentials, and confirm the right Sheet IDs and folder location.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You launch it when you’re ready. The workflow is triggered manually (click “Test workflow”), which is perfect for content planning sessions and ad-hoc research requests.
Your input sheet becomes the brief. n8n reads primary keywords along with location and language from a Google Sheet, so you’re not editing nodes every time you change a target market.
DataForSEO pulls everything in one run. The workflow calls multiple DataForSEO endpoints to fetch related keywords, suggestions, keyword ideas, autocomplete, subtopics, and SERP results. It then splits large responses into individual rows, maps fields like volume, CPC, competition, difficulty, and item types, and filters SERP data so People Also Ask doesn’t get mixed into organic results.
Google Sheets becomes the single destination. Each dataset is appended into both a master tab and a dedicated tab (related, ideas, suggested, autocomplete, subtopics, SERP details), and the whole workbook is moved into a specific Google Drive folder for neat storage.
You can easily modify the sheet tabs and which fields you save to match your reporting style. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts manually to pull a keyword seed and generate multiple research outputs.
- Add the Manual Launch Trigger node as the starting trigger.
- Keep the default settings (no parameters required).
- Connect Manual Launch Trigger to Retrieve Sheet Data.
Step 2: Connect Google Sheets Inputs and File Creation
These nodes read the input keyword data and create a new worksheet file for results.
- Open Retrieve Sheet Data and set Document to your source spreadsheet (replace
[YOUR_ID]). - Set Sheet Name to the list value
gid=0(Sheet1). - Credential Required: Connect your googleSheetsOAuth2Api credentials to Retrieve Sheet Data.
- Open Create Worksheet File and set Title to
={{ $now.format('yyyy-MM-dd') }}-seo pro. - Set Resource to
spreadsheet, and confirm the sheets list includeskeyword,SERP,Content,related keyword,keyword ideas,suggested keyword,sub topics, andauto complete. - Credential Required: Connect your googleSheetsOAuth2Api credentials to Create Worksheet File.
primary keyword, location name, and language name—they are referenced throughout the workflow.Step 3: Configure Google Drive File Placement
The new spreadsheet is moved into a target Drive folder before data collection begins.
- Open Move Drive File and set Operation to
move. - Set File ID to
={{ $json.spreadsheetId }}so it moves the newly created spreadsheet. - Select the destination Folder (replace
[YOUR_ID]). - Credential Required: Connect your googleDriveOAuth2Api credentials to Move Drive File.
Step 4: Configure DataForSEO HTTP Requests (Parallel Execution)
After the file is moved, the workflow fan-outs into multiple DataForSEO calls that run simultaneously.
- Confirm that Move Drive File outputs to Fetch Related Keywords, Fetch Keyword Suggestions, Fetch Keyword Ideas, Fetch Autocomplete, Generate Subtopics, and Fetch SERP Results in parallel.
- In Fetch Related Keywords, set URL to
https://api.dataforseo.com/v3/dataforseo_labs/google/related_keywords/liveand confirm the JSON Body uses{{ $('Retrieve Sheet Data').item.json['primary keyword'] }},{{ $('Retrieve Sheet Data').item.json['location name'] }}, and{{ $('Retrieve Sheet Data').item.json['language name'] }}. - Credential Required: Connect your httpBasicAuth credentials to Fetch Related Keywords (and optionally httpHeaderAuth if your API requires it).
- Repeat the same input mapping for Fetch Keyword Suggestions, Fetch Keyword Ideas, Fetch Autocomplete, and Generate Subtopics, using their respective URLs.
- Credential Required: Connect your httpBasicAuth credentials to all DataForSEO HTTP nodes (Fetch Keyword Suggestions, Fetch Keyword Ideas, Fetch Autocomplete, Generate Subtopics, Fetch SERP Results).
https://api.dataforseo.[CONFIGURE_YOUR_API_KEY] to your live endpoint before testing.Step 5: Configure Split and Mapping for Keyword Outputs
Each API response is expanded and mapped into structured fields before writing to sheets.
- For related keywords, set Expand Related Items Field to Split Out to
tasks[0].result[0].items, then map with Map Related Metrics using expressions like={{ $('Retrieve Sheet Data').item.json['primary keyword'] }}and={{ $json.keyword_data.keyword_info.search_volume }}. - For suggestions and ideas, ensure Expand Suggestions and Expand Idea Items also split
tasks[0].result[0].items, then map with Map Suggested Fields and Map Idea Fields (e.g.,={{ $json.keyword_info.cpc }}and={{ $json.search_intent_info.main_intent }}). - For autocomplete, set Expand Autocomplete to split
tasks[0].result[0].itemsand map with Map Autocomplete Fields, including={{ $json.suggestion }}. - For subtopics, set Expand Subtopics Field to Split Out to
tasks[0].result[0].sub_topicsand map with Map Subtopic Fields using={{ $json.sub_topics }}.
Step 6: Configure SERP Parsing and Filters (Parallel Branches)
SERP results are expanded, filtered into two types, and then mapped to different outputs.
- Set Expand SERP Items Field to Split Out to
tasks[0].result[0].items. - Confirm that Expand SERP Items outputs to both Filter PAA Type and Filter Organic Type in parallel.
- In Filter PAA Type, set the condition to
={{ $json.type }}equalspeople_also_ask. - In Filter Organic Type, set the condition to
={{ $json.type }}equalsorganic. - Map PAA details through Expand SERP Details (split
items) → Map SERP Detail using fields like={{ $json.expanded_element[0].description }}. - Map organic results through Map SERP Fields using
={{ $json.url }},={{ $json.domain }},={{ $json.title }}, and={{ $json.description }}.
people_also_ask. Adjust if you need a different label for organic results.Step 7: Configure Google Sheets Outputs (Master + Detailed Sheets)
The workflow appends each dataset to both a master sheet and its specialized sheet.
- For related keywords, ensure Map Related Metrics feeds Append Related Master then Append Related Sheet.
- For suggestions, ideas, autocomplete, and subtopics, confirm the chains: Map Suggested Fields → Append Suggestions Master → Append Suggested Sheet, Map Idea Fields → Append Ideas Master → Append Ideas Sheet, Map Autocomplete Fields → Append Autocomplete Master → Append Autocomplete Sheet, and Map Subtopic Fields → Append Subtopics Master → Append Subtopics Sheet.
- For SERP outputs, confirm Map SERP Fields → Append SERP Master and Map SERP Detail → Append SERP Details.
- Credential Required: Connect your googleSheetsOAuth2Api credentials to all Google Sheets append nodes (14+ nodes handle master sheets and output tabs).
Step 8: Test and Activate Your Workflow
Run the workflow end-to-end to confirm all sheets populate correctly before enabling it.
- Click Execute Workflow while Manual Launch Trigger is selected.
- Verify that a new spreadsheet is created with the title format
YYYY-MM-DD-seo proand moved to your Drive folder. - Check that each output tab (related keywords, keyword ideas, suggested keyword, sub topics, auto complete, SERP) contains rows appended by the corresponding Append nodes.
- When the test succeeds, toggle the workflow to Active for production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the Google connection in n8n’s Credentials first, then confirm the sheet is shared with the right account.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- DataForSEO authentication failures are usually basic auth formatting or an account restriction. Re-check username/password in the HTTP Request nodes and look at the DataForSEO response body for rate-limit or permission messages.
Frequently Asked Questions
About an hour if your Google and DataForSEO accounts are ready.
No. You will mostly connect accounts and paste API credentials. The “hard part” is just confirming your sheet tabs and columns match the workflow’s mappings.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in DataForSEO API usage costs (it depends on endpoints and volume).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but keep the logic intact. You can rename or remove tabs when you create the worksheet file, then update the “append to sheet” actions so they write to your new tab names. Common tweaks include adding a “Cluster” column in the master tab, saving only the top 20 related keywords per seed, and storing People Also Ask questions in a dedicated content-brief tab.
Usually it’s an expired Google OAuth session or the workflow is pointing at a sheet the connected account can’t access. Reconnect Google Sheets in n8n, then confirm the input sheet (“SEO PRO”) and the destination spreadsheet permissions are correct. If the sheet was created but rows aren’t writing, the tab names often don’t match what the append nodes expect.
Practically, dozens per run for most small teams, and you can scale further by running in batches and keeping an eye on DataForSEO rate limits.
Often, yes, because this workflow isn’t a simple two-step “send data from A to B.” You’re calling multiple endpoints, splitting big responses into rows, filtering SERP item types, and writing to multiple tabs. n8n handles that kind of branching cleanly, and self-hosting avoids per-task pricing when you scale up. Zapier or Make can still work if you keep the scope narrow (one endpoint, one sheet tab). If you want the full workbook approach without duct tape, n8n is the more comfortable fit. Talk to an automation expert if you want help choosing.
Once this is in place, keyword research stops being a recurring cleanup project. You press run, get a structured workbook, and spend your time on decisions that actually move rankings.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.