Google Sheets + Gemini: SEO audits that stay consistent
Your SEO audits probably look “fine” right up until they don’t. A page changes, rankings slip, and suddenly you are digging through old exports, screenshots, and one-off notes that don’t match what you checked last week.
SEO managers get stuck chasing consistency. A content lead needs clear next steps, not another tool to babysit. And if you run client work, Gemini SEO audits in a spreadsheet are the difference between “we’ll look into it” and a tidy weekly plan.
This workflow turns a simple URL list into a weekly SEO watchlist inside Google Sheets. You’ll see what it does, what you get, and what to watch out for before you turn it on.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Gemini: SEO audits that stay consistent
flowchart LR
subgraph sg0["Trigger: Weekly Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Done", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Read Input URLs (Google Shee..", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop URLs (Split in Batches)", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "AI Model: Google Gemini", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Output Parser: Enforce SEO J..", pos: "b", h: 48 }
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Trigger: Weekly", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Decodo: Fetch Page Content", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Generate SEO Audit", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Transform: Summary Row"]
n9@{ icon: "mdi:database", form: "rounded", label: "Google Sheets: Append Summary", 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/code.svg' width='40' height='40' /></div><br/>Transform: Explode Issues"]
n11@{ icon: "mdi:database", form: "rounded", label: "Google Sheets: Append Issues", 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/merge.svg' width='40' height='40' /></div><br/>Join Summary + Issues"]
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set: Configure Workflow", pos: "b", h: 48 }
n5 --> n13
n7 --> n8
n7 --> n10
n12 --> n2
n8 --> n9
n3 -.-> n7
n13 --> n1
n10 --> n11
n6 --> n7
n11 --> n12
n2 --> n0
n2 --> n6
n9 --> n12
n4 -.-> n7
n1 --> n2
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 n5 trigger
class n4,n7 ai
class n3 aiModel
class n1,n9,n11 database
class n8,n10 code
classDef customIcon fill:none,stroke:none
class n8,n10,n12 customIcon
The Problem: SEO audits drift, and you lose the thread
Manual audits are rarely repeatable. One week you check title tags, next week it’s internal links, then someone runs Lighthouse and drops a PDF in Slack. Nothing lines up, so you can’t spot patterns across time. Worse, your “priority list” becomes vibes-based because every audit uses different language and different severity levels. Even when you do everything right, copying issues into a spreadsheet takes forever, and it’s painfully easy to miss a broken status code or a quietly truncated meta description.
It adds up fast. Here’s where it breaks down in real teams.
- Audits live in scattered docs, which means nobody trusts last week’s findings.
- Copying issues from tools into Sheets can take about 2 hours per audit cycle.
- Severity labels change by person, so “high priority” becomes meaningless.
- You only notice repeating problems after they’ve already cost you weeks.
The Solution: a weekly SEO watchlist that writes itself
This n8n workflow runs on a weekly schedule and reads a Google Sheet that contains your target URLs (your watchlist). It processes those URLs in batches, fetches each page’s content and status using Decodo, then asks Gemini to produce a compact, structured SEO audit as strict JSON. That structure matters. It keeps scoring, issues, and suggested fixes consistent from one run to the next, so the output remains comparable over time. Finally, the workflow flattens the results into two spreadsheet tabs: a per-URL Summary (easy for triage) and a normalized All Issues table (easy for filtering, grouping, and assigning).
The workflow starts with a weekly trigger and a config step (sheet ID and tab identifiers). It then loops through each URL, fetches the page, generates the audit, and appends rows to Google Sheets. When one URL is done, it moves on to the next until the list is complete.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you track 40 important URLs across landing pages, blog posts, and product pages. Manually, even a quick check at about 5 minutes per URL is roughly 3+ hours, and you still have to paste findings into a spreadsheet. With this workflow, you update the list once, then the weekly run does the fetching and writing for you. Your “work” is reviewing the Summary tab and sorting the All Issues tab, which is usually about 15 minutes.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for the URL list and outputs
- Google Gemini to generate structured SEO audits
- Decodo to fetch page content and status
- Google API credentials (create in Google Cloud Console)
Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and match Sheet headers to the fields being appended.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A weekly schedule kicks things off. n8n runs on the day/time you choose, so your watchlist updates without anyone remembering to “do the audit.”
Your URL list is pulled from Google Sheets. One tab acts as the source of truth with a simple URL column, and the workflow reads it before starting the loop.
Each URL is fetched, then audited consistently. Decodo retrieves the page content (plus status details), and Gemini turns that into a strict JSON output so the same kinds of issues land in the same place every run.
Two tabs get updated automatically. The Summary tab gets one row per URL (great for scanning). The All Issues tab gets one row per issue (great for filtering, grouping, and assigning work).
You can easily modify the schedule to run daily instead of weekly based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Configure the Schedule Trigger
Set the workflow to run on a weekly cadence using the built-in scheduler.
- Add and open Weekly Schedule Trigger.
- Set the schedule rule to a weekly interval (the node uses Rule →
weeks). - Connect Weekly Schedule Trigger to Set Workflow Config to start the pipeline.
Connect Google Sheets
Configure your input and output spreadsheets so the workflow can read URLs and write audit results.
- Open Set Workflow Config and set sheet_id to your spreadsheet ID (replace
change me!with the real ID). - In Retrieve URL List Sheet, set Document ID to
{{ $json.sheet_id }}and Sheet Name toInput(gid0). - In Append Summary to Sheets, set Operation to
append, Sheet Name toOutput, and Document ID to{{ $('Set Workflow Config').item.json.sheet_id }}. - In Append Issues to Sheets, set Operation to
append, Sheet Name toAll Issues, and Document ID to{{ $('Set Workflow Config').item.json.sheet_id }}. - Credential Required: Connect your Google Sheets credentials in Retrieve URL List Sheet, Append Summary to Sheets, and Append Issues to Sheets.
⚠️ Common Pitfall: If the sheet tab names don’t match Input, Output, or All Issues, the append operations will fail silently or write to the wrong sheet.
Set Up URL Batching and Page Fetch
Iterate through each URL and fetch page content for analysis.
- Open Batch URL Iterator and keep the default settings to process incoming rows in batches.
- In Decodo Page Fetch, set URL to
{{ $json.URL_list }}. - Credential Required: Connect your Decodo credentials in Decodo Page Fetch.
- Verify the flow: Retrieve URL List Sheet → Batch URL Iterator → Decodo Page Fetch.
Tip: If your input sheet column isn’t named URL_list, update the expression in Decodo Page Fetch to match the actual column name.
Set Up Build SEO Audit
Use the Gemini model and structured output parser to generate a strict JSON audit from the fetched page content.
- Open Build SEO Audit and keep Prompt Type set to
definewith the provided system/user prompt text. - Ensure the prompt uses the expressions
{{ $('Batch URL Iterator').item.json.URL_list }},{{ $json.data.results[0].status_code }},{{ $json.data.results[0].updated_at }}, and{{ $json.data.results[0].content }}. - Connect Gemini Chat Model as the language model for Build SEO Audit.
- Credential Required: Connect your Google Gemini credentials in Gemini Chat Model.
- Attach Structured JSON Parser as the output parser for Build SEO Audit and keep the manual schema as provided.
- Credential Required: Add any AI credentials to the parent Build SEO Audit node (the Structured JSON Parser uses the parent’s configuration).
Configure Output Processing and Parallel Writes
Split the AI output into summary and issue-level rows, then append both to Google Sheets.
- Build SEO Audit outputs to both Compose Summary Row and Expand Issue Records in parallel.
- In Compose Summary Row, keep the JavaScript that maps
output[0]into a single summary row. - In Append Summary to Sheets, confirm column mappings use expressions like
{{ $json.url }},{{ $json.decodo_score }}, and{{ $json.recommended_actions }}. - In Expand Issue Records, keep the JavaScript that expands
all_issuesinto multiple rows. - In Append Issues to Sheets, confirm column mappings include
{{ $json.title }},{{ $json.severity }}, and{{ $json.score_delta }}. - Connect both append nodes to Merge Summary and Issues, then route to Batch URL Iterator to continue processing.
Test and Activate Your Workflow
Run a manual test to validate the weekly audit pipeline before enabling production mode.
- Click Execute Workflow and verify Retrieve URL List Sheet reads your input URLs.
- Check that Decodo Page Fetch returns content and Build SEO Audit outputs a JSON object matching the Structured JSON Parser schema.
- Confirm new rows appear in the
OutputandAll Issuessheets from Append Summary to Sheets and Append Issues to Sheets. - Ensure Completion Marker is reached after all URLs are processed.
- When successful, toggle the workflow to Active so Weekly Schedule Trigger runs on schedule.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n credential tester and your Google Cloud “OAuth consent” and scopes 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.
- Decodo can return blocked or thin content for some sites depending on protections. If your audits suddenly get vague, inspect the fetched markdown and status in the Decodo node output before blaming Gemini.
Frequently Asked Questions
About an hour if your credentials are ready.
No. You’ll mainly connect accounts and paste in a few IDs and API keys.
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 Gemini and Decodo usage costs, which depend on how many URLs you audit each week.
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 simple change. Swap the Weekly Schedule Trigger to a daily schedule, then reduce the batch size in the Split in Batches node if your sites are slow to fetch. Many teams also customize the “Set Workflow Config” node to point to different sheet tabs for different site sections (blog vs. product pages) so the outputs stay organized.
Most of the time it’s expired OAuth access or the wrong Google account authorized the credential. Reconnect the Google Sheets credential in n8n and confirm the sheet is shared with that account. If it still fails, check that the Sheet ID is correct in the Set Workflow Config node and that the destination tabs exist with matching headers.
Practically, it can handle hundreds per run, but start with 20 to confirm your Sheet headers, Decodo fetch quality, and Gemini output formatting. On n8n Cloud, your limit is mostly monthly executions. If you self-host, the ceiling is your server and how fast Decodo and Gemini respond.
Often, yes, because this workflow relies on looping through many URLs, parsing structured JSON, and writing two different tables back to Sheets. n8n is simply more comfortable with that kind of multi-step logic, and you’re not forced into paying more just to add branches or code steps. Zapier or Make can still work if you only audit a handful of pages and don’t care about normalized “All Issues” rows. But once you want consistent, repeatable output week after week, n8n tends to feel less fragile. If you want a second opinion for your exact setup, Talk to an automation expert.
Once this is running, your spreadsheet becomes the system. The workflow handles the repeatable audit work, and you spend your time shipping fixes instead of rebuilding the same report every week.
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.