DataForSEO + Airtable: keyword research, organized
Keyword research falls apart the moment you try to keep it organized. Ideas live in one sheet, SERP notes in another, “People Also Ask” questions in a doc, and the links between them are… mostly in your head.
This is where content marketers start losing hours, and honestly, agency owners feel it too when they’re juggling multiple clients. Even a solo founder trying to publish consistently runs into the same mess. With this DataForSEO Airtable automation, you keep every seed keyword connected to the research that actually proves it’s worth writing.
You’ll see how the workflow pulls keyword ideas, SERPs, and questions from DataForSEO, then writes everything into a relational Airtable base so you can filter, search, and plan faster.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: DataForSEO + Airtable: keyword research, organized
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<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/>Related API Request"]
n1["<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/airtable.svg' width='40' height='40' /></div><br/>Get Primary Keyword"]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Result Items", 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/>KW Suggestions API Request"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Suggested KWs", pos: "b", h: 48 }
n5["<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/>KW Ideas API Request"]
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Autocomplete", pos: "b", h: 48 }
n7["<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/>Serp API Request1"]
n8["<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/>Autocomplete API Request"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out SERP", pos: "b", h: 48 }
n10["<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/airtable.svg' width='40' height='40' /></div><br/>Create SERPS"]
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out People Also Ask", pos: "b", h: 48 }
n12["<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 API Request"]
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Subtopics", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Fields for API Request", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set KW Suggestion Fields", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set KW Related Fields", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out KW Ideas", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Keyword Ideas Fields", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Autocomplete Fields", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set SERP Fields", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set PAA Fileds", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Generate Subtopics Fields", pos: "b", h: 48 }
n23["<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/airtable.svg' width='40' height='40' /></div><br/>Airtable"]
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Airtable Fields", pos: "b", h: 48 }
n25["<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/airtable.svg' width='40' height='40' /></div><br/>Add Related KWs to Master Ta.."]
n26["<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/airtable.svg' width='40' height='40' /></div><br/>Add KW Suggestions to Master.."]
n27["<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/airtable.svg' width='40' height='40' /></div><br/>Add KW Ideas to Master table"]
n28["<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/airtable.svg' width='40' height='40' /></div><br/>Add Autocomplete to Master t.."]
n29@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter SERPs", pos: "b", h: 48 }
n30@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter PAA", pos: "b", h: 48 }
n31["<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/airtable.svg' width='40' height='40' /></div><br/>Add PAA to Master Table"]
n32["<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/airtable.svg' width='40' height='40' /></div><br/>Add PAA to Master Table1"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n33 --> n24
n30 --> n11
n29 --> n20
n21 --> n31
n9 --> n29
n9 --> n30
n20 --> n10
n7 --> n9
n17 --> n18
n1 --> n14
n0 --> n2
n24 --> n1
n13 --> n22
n5 --> n17
n16 --> n25
n6 --> n19
n2 --> n16
n19 --> n28
n4 --> n15
n8 --> n6
n15 --> n26
n18 --> n27
n11 --> n21
n3 --> n4
n14 --> n0
n14 --> n3
n14 --> n5
n14 --> n8
n14 --> n7
n14 --> n12
n14 --> n23
n22 --> n32
n12 --> n13
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 n29,n30 decision
class n1,n10,n23,n25,n26,n27,n28,n31,n32 database
class n0,n3,n5,n7,n8,n12,n33 api
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n5,n7,n8,n10,n12,n23,n25,n26,n27,n28,n31,n32,n33 customIcon
The Problem: Keyword Research Becomes Unusable Fast
You start with good intentions: a list of seed keywords and a plan to validate them. Then reality hits. One keyword turns into 40 suggestions, 20 related terms, 10 “autocomplete” variations, a SERP you should screenshot, and a handful of People Also Ask questions that would make great H2s. If you’re doing it manually, you either stop halfway or you spend your best creative energy copying and cleaning data. Worse, you lose the relationships between the data, so later you can’t answer basic questions like “Which seed generated this cluster?” or “Did we already cover this angle for another client?”
It adds up fast. Here’s where it usually breaks down.
- You end up re-checking the same SERPs every few weeks because your notes aren’t tied to the original keyword.
- Copy-pasting keyword lists into spreadsheets introduces messy duplicates, inconsistent formatting, and the occasional “why is this in here?” row.
- People Also Ask questions get collected, but they never make it into outlines because they’re not linked to the pages you planned.
- Scaling to 50 or 200 seeds becomes a weekend project, so you delay content decisions that should take an hour.
The Solution: DataForSEO Research, Written Into Airtable Automatically
This workflow turns keyword research into a repeatable system. It starts when an incoming webhook triggers n8n, which means you can run it from a button, a form, a scheduled job, or even another workflow. n8n pulls the “primary keyword” (your seed) from Airtable, prepares the API parameters once, then calls several DataForSEO endpoints to gather different angles of research. As results come back, the workflow expands the lists into individual items, maps the fields into a clean structure, filters out irrelevant SERP data, and creates organized records back in Airtable. At the end, your seed keyword gets its status updated so you can see what’s been processed and what’s still waiting.
The workflow kicks off via webhook, looks up the seed keyword in Airtable, then fans out into multiple DataForSEO API calls (related keywords, suggestions, autocomplete, ideas, subtopics, plus SERP and PAA). Finally, it writes each dataset into the right Airtable tables so everything stays linked back to the original seed.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you research 20 seed keywords for a new blog category. Manually, you might spend about 10 minutes per seed pulling suggestions and related terms, plus another 10 minutes reviewing SERPs and copying People Also Ask questions, which is roughly 6–7 hours total. With this workflow, you send the seeds to Airtable and trigger the run; n8n handles the DataForSEO calls and writes everything back while you do other work. Even if you budget 20 minutes of “check the output and pick winners,” you’ve traded a full day of busywork for a short review session.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- DataForSEO for keyword + SERP API data
- Airtable to store linked keyword research
- DataForSEO API credentials (get them from your DataForSEO dashboard)
Skill level: Intermediate. You’ll connect accounts, paste API credentials, and confirm Airtable tables/fields match the template.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A webhook starts the run. You trigger the workflow from wherever you like, then n8n immediately grabs the identifiers it needs to look up the correct seed keyword in Airtable.
The seed keyword is fetched and packaged for API calls. The workflow pulls your primary keyword record, then prepares consistent parameters so every DataForSEO request uses the same settings (location, language, and other targeting inputs).
DataForSEO is queried for multiple research angles. n8n calls endpoints for related keywords, suggestions, autocomplete, ideas, subtopics, and SERP data. Results are expanded into individual items, filtered where needed (like separating organic results and PAA), and mapped into a clean structure that Airtable can accept.
Airtable becomes the “source of truth.” Records are created in the right tables, linked back to the seed keyword, and the seed’s status is updated so you can track what’s done, what’s queued, and what needs another pass.
You can easily modify which endpoints you pull (for example, skip SERPs for quick ideation) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound request that starts the workflow and passes the Airtable record ID.
- Add and configure Incoming Webhook Trigger with HTTP Method set to
POSTand Path set to20d50a4c-b0cf-4f32-82ba-09ca88f3a699. - Ensure the incoming payload includes
query.recordIDso Map Airtable Identifiers can map the Airtable record reference. - Connect Incoming Webhook Trigger to Map Airtable Identifiers to begin the data enrichment chain.
query.recordID is missing, Fetch Primary Keyword and all Airtable updates will fail because no record can be resolved.Step 2: Connect Airtable and Map Identifiers
Define the Airtable base and record IDs, then fetch the primary keyword record used across all downstream branches.
- In Map Airtable Identifiers, set airtable_base_id to
apprrQ0Dv1cJOfMi9and airtable_record_id to{{ $json.query.recordID }}. - Open Fetch Primary Keyword and keep ID set to
=recYwGySY79Qrp0ZJ(or replace with your record ID logic). - Credential Required: Connect your airtableTokenApi credentials to Fetch Primary Keyword.
- Confirm the base uses
{{ $json.airtable_base_id }}so all Airtable nodes share a dynamic base reference.
Step 3: Set Up API Parameter Preparation
Standardize keyword, language, and limits so each API branch receives identical parameters.
- Configure Prepare API Parameters to assign fields from the fetched record: Primary Keyword to
{{ $json['Primary Keyword'] }}, Location to{{ $json.Location }}, Language to{{ $json.Language }}, Limit to{{ $json.Limit }}, and Depth to{{ $json.Depth }}. - Connect Fetch Primary Keyword to Prepare API Parameters so all downstream API requests are aligned.
Step 4: Configure Parallel DataForSEO API Requests
Trigger multiple keyword data endpoints in parallel for related keywords, suggestions, ideas, autocomplete, SERP, and subtopics.
- Prepare API Parameters outputs to Related Keyword API Call, Suggestion API Request, Idea API Request, Autocomplete API Call, SERP API Call, Subtopic API Request, and Update Primary Keyword Status in parallel.
- For Related Keyword API Call, set URL to
https://api.dataforseo.com/v3/dataforseo_labs/google/related_keywords/liveand keep the JSON body expression as defined. - For Suggestion API Request, set URL to
https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_suggestions/livewith the provided JSON body expression. - For Idea API Request, set URL to
https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_ideas/livewith the provided JSON body expression. - For Autocomplete API Call, set URL to
https://api.dataforseo.com/v3/serp/google/autocomplete/live/advancedand keep client set togws-wiz-serp. - For SERP API Call, replace URL with your valid DataForSEO endpoint (current value is
https://api.dataforseo.[CONFIGURE_YOUR_API_KEY]). - For Subtopic API Request, set URL to
https://api.dataforseo.com/v3/content_generation/generate_sub_topics/liveand keep topic mapped to{{ $json['Primary Keyword'] }}. - Credential Required: Connect your httpBasicAuth or httpHeaderAuth credentials to all DataForSEO request nodes (6 HTTP Request nodes).
Step 5: Expand, Filter, and Map API Results
Split API arrays into individual items and map the fields needed for Airtable outputs.
- Connect Related Keyword API Call → Expand Related Items (split out
tasks[0].result[0].items) → Map Related Keyword Fields. - Connect Suggestion API Request → Expand Suggestion Items → Map Suggestion Fields.
- Connect Idea API Request → Expand Idea Items → Map Idea Fields.
- Connect Autocomplete API Call → Expand Autocomplete Items → Map Autocomplete Fields, with primary keyword mapped to
{{ $('Prepare API Parameters').item.json['Primary Keyword'] }}. - Expand SERP Items outputs to both Filter Organic Results and Filter PAA Results in parallel.
- Set Filter Organic Results to match leftValue
{{ $json.type }}equalsorganic, and Filter PAA Results to equalspeople_also_ask. - Route Filter Organic Results → Map SERP Fields, and Filter PAA Results → Expand PAA Items → Map PAA Fields.
- For Subtopic API Request, connect to Expand Subtopic Items (split out
tasks[0].result[0].sub_topics) → Map Subtopic Fields.
Step 6: Configure Airtable Output Nodes
Create keyword records and update the primary keyword status once data collection completes.
- Connect Map Related Keyword Fields → Create Related Keywords to write to the
Master All KW Variationstable with mapped fields like{{ $json['related keyword'] }}and{{ $now.format('MM-dd-yyyy') }}. - Connect Map Suggestion Fields → Create Suggested Keywords with Type values like
KW Suggestion. - Connect Map Idea Fields → Create Idea Keywords with Type values like
KW Idea. - Connect Map Autocomplete Fields → Create Autocomplete Keywords to store autocomplete suggestions.
- Connect Map SERP Fields → Create SERP Records with fields like
{{ $json.title }},{{ $json.domain }}, and{{ $json.url }}. - Connect Map PAA Fields → Create PAA Keywords and keep Type mapped to
{{ $json['type '] }}. - Connect Map Subtopic Fields → Create Subtopic Keywords with Type set to
Subtopic. - Set Update Primary Keyword Status to update the Airtable record using
{{ $('Map Airtable Identifiers').item.json.airtable_record_id }}and set Trigger toKW Research Complete. - Credential Required: Connect your airtableTokenApi credentials to all Airtable output nodes (9 nodes handle creates and updates).
Step 7: Test and Activate Your Workflow
Verify the webhook payload, DataForSEO responses, and Airtable inserts before activating the workflow.
- Click Execute Workflow and send a POST request to Incoming Webhook Trigger with
query.recordIDreferencing a valid Airtable record. - Confirm that Prepare API Parameters receives values for Primary Keyword, Location, Language, Limit, and Depth.
- Verify each API branch returns items and that mapped fields appear in Create Related Keywords, Create Suggested Keywords, Create Idea Keywords, Create Autocomplete Keywords, Create SERP Records, Create PAA Keywords, and Create Subtopic Keywords.
- Check Airtable to ensure new records are created with the expected Primary Keyword and date fields, and that Update Primary Keyword Status sets Trigger to
KW Research Complete. - When tests are successful, toggle the workflow to Active for production use.
Common Gotchas
- DataForSEO credentials can expire or have IP/security restrictions. If calls start failing, check your DataForSEO dashboard and the API access 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.
- Airtable record creation fails silently when fields don’t match the base. If new rows aren’t appearing, compare your Airtable table/field names to what the workflow’s mapping steps expect.
Frequently Asked Questions
About an hour if your Airtable base is ready.
No. You will connect accounts, add API credentials, and match a few Airtable fields.
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 costs (pay-as-you-go, usually a few dollars per batch depending on endpoints).
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, and it’s one of the best reasons to use it. Update the workflow’s “Prepare API Parameters” mapping so each DataForSEO request uses the right location and language values. You can also customize which datasets you store by toggling which API calls run (for example, run suggestions and related keywords daily, then pull SERPs weekly). If your Airtable base has separate tables per market, adjust the “Map Airtable Identifiers” and record creation nodes so each run writes to the correct destination.
Usually it’s an invalid or restricted API credential. Regenerate your DataForSEO API login/key (or confirm your allowed IP/security settings), then update the credentials used by the HTTP Request nodes in n8n. If it only fails on bigger runs, you may also be hitting rate limits or sending parameters that the endpoint rejects, so check the HTTP response body in the node execution for the exact error message.
A lot, but it depends on your Airtable limits and how many records you generate per seed.
Often, yes. This workflow fans out into multiple API calls, expands large lists, filters SERP/PAA data, and writes linked records back to Airtable, which is the kind of multi-step logic that gets expensive or awkward in simpler tools. n8n also gives you a self-host option, so high-volume research doesn’t automatically mean a higher bill. Zapier or Make can still be fine for a basic “one request, one table” setup. If you want the relational structure and multiple datasets per seed, n8n is usually the smoother fit. Talk to an automation expert if you’re unsure.
Once this is running, keyword research stops being a one-off chore and turns into an asset you can reuse. The workflow handles the collecting and organizing, so you can focus on picking winners and publishing.
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.