DataForSEO to Google Sheets, keyword packs ready
Your keyword research probably starts the same way every time. A spreadsheet, a few “seed” ideas, then 45 browser tabs, copy-paste chaos, and that slow dread when you realize you still need SERPs and People Also Ask questions.
This DataForSEO Sheets automation hits SEO specialists the hardest, honestly. But content leads trying to build briefs fast and small teams doing e-commerce category pages feel it too. The outcome is simple: drop keywords into Google Sheets and get clean, ready-to-plan keyword packs back in minutes, not an afternoon.
Below you’ll see what the workflow does, what it replaces, and how to run it without turning your process into a technical project.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: DataForSEO to Google Sheets, keyword packs ready
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Add Related KWs", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Related KW", pos: "b", h: 48 }
n3["<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/>Get Related KWs"]
n4["<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/>Get SERPs"]
n5@{ icon: "mdi:database", form: "rounded", label: "Add SERPs", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter SERPs", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out PAA", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Save Related KWs to All Resu..", pos: "b", h: 48 }
n9["<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/>Get KW Suggestions"]
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out KW Suggestions", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Add KW Suggestions", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Save KW Suggestions to All R..", 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/>Get Autocomplete Suggestions"]
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Autocomplete Sugge..", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Add Autocomplete Suggestions", pos: "b", h: 48 }
n16@{ icon: "mdi:database", form: "rounded", label: "Save Autocomplete Suggestion..", pos: "b", h: 48 }
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/>Get Content Ideas"]
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Content Ideas", pos: "b", h: 48 }
n19@{ icon: "mdi:database", form: "rounded", label: "Add Content Ideas", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Add Content Ideas to All Res..", pos: "b", h: 48 }
n21@{ icon: "mdi:database", form: "rounded", label: "Get Main Keywords", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter PAAs", pos: "b", h: 48 }
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out SERPs and PAAs", pos: "b", h: 48 }
n24@{ icon: "mdi:database", form: "rounded", label: "Add PAAs", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Add PAAs to All Results", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Sheet ID", pos: "b", h: 48 }
n24 --> n25
n4 --> n23
n22 --> n7
n6 --> n5
n26 --> n21
n7 --> n24
n1 --> n8
n3 --> n2
n19 --> n20
n17 --> n18
n21 --> n3
n21 --> n9
n21 --> n13
n21 --> n17
n21 --> n4
n11 --> n12
n9 --> n10
n2 --> n1
n18 --> n19
n10 --> n11
n23 --> n6
n23 --> n22
n15 --> n16
n13 --> n14
n0 --> n26
n14 --> n15
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 n6,n22 decision
class n1,n5,n8,n11,n12,n15,n16,n19,n20,n21,n24,n25 database
class n3,n4,n9,n13,n17 api
classDef customIcon fill:none,stroke:none
class n3,n4,n9,n13,n17 customIcon
The Challenge: Turning “Seed Keywords” Into Usable Plans
Seed keywords are easy. The hard part is everything that comes after: finding related terms, expanding into suggestions, grabbing autocomplete phrasing, checking what’s ranking right now, and pulling People Also Ask questions for intent. Doing that manually is not just slow, it’s mentally expensive. You bounce between tools, lose context, paste into the wrong row, and end up with a “research doc” that’s too messy to plan from. Then you repeat it next week because you can’t trust what you saved.
It adds up fast. Here’s where it breaks down in real teams.
- You spend about 1–2 hours per topic just collecting raw keyword inputs across sources.
- Context gets lost when keywords aren’t tied back to the original main keyword in the same place.
- SERP and PAA research tends to get skipped because it’s the most annoying part to copy and format.
- The sheet becomes a dumping ground, so writers and stakeholders stop using it.
The Fix: DataForSEO Research Logged Into Structured Sheet Tabs
This n8n workflow turns your Google Sheet into the control panel for keyword research. You add main keywords in a “Main Keyword” tab and mark the ones you want processed as Ready. When you run the workflow, it pulls those keywords, calls the DataForSEO API in parallel for multiple research types, then writes the results into dedicated tabs that stay consistent over time. Related keywords go to “Related KW.” Suggestions land in “KW Suggestion.” Autocomplete phrasing goes to “Autocomplete Suggestion.” Content ideas get their own tab. SERP results and PAA questions are separated cleanly, and everything important is also appended to an “All Results” master log so you can filter, pivot, and reuse the research later.
The workflow starts with Google Sheets reading only the rows you’ve approved. DataForSEO then returns related terms, suggestions, autocomplete, content topics, and live SERP plus PAA data for each main keyword. Finally, n8n writes each dataset into the right tab so your “keyword pack” is ready for briefs, clusters, and internal linking plans.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you’re planning 10 new articles this month. Manually, you might spend about 30 minutes gathering related keywords, another 30 minutes on suggestions and autocomplete, then about 30 minutes pulling SERPs and PAA questions. That’s roughly 1.5–2 hours per topic, or close to 20 hours total. With this workflow, you mark the 10 rows as Ready, run it once, and come back when the tabs are filled. Your “hands-on time” drops to about 10 minutes to prep the sheet and review results.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store inputs and outputs
- DataForSEO API for keyword, SERP, and PAA data
- DataForSEO credentials (get them from your DataForSEO dashboard)
Skill level: Beginner. You’ll connect accounts, paste a Sheet ID, and run the workflow.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
You trigger it when your sheet is ready. This workflow is designed for a manual run, so you control timing. Once you’ve added seed keywords and marked rows as Ready, you click Execute in n8n.
Google Sheets becomes the intake form. n8n reads the “Main Keyword” tab and pulls only the keywords that should be processed. That one decision (a simple status flag) keeps the workflow from burning API calls on half-finished ideas.
DataForSEO does the heavy lifting. For each main keyword, the workflow sends HTTP requests to collect related keywords, keyword suggestions, autocomplete phrases, content ideas, and current SERP plus PAA data. The SERP response is filtered to keep the most relevant organic results, and PAA questions are split out into their own stream.
Everything is written back into clean tabs. Each dataset is appended to its dedicated tab (Related KW, KW Suggestion, Autocomplete Suggestion, Content Idea, SERP, PAA). At the same time, the key outputs are also appended to “All Results” for master tracking and filtering.
You can easily modify which tabs get written to and what columns are mapped based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Run Trigger
Start the workflow manually to pull the next ready keyword set and fan out into parallel research tasks.
- Add and open Manual Run Trigger to confirm it is the starting node for this workflow.
- Connect Manual Run Trigger to Define Sheet Identifier so the sheet ID is set before any data pulls.
Step 2: Connect Google Sheets
All keyword inputs and outputs are stored in Google Sheets. This workflow uses multiple sheets for related keywords, suggestions, SERP data, PAA, autocomplete, and master logs.
- Open Define Sheet Identifier and set the id_sheet value to your spreadsheet ID (replace
[YOUR_ID]). - Open Retrieve Primary Keywords and set Sheet Name to
gid=0and confirm the filter is set to Status equalsReady. - Credential Required: Connect your googleSheetsOAuth2Api credentials to all Google Sheets nodes (12+ nodes handle related keywords, suggestions, autocomplete, SERP, PAA, subtopics, and master logs).
Flow Check: Define Sheet Identifier outputs to Retrieve Primary Keywords, which becomes the input for all downstream API requests.
Step 3: Configure DataforSEO API Requests
Five API calls run in parallel to gather related keywords, suggestions, autocomplete ideas, content topics, and SERP data.
- Open Fetch Related Keywords and verify URL is
https://api.dataforseo.com/v3/dataforseo_labs/google/related_keywords/live. - Open Fetch Keyword Suggestions and verify URL is
https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_suggestions/live. - Open Fetch Autocomplete Ideas and verify URL is
https://api.dataforseo.com/v3/serp/google/autocomplete/live/advanced. - Open Fetch Content Topics and verify URL is
https://api.dataforseo.com/v3/content_generation/generate_sub_topics/live. - Open Fetch SERP Results and replace the placeholder URL value
https://api.dataforseo.[CONFIGURE_YOUR_API_KEY]with your valid endpoint. - Credential Required: Connect your httpBasicAuth and httpHeaderAuth credentials to each DataforSEO HTTP node.
[CONFIGURE_YOUR_API_KEY] in Fetch SERP Results, the request will fail even if credentials are correct.Parallel Execution: Retrieve Primary Keywords outputs to Fetch Related Keywords, Fetch Keyword Suggestions, Fetch Autocomplete Ideas, Fetch Content Topics, and Fetch SERP Results in parallel.
Step 4: Split and Process API Results
Each API response is broken into individual items for logging. SERP results are split and then filtered into organic results and PAA entries.
- Verify Separate Related Items uses Field to Split Out as
tasks[0].result[0].items. - Verify Separate Suggestion Items uses Field to Split Out as
tasks[0].result[0].items. - Verify Separate Autocomplete Items uses Field to Split Out as
tasks[0].result[0].items. - Verify Separate Topic Items uses Field to Split Out as
tasks[0].result[0].sub_topics. - Verify Separate SERP and PAA uses Field to Split Out as
tasks[0].result[0].items. - In Filter Organic SERPs, ensure the condition checks
={{ $json.type }}equalsorganic. - In Filter PAA Records, ensure the condition checks
={{ $json.type }}equalspeople_also_ask.
Parallel Execution: Separate SERP and PAA outputs to both Filter Organic SERPs and Filter PAA Records in parallel.
Step 5: Configure Keyword & SERP Output Sheets
Each processed item is appended into a dedicated sheet and then logged into a master results sheet.
- In Append Related Keywords, confirm Operation is
appendand columns map with expressions like={{ $json.keyword_data.keyword }}and={{ $('Retrieve Primary Keywords').item.json['Main Keyword'] }}. - In Append Suggestion Keywords, confirm Operation is
appendand Type is set toSuggestion. - In Append Autocomplete Rows, confirm Type is
Autocompleteand Autocomplete uses={{ $json.suggestion }}. - In Append Content Topics, verify Subtopics uses
={{ $json['tasks[0].result[0].sub_topics'] }}and Type is=Subtopics. - In Append SERP Rows, verify fields use expressions like
={{ $json.url }},={{ $json.title }}, and={{ $json.domain }}. - In Append PAA Entries, verify FAQ uses
={{ $json.title }}and Type uses={{ $json.type }}.
Step 6: Configure Master Logs
Each output sheet is followed by a master logging step to consolidate all results into a single worksheet.
- Verify Log Related Keywords All appends to Result All and uses fields like
={{ $json.Keyword }}and={{ $json['KW Difficulty'] }}. - Verify Log Suggestions to Master appends to Result All with
={{ $json.Type }}and={{ $json.Keyword }}. - Verify Log Autocomplete to Master appends to Result All and maps
={{ $json.Autocomplete }}into Keyword. - Verify Log Topics to Master appends to Result All and uses
={{ $json.Subtopics }}for Keyword. - Verify Log PAA to Master appends to Result All with
={{ $json.FAQ }}as Keyword.
Flow Check: Each append node feeds directly into its corresponding log node (e.g., Append Autocomplete Rows → Log Autocomplete to Master).
Step 7: Test and Activate Your Workflow
Run a manual test to ensure the workflow pulls ready keywords and writes to all expected sheets.
- Click Execute Workflow from the editor to run Manual Run Trigger.
- Confirm that Retrieve Primary Keywords returns a row where Status is
Ready. - Check that each output sheet (e.g., KW Related, KW Suggest, Autocomplete, Subtopics, SERP, FAQ, and Result All) receives new rows.
- When successful, toggle the workflow to Active for production use.
Watch Out For
- Google Sheets credentials can expire or need specific permissions. If things break, check your n8n credential connection and the spreadsheet sharing settings first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About 30 minutes if you already have your DataForSEO and Google Sheets access ready.
Yes. No coding is required, but you do need to paste in a Sheet ID and add DataForSEO credentials in n8n.
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 based on how many keywords you process.
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.
You can. Most customization is just swapping what gets written to each tab and adjusting what you fetch from DataForSEO. For example, you can change the “Fetch SERP Results” request to target a different location or language, then update the “Append SERP Rows” mapping to match the columns you care about. Common tweaks include limiting the number of SERP rows saved, adding extra tabs for new research types, or changing the Ready status rules so batches run the way your team works.
Usually it’s permissions. Confirm the Google account in your n8n credential can access that spreadsheet, and double-check the Sheet ID you pasted into the “Define Sheet Identifier” node. If it worked before and suddenly stopped, refresh the Google Sheets credential in n8n and try again.
If you self-host, there’s no fixed execution cap; capacity depends on your server and the DataForSEO rate limits for your account.
Often, yes, because this workflow needs parallel HTTP requests, filtering, and multi-tab writes that get awkward (and pricey) in simpler tools. n8n handles branching logic without charging per path, which matters when you’re splitting SERP vs. PAA and logging to multiple tabs. It also gives you a self-host option, so you’re not constantly watching task counts when you scale up research. Zapier or Make can still be fine for very small “one keyword, one output” automations, but you’ll likely hit limits once you want a full pack. Talk to an automation expert if you want help choosing.
Once this is running, your sheet stops being a dumping ground and starts acting like a repeatable research system. Set it up once, then spend your time picking winners and writing better pages.
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.