DataForSEO + Google Sheets: backlink status updates
Your backlink report was “done,” then a client forwards a screenshot: the link is gone. Now you’re re-checking URLs one-by-one, trying to remember which ones were dofollow, and wondering how many other links quietly died last week.
This is the kind of mess that hits SEO managers first, but agency owners and in-house marketing leads feel it too. With backlink status automation, you stop playing detective and start getting reliable statuses inside the spreadsheet you already use.
This workflow pulls backlink rows from Google Sheets, asks DataForSEO to verify each one, and writes back “Live,” “Lost,” or a nofollow-related status so your reporting stays accurate without daily manual checks.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: DataForSEO + Google Sheets: backlink status updates
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Reads Google Sheets", 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/code.svg' width='40' height='40' /></div><br/>Cleans backlink url"]
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/>Sends HTTP POST Request to D.."]
n5@{ icon: "mdi:cog", form: "rounded", label: "Waits 20 seconds", pos: "b", h: 48 }
n6["<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/>Sends HTTP links request to .."]
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/code.svg' width='40' height='40' /></div><br/>Checks which backlinks exist.."]
n8@{ icon: "mdi:database", form: "rounded", label: "Sends data to Google sheets", pos: "b", h: 48 }
n0 --> n4
n5 --> n6
n3 --> n0
n2 --> n3
n8 --> n0
n1 --> n2
n4 --> n5
n6 --> n7
n7 --> n8
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 n1 trigger
class n2,n8 database
class n4,n6 api
class n3,n7 code
classDef customIcon fill:none,stroke:none
class n3,n4,n6,n7 customIcon
The Problem: Backlink Status Checks Don’t Scale
Backlink tracking starts simple. A few links in a sheet, a quick spot-check, and you move on. Then you’re managing 50, 200, or 1,000 backlinks across multiple campaigns, and the “quick spot-check” turns into a recurring chore you keep postponing. When you do check, it’s slow: load the linking page, search for the anchor, confirm it still points to the right landing page, then note if it’s dofollow or nofollow. Multiply that across a client roster and you get the worst kind of work: repetitive, error-prone, and impossible to finish confidently.
It adds up fast. Here’s where it usually breaks down.
- Checking even 100 backlinks manually can take about 2–3 hours if you’re thorough.
- Status fields drift out of date, which means your “current” report is often a historical snapshot.
- Dofollow vs. nofollow gets missed or guessed, and those mistakes lead to bad strategy calls.
- Lost links don’t get caught early, so you miss the window to ask for a fix or replacement.
The Solution: Automatically Update Backlink Statuses in Sheets
This n8n workflow turns your Google Sheet into a living backlink monitor. You keep your backlink list in a simple table (Backlink URL, Landing page, plus a Status column). When you run the workflow, it reads each row, normalizes the URL (so odd formatting doesn’t break the check), and submits a crawl request to the DataForSEO On-Page API for that backlink page. After a short wait to let the crawl finish, it fetches the results and evaluates what happened: is the backlink still present, and is it dofollow or nofollow? Finally, it writes a clean status back into the same row, so the sheet stays current without you opening a single browser tab.
The workflow starts with a manual run in n8n, which is perfect for weekly reporting or pre-client-call refreshes. From there it loops through your sheet in batches, asks DataForSEO to validate each backlink page, then updates Google Sheets with the final status you can filter and report on.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you maintain 200 backlinks in a sheet for one client. Manually checking them at maybe 2 minutes each is roughly 6–7 hours, and that’s if everything loads quickly and you don’t get interrupted. With this workflow, you kick off a run, let DataForSEO crawl in the background (including the built-in 20-second wait per item), and you come back to a filled Status column. In practice, your “hands-on” time becomes a few minutes, not an afternoon.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store backlinks and statuses.
- DataForSEO to crawl pages and detect link attributes.
- DataForSEO API credentials (get them from your DataForSEO dashboard).
Skill level: Intermediate. You’ll paste credentials, map a few fields, and keep your sheet columns consistent.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Manual run from n8n. You trigger the workflow when you want a refresh (before reporting, after a campaign push, or on a set schedule if you later swap the trigger).
Sheet rows are pulled in and cleaned up. n8n reads your Google Sheet records, then normalizes each backlink URL so domains and paths are in a consistent format for checking.
DataForSEO crawls each backlink page. The workflow submits a crawl task via HTTP request, waits about 20 seconds, then fetches the link results and evaluates whether the backlink exists and what type it is.
Status is written back to the sheet. The same Google Sheet row gets updated with a clear label like Live, Lost, or a nofollow-related status, which makes filtering and client-ready reporting painless.
You can easily modify the status labels to match your reporting language, or expand the output to include extra fields from DataForSEO 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 so you can validate backlink status checks on demand.
- Add the Manual Run Trigger node as the trigger for the workflow.
- Keep the node settings default (no parameters required).
Step 2: Connect Google Sheets
Pull the list of backlinks to check from Google Sheets, then later update the status in the same sheet.
- Open Retrieve Sheet Records and connect your sheet.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Document to the sheet ID
[YOUR_ID]and Sheet Name toLost links. - Under Range, set Specify Range (A1) to
D1:Eso only the backlink-related columns are read. - Open Update Sheet Status and connect the same sheet and sheet name.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Operation to
appendOrUpdateand map Status to{{ $json.status }}and Backlink URL to{{ $('Iterate Backlink List').item.json.url }}.
Step 3: Set Up Processing and Batching
Normalize the backlink URLs and iterate through them one at a time to submit crawl tasks.
- In Normalize Backlink URL, keep the provided JavaScript to extract
domainandurlfromBacklink URL. - Connect Retrieve Sheet Records → Normalize Backlink URL → Iterate Backlink List to process each backlink individually.
- Leave Iterate Backlink List with default options so it runs a simple loop.
Step 4: Configure Crawl, Results, and Status Evaluation
Submit a crawl task, wait for completion, fetch results, evaluate backlink status, and write the status back to the sheet.
- Configure Submit Crawl Task with URL
https://api.dataforseo.com/v3/on_page/task_postand MethodPOST. - Set JSON Body to
=[{"target":"{{ $json.domain }}","start_url":"{{ $json.url }}","max_crawl_pages":1}]. - Credential Required: Connect your httpBasicAuth credentials.
- Set Pause 20 Seconds to wait for
20seconds after submitting the crawl task. - Configure Fetch Link Results with URL
https://api.dataforseo.com/v3/on_page/linksand JSON Body=[{"id":"{{ $json.tasks[0].id }}"}]. - Credential Required: Connect your httpBasicAuth credentials.
- In Evaluate Backlink Status, keep Mode as
runOnceForEachItemand the provided JavaScript to set status toLive,Lost, orLost (Nofollow). - Ensure the path is connected: Submit Crawl Task → Pause 20 Seconds → Fetch Link Results → Evaluate Backlink Status → Update Sheet Status.
Step 5: Test and Activate Your Workflow
Validate the full path end-to-end before turning on production usage.
- Click Execute Workflow to run the Manual Run Trigger and process a batch.
- Confirm that Update Sheet Status writes a status to the
Lost linkssheet for each Backlink URL. - If the results are empty, check that Retrieve Sheet Records is pulling the correct
D1:Erange and that Landing page values match the crawl output. - Once verified, toggle the workflow to Active for production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the connected account and permissions inside n8n’s Credentials page 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 access can fail due to auth, balance limits, or endpoint permissions. If you see HTTP errors, check your DataForSEO dashboard for API status and usage, then confirm the API login/password in n8n.
Frequently Asked Questions
About 30–60 minutes if your sheet is already formatted correctly.
No. You’ll mainly connect accounts and map the right columns in Google Sheets. There is optional code in the workflow, but you can run it as-is.
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 based on how many URLs you check.
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 a common tweak. You can replace the Manual Run Trigger with an n8n Schedule trigger, then keep the rest of the workflow the same. Many teams also add extra output columns like “Last Checked” and “Notes,” or adjust the Evaluate Backlink Status logic to use labels that match client dashboards.
Usually it’s incorrect API credentials or an account issue on the DataForSEO side. Double-check the username/password used in the HTTP Request nodes, and confirm your account has API access and available balance. If it fails only on bigger runs, you might be hitting rate limits; slow the batch size in Split in Batches or add a longer wait between requests.
Hundreds is realistic per run, and larger lists work too if you batch them and let the workflow run longer.
Often, yes, because this job isn’t a simple “send data from A to B.” You’re looping over rows, waiting for an API crawl to finish, then making a decision based on the response. n8n handles that logic cleanly without awkward workarounds. Zapier and Make can still work for lightweight checks, but you may run into task costs and harder-to-maintain branching once you scale beyond a small sheet. If you’re unsure, Talk to an automation expert and we’ll sanity-check the best option for your volume and reporting needs.
Accurate backlink statuses shouldn’t depend on someone having a “free afternoon.” Set this up once, keep your Google Sheet fresh, and spend your time on decisions instead of link-checking.
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.