DataForSEO to Airtable, SEO insights always ready
Your SEO data is probably scattered. A CSV export here, a rank tracker screenshot there, and a “quick” competitor pull that turns into an afternoon of cleanup.
SEO managers feel it first. But marketing ops folks and agency owners end up babysitting the same mess. This DataForSEO Airtable automation keeps rankings, competitor keywords, and related ideas in one place, ready to filter without another export.
You’ll learn what the workflow builds, what results to expect, and how to run it in a way that stays reliable as your keyword list grows.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: DataForSEO to Airtable, SEO insights always ready
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out1", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out2", 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/airtable.svg' width='40' height='40' /></div><br/>Search Keywords"]
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/airtable.svg' width='40' height='40' /></div><br/>Search Competitors"]
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/airtable.svg' width='40' height='40' /></div><br/>Search Keywords1"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Post Search Rankings"]
n11["<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 Search Rankings"]
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/>Post Competitor Keywords"]
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 Competitor 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/>Get Similar Keywords"]
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/airtable.svg' width='40' height='40' /></div><br/>Create Competitor Keywords R.."]
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/airtable.svg' width='40' height='40' /></div><br/>Create Search Rankings Records"]
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/airtable.svg' width='40' height='40' /></div><br/>Create Similar Keywords Reco.."]
n1 --> n11
n4 --> n13
n5 --> n14
n2 --> n16
n3 --> n15
n6 --> n17
n7 --> n10
n9 --> n5
n8 --> n12
n11 --> n2
n14 --> n6
n10 --> n1
n13 --> n3
n12 --> n4
n0 --> n7
n0 --> n8
n0 --> n9
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 n7,n8,n9,n15,n16,n17 database
class n10,n11,n12,n13,n14 api
classDef customIcon fill:none,stroke:none
class n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17 customIcon
Why This Matters: SEO Data Always Turns Into Busywork
Rank tracking and keyword research should be the easy part of SEO. Instead, the “work” becomes moving data around: pulling SERPs, saving files, pasting into sheets, reformatting columns, then trying to remember which run was the latest. Competitor research is worse because it’s bursty. You do it once, it looks helpful, and then it goes stale because nobody wants to repeat the manual process. And when data lives in exports, you can’t quickly compare weeks, spot domain changes, or filter by intent without rebuilding the whole report.
It adds up fast. Here’s where it usually breaks down.
- You spend about 2 hours a week exporting SERPs, cleaning columns, and re-uploading “final” versions.
- Competitor keyword pulls sit in someone’s downloads folder, which means strategy decisions get made on old info.
- Manual copy-paste creates silent errors (wrong keyword mapped to wrong result), and those mistakes are hard to catch later.
- No structured history means you notice rank drops late, after traffic already takes the hit.
What You’ll Build: A DataForSEO → Airtable SEO Data Engine
This workflow turns Airtable into the place where SEO inputs and outputs meet. You keep a simple list of seed keywords in Airtable, run the automation, and n8n submits DataForSEO tasks to pull Google organic SERP results (up to depth 10). After a short wait, it retrieves the finished results, parses them, and writes clean rows into an Airtable “SERP rankings” table with the fields you actually use (rank, URL, title, domain, and more). Then it does the same kind of pull for competitors: it reads your competitor domain list from Airtable, requests the keywords those sites rank for, and stores structured keyword metrics. Finally, it groups your seed keywords and requests related keyword ideas so you can expand into long-tail terms without starting from scratch.
The workflow starts from a manual run (so you stay in control). DataForSEO handles the heavy lifting in the middle while n8n waits and polls for completion. Airtable becomes your always-ready “database” for rankings, competitor moves, and keyword expansion, which you can filter or chart anytime.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you track 50 seed keywords and watch 10 competitor domains. Manually, even a “fast” process is roughly 2 minutes per keyword to pull, paste, label, and sanity-check, plus another hour for competitor exports and cleanup, so you’re around 3 hours each run. With this workflow you kick it off in about 5 minutes, wait about a minute for DataForSEO processing, and review the new Airtable rows when it’s done. The time goes from “work” to “verification.”
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for seed keywords, competitors, and results tables
- DataForSEO API to fetch SERPs and keyword datasets
- DataForSEO credentials (get them from your DataForSEO dashboard)
Skill level: Intermediate. You’ll connect accounts, confirm table/field names, and do a quick test run with a small keyword set.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
You start the run on demand. The workflow uses a manual trigger, so you can run it when you add new keywords, onboard a client, or want a fresh snapshot before a report goes out.
Airtable provides the inputs. n8n looks up your seed keywords from a “SERP Keywords” table and your competitor domains from a “Competitor Research” table, so your lists live where your team can update them without touching automation settings.
DataForSEO does the data collection. n8n submits a SERP task for each keyword, waits about a minute, then retrieves the completed SERP results. It repeats the pattern for competitor-site keywords, and it also requests related keywords by grouping your seed list first.
Airtable becomes the output system. The workflow unpacks each response into row-level records and creates entries in three main result tables: SERP rankings, competitor keyword research, and similar keywords. From there, you can filter by keyword, domain, rank, search volume, or whatever matters for your reporting.
You can easily modify the trigger to run weekly instead of manual based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts manually and fans out into three parallel branches for keyword ranking, rival keyword discovery, and related keyword expansion.
- Add the Manual Start Trigger node as the workflow entry point.
- Confirm the node has no parameters and will be used for manual testing and ad-hoc runs.
- Verify parallel flow: Manual Start Trigger outputs to Find Keyword Records, Find Rival Domains, and Find Keyword Records B in parallel.
Step 2: Connect Airtable Sources
Set up your Airtable lookups for keyword records and competitor domains. These are the primary data sources that feed the rest of the workflow.
- Configure Find Keyword Records with Operation set to
searchand Filter By Formula set to{Keyword} != "BLANK". - Configure Find Rival Domains with Operation set to
searchand Filter By Formula set to={Research} = "Yes". - Configure Find Keyword Records B with Operation set to
searchand Filter By Formula set to{Keyword} != "BLANK". - Credential Required: Connect your airtableTokenApi credentials to Find Keyword Records, Find Rival Domains, and Find Keyword Records B.
Step 3: Configure Ranking Task Submission and Retrieval
This branch submits ranking tasks to DataForSEO, waits for processing, then retrieves and unpacks the results.
- In Submit Ranking Task, set URL to
https://api.dataforseo.com/v3/serp/google/organic/task_postand Method toPOST. - Set JSON Body to
=[ { "language_code": "en", "location_code": 2840, "keyword": {{ $json.Keyword }}, "depth": 10 } ]. - In Pause Timer, set Unit to
minutesand Amount to1. - In Retrieve Ranking Task, set URL to
=https://api.dataforseo.com/v3/serp/google/organic/task_get/regular/{{ $('Submit Ranking Task').item.json.tasks[0].id }}. - In Unpack Items, set Field To Split Out to
tasks[0].result[0].items. - Credential Required: Connect your httpBasicAuth credentials to Submit Ranking Task and Retrieve Ranking Task.
Step 4: Configure Rival Keyword Task Submission and Retrieval
This branch submits competitor domain tasks to DataForSEO and processes the keyword results.
- In Submit Rival Keywords, set URL to
https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_site/task_postand Method toPOST. - Set JSON Body to
=[ { "location_code": 2840, "target": "{{ $json.Name }}" } ]. - In Pause Timer A, set Unit to
minutesand Amount to1. - In Retrieve Rival Keywords, set URL to
=https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_site/task_get/{{ $('Submit Rival Keywords').item.json.tasks[0].id }}. - In Unpack Results A, set Field To Split Out to
tasks[0].result. - Credential Required: Connect your httpBasicAuth credentials to Submit Rival Keywords and Retrieve Rival Keywords.
Step 5: Set Up Related Keyword Aggregation and Fetching
This branch aggregates keyword inputs and fetches related keyword suggestions before unpacking results.
- In Group Keywords, set Fields To Aggregate to aggregate the
Keywordfield. - In Fetch Related Keywords, set URL to
https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_keywords/liveand Method toPOST. - Set JSON Body to
=[ { "keywords": {{ $json.Keyword }}, "language_code": "en", "location_code": 2840 } ]. - In Unpack Results B, set Field To Split Out to
tasks[0].result. - Credential Required: Connect your httpBasicAuth and httpHeaderAuth credentials to Fetch Related Keywords.
Step 6: Configure Airtable Output Tables
Write ranking results, competitor keyword results, and related keywords into their respective Airtable tables.
- In Create Ranking Rows, map fields like url, title, and rank_group, and set SERP Keywords to
["{{ $('Find Keyword Records').item.json.id }}"]. - In Create Rival Keyword Rows, map CPC, keyword, monthly search volumes, and set Company Name to
["{{ $('Find Rival Domains').item.json.id }}"]. - In Create Related Rows, map CPC, keyword, competition, and monthly search volume fields using the provided expressions.
- Credential Required: Connect your airtableTokenApi credentials to Create Ranking Rows, Create Rival Keyword Rows, and Create Related Rows.
Step 7: Test and Activate Your Workflow
Run a manual test to validate all branches and confirm records land in Airtable as expected.
- Click Execute Workflow to trigger Manual Start Trigger and observe the three parallel branches.
- Verify that Submit Ranking Task and Submit Rival Keywords return task IDs, then confirm Retrieve Ranking Task and Retrieve Rival Keywords return results after the waits.
- Confirm Create Ranking Rows, Create Rival Keyword Rows, and Create Related Rows create new Airtable records.
- When successful, toggle the workflow to Active for production use.
Troubleshooting Tips
- Airtable credentials can expire or need specific permissions. If things break, check the Airtable personal access token scopes and the base access 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.
- DataForSEO API auth and limits can cause intermittent failures. Check the DataForSEO API response payload for task errors, and slow down if you’re running big keyword batches.
Quick Answers
About 45 minutes if your Airtable tables are already created.
No. You will connect Airtable and set a few HTTP request credentials. The rest is mapping fields and testing with a small run.
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, which depend on how many keywords and SERP depths you pull.
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 you probably should. You can swap the manual trigger for a schedule, change the “Pause Timer” waits to a longer polling loop, and adjust the Airtable “Create Ranking Rows / Create Rival Keyword Rows / Create Related Rows” mappings to match your fields. Common customizations include tracking only top 3 results, adding deduplication (search-or-update instead of always create), and sending an alert when a priority keyword drops.
Usually it’s an expired token or missing base permissions. Regenerate the Airtable personal access token, confirm it has read/write scopes, then reselect the correct base and table in the Airtable nodes. Also check that your field names still match, because renaming a column in Airtable can break mappings in n8n.
It depends mostly on your DataForSEO quota and Airtable limits. In practice, many teams run a few hundred keywords per day comfortably if they batch requests and give the Wait nodes enough time. If you self-host n8n there’s no execution cap from n8n itself, but you’ll still want throttling so Airtable and DataForSEO don’t rate limit you.
Often, yes, because this workflow needs waiting, polling, unpacking nested results, and writing lots of rows, which gets expensive and awkward in simpler tools. n8n is comfortable with multi-step logic and you can self-host for high volume. Zapier and Make are still great for straightforward two-step zaps, like “new lead → send email.” If you’re mainly doing SERP snapshots plus competitor research at scale, n8n tends to be the calmer choice, honestly. Talk to an automation expert if you want a second opinion based on your volume and reporting needs.
This setup turns SEO data collection into a background task instead of a recurring project. You get clean Airtable tables, ready for decisions whenever you need them.
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.