Google Sheets + PageSpeed Insights, SEO audits ready
Monthly SEO audits sound simple until you’re juggling Google Analytics, Search Console, PageSpeed Insights, and a dozen browser tabs. Then it turns into copy-paste, half-finished notes, and “we’ll fix it next month” because the report took all day.
This SEO audit automation hits marketing managers hardest, honestly. But agency owners and in-house SEO specialists feel it too, because you’re the one who has to explain what changed and what to do next. The outcome is simple: a monthly audit that lands in Google Sheets with clear priorities you can assign and track.
Below, you’ll see how this n8n workflow pulls the right data, runs a “team” of AI analysts on it, and leaves you with a shareable report instead of a spreadsheet full of raw exports.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Sheets + PageSpeed Insights, SEO audits ready
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Append row", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model2", pos: "b", h: 48 }
n5@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model3", pos: "b", h: 48 }
n6@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model4", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Get row(s)4", 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/merge.svg' width='40' height='40' /></div><br/>Merge"]
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/>Search console"]
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Target Website", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Format GA Data"]
n12@{ icon: "mdi:robot", form: "rounded", label: "Analytics Specialist Agent", 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/code.svg' width='40' height='40' /></div><br/>Format Search Console Data"]
n14@{ icon: "mdi:robot", form: "rounded", label: "SEO Specialist Agent", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch PageSpeed Data"]
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/code.svg' width='40' height='40' /></div><br/>Format PageSpeed Data"]
n17@{ icon: "mdi:robot", form: "rounded", label: "Performance Specialist Agent", pos: "b", h: 48 }
n18["<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/>Crawl Website Homepage"]
n19["<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/>Extract On-Page SEO Data"]
n20["<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/>Score On-Page SEO"]
n21@{ icon: "mdi:robot", form: "rounded", label: "Technical Audit Agent", pos: "b", h: 48 }
n22["<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/>Aggregate All Reports"]
n23@{ icon: "mdi:robot", form: "rounded", label: "Master Analyst Agent", pos: "b", h: 48 }
n24@{ icon: "mdi:database", form: "rounded", label: "Get GA History", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Get Search Console History", pos: "b", h: 48 }
n26@{ icon: "mdi:database", form: "rounded", label: "Get PageSpeed History", pos: "b", h: 48 }
n27@{ icon: "mdi:database", form: "rounded", label: "Get Technical Audit History", pos: "b", h: 48 }
n28@{ icon: "mdi:database", form: "rounded", label: "Save Final Report to Sheet", pos: "b", h: 48 }
n29@{ icon: "mdi:cog", form: "rounded", label: "Get a report", pos: "b", h: 48 }
n30@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet in Googl..", pos: "b", h: 48 }
n31@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet in Googl..", pos: "b", h: 48 }
n32@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet in Googl..", pos: "b", h: 48 }
n8 --> n22
n2 -.-> n12
n7 -.-> n23
n29 --> n11
n11 --> n12
n24 -.-> n12
n9 --> n13
n0 --> n10
n1 -.-> n12
n20 --> n21
n3 -.-> n14
n4 -.-> n17
n5 -.-> n21
n6 -.-> n23
n10 --> n29
n10 --> n15
n10 --> n9
n10 --> n18
n15 --> n16
n23 --> n28
n14 --> n8
n22 --> n23
n16 --> n17
n26 -.-> n17
n21 --> n8
n18 --> n19
n19 --> n20
n12 --> n8
n13 --> n14
n25 -.-> n14
n27 -.-> n21
n17 --> n8
n30 -.-> n17
n31 -.-> n14
n32 -.-> n21
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 n12,n14,n17,n21,n23 ai
class n1,n3,n4,n5,n6 aiModel
class n2,n7,n24,n25,n26,n27,n28,n30,n31,n32 database
class n9,n15,n18 api
class n11,n13,n16,n19,n20,n22 code
classDef customIcon fill:none,stroke:none
class n8,n9,n11,n13,n15,n16,n18,n19,n20,n22 customIcon
The Challenge: Monthly SEO Audits That Don’t Eat Your Week
A “monthly SEO audit” usually starts with good intentions and ends with a messy Google Doc, a few screenshots, and a spreadsheet nobody wants to open again. You export a GA report, then you grab Search Console queries, then you run PageSpeed, then you try to remember what you changed last month. Meanwhile, small issues slip through because you’re tired, you’re rushing, and you’re working from five sources that don’t agree with each other. The worst part is the opportunity cost: time spent assembling the audit is time you’re not using to actually improve pages.
It adds up fast. Here’s where it usually breaks down.
- Pulling reports from GA, Search Console, and PageSpeed turns into an hour of tab-hopping before you’ve written a single recommendation.
- Audit notes end up vague because you’re summarizing from memory instead of working from a structured set of findings.
- Priorities get lost, so the same technical issues show up month after month with no clear owner.
- Historical comparison is painful, which means you’re “reporting” without telling a story of what changed.
The Fix: A Monthly AI-Powered SEO Audit That Writes Itself into Sheets
This workflow runs on a schedule and builds a complete monthly audit for any target website you choose. It starts by setting your target domain once, then automatically pulls fresh data from Google Analytics, Google Search Console, and Google PageSpeed Insights. In parallel, it also does a live crawl of your homepage to extract on-page signals (think titles, headings, and basic technical cues) so you’re not blind to what’s actually on the page right now. Each data stream gets cleaned up and summarized, then a set of specialized AI agents analyze it from different angles: analytics insights, performance bottlenecks, technical SEO issues, and strategy. Finally, a “master analyst” agent combines those findings into a single, actionable plan and stores everything in Google Sheets for tracking.
The workflow begins with the scheduled trigger, then branches into four parallel collectors (Analytics, Search Console, PageSpeed, and a homepage crawl). After that, AI agents turn raw metrics into plain-English observations, and a final synthesis creates your monthly priorities and next steps in Google Sheets.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you audit 5 client sites each month. Manually, you might spend about 30 minutes pulling GA and formatting it, 30 minutes on Search Console exports, 20 minutes collecting PageSpeed results, and another 40 minutes writing findings and priorities. That’s roughly 2 hours per site, or about 10 hours monthly. With this workflow, you set the domain once and let the scheduled run compile the sources and draft the report into Google Sheets, so your time shifts to review and edits (often 15–20 minutes per site, not an afternoon).
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing specialist and final reports.
- Google Analytics to pull monthly traffic and engagement signals.
- Google Search Console to review queries, pages, and performance trends.
- Google PageSpeed Insights API key (get it from Google Cloud Console API credentials).
- OpenAI API key (get it from your OpenAI dashboard) for the AI agent analyses.
Skill level: Intermediate. You’ll mostly connect accounts and paste a few IDs/keys, but you should be comfortable checking a node’s settings if something fails.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A monthly schedule kicks it off. You decide when the audit runs, and the workflow starts automatically without anyone remembering to “do reporting.”
Your target domain gets set once. A “Define Target Domain” step pushes the same website URL through the whole workflow, so the Analytics, Search Console, PageSpeed, and crawl requests all stay aligned.
Four data sources run in parallel. Google Analytics pulls a report, HTTP requests collect Search Console and PageSpeed metrics, and another HTTP request crawls the homepage so you can flag obvious on-page and technical issues. Each stream gets summarized into a clean, readable format before analysis.
AI specialists write findings, then a master analyst merges them. Separate AI agents handle analytics insights, performance issues, technical audit notes, and SEO strategy. A merge waits for all streams, then the master synthesis agent produces one unified, actionable report and saves it to Google Sheets.
You can easily modify the target pages (not just the homepage) to audit deeper sections of your site based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
Set the workflow’s schedule so audits run automatically on a monthly cadence.
- Open Scheduled Run Trigger.
- Set the schedule rule to run every month at Trigger At Hour
9. - Confirm the node is connected to Define Target Domain.
Step 2: Connect Google Data Sources
Authenticate Google services used for Analytics, Search Console, and Google Sheets storage/history.
- Open Retrieve GA Report and connect credentials. Credential Required: Connect your
googleAnalyticsOAuth2credentials. - Open Query Search Console and connect credentials. Credential Required: Connect your
googleOAuth2Apicredentials. - Connect Google Sheets credentials for data storage/history nodes: Append Sheet Row, Fetch Master Sheet Rows, Retrieve GA History, Retrieve Search Console History, Retrieve PageSpeed History, Retrieve Technical Audit History, Fetch Sheet Rows A, Fetch Sheet Rows B, Fetch Sheet Rows C, and Store Final Report. Credential Required: Connect your
googleSheetsOAuth2Apicredentials.
Step 3: Set Up Target Domain and Parallel Data Collection
Define the audited domain and verify the parallel collection of GA, PageSpeed, Search Console, and crawling signals.
- In Define Target Domain, set the domain value to
https://www.your-website.com. - Confirm parallel execution: Define Target Domain outputs to both Retrieve GA Report and Request PageSpeed Metrics and Query Search Console and Crawl Site Homepage in parallel.
- In Request PageSpeed Metrics, set URL to
=https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={{ $json.domain }}&category=performance&category=accessibility&category=best-practices&category=seo. Credential Required: Connect yourhttpQueryAuthcredentials. - In Query Search Console, confirm URL is
=https://www.googleapis.com/webmasters/v3/sites/{{ encodeURIComponent($('Define Target Domain').item.json.domain) }}/searchAnalytics/queryand JSON Body uses the date expressions (for the last 30 days). - In Crawl Site Homepage, set URL to
={{ $json.domain }}and keep the custom User-Agent and Accept headers intact.
$now.minus({months: 1}) and $now in the JSON body, so ensure your timezone and date settings in n8n are correct.Step 4: Configure Processing & Scoring Nodes
Format and score raw data so the agents receive readable, structured input.
- Keep Compose GA Summary as the formatter for Retrieve GA Report outputs; no edits are required unless you want custom metrics.
- Keep Summarize Search Console as the formatter for Query Search Console; this node handles empty data gracefully.
- Keep Summarize PageSpeed as the formatter for Request PageSpeed Metrics output.
- Ensure Crawl Site Homepage flows into Extract On-Page Signals, then into Score On-Page Signals to create the technical audit report.
Step 5: Set Up AI Analysis Agents and Language Models
Connect each agent to the correct language model and ensure tool credentials are attached at the right level.
- Verify language model connections: AI Chat Model Alpha → Analytics Insight Agent, AI Chat Model Beta → Performance Insight Agent, AI Chat Model Gamma → SEO Strategy Agent, AI Chat Model Delta → Technical Audit Analyst, AI Chat Model Epsilon → Master Synthesis Agent. Credential Required: Connect your
openAiApicredentials on each AI Chat Model node. - Confirm Analytics Insight Agent receives output from Compose GA Summary and sends results to Combine Report Streams.
- Confirm Performance Insight Agent receives output from Summarize PageSpeed and sends results to Combine Report Streams.
- Confirm SEO Strategy Agent receives output from Summarize Search Console and sends results to Combine Report Streams.
- Confirm Technical Audit Analyst receives output from Score On-Page Signals and sends results to Combine Report Streams.
Step 6: Configure Report Aggregation and Storage
Merge all AI outputs, generate the master synthesis, and store the final report.
- In Combine Report Streams, keep Number Inputs set to
4so it expects Analytics, PageSpeed, Search Console, and Technical Audit outputs. - Confirm Combine Report Streams flows into Aggregate Report Pack, then into Master Synthesis Agent.
- Verify Master Synthesis Agent connects to Store Final Report to write the final synthesis to Google Sheets. Credential Required: Connect your
googleSheetsOAuth2Apicredentials. - In Append Sheet Row, set operation to
appendand set documentId to[YOUR_ID].
Step 7: Test and Activate Your Workflow
Run a full manual test to confirm data collection, AI analysis, and reporting are working end-to-end.
- Click Execute Workflow to run Scheduled Run Trigger manually.
- Verify that Define Target Domain launches four parallel branches and that each branch completes: GA, PageSpeed, Search Console, and crawl/audit.
- Check that Combine Report Streams receives four inputs and that Aggregate Report Pack generates a consolidated summary.
- Confirm Store Final Report writes a row into your Google Sheet and the AI agents return structured recommendations.
- Activate the workflow by toggling Active so it runs on schedule.
Watch Out For
- Google Sheets credentials can expire or need specific permissions. If things break, check the credential status in n8n’s Credentials screen and confirm the Sheet is shared with the right Google account.
- 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 your Google and OpenAI accounts are ready.
Yes, but someone needs to be comfortable pasting API keys and Sheet IDs into the right nodes. No coding is required for a standard setup.
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 OpenAI API costs (often a few dollars a month for typical audit volume) and PageSpeed API usage.
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.
Start with the “Define Target Domain” node so every branch updates together. If you want deeper coverage than the homepage crawl, duplicate the crawl and on-page extraction logic for key templates (service pages, category pages, or top landing pages). You can also adjust the AI agent prompts so the output matches your reporting style, for example “focus on revenue-impacting issues first” or “write tickets that can be dropped into an SEO backlog.”
Usually it’s the wrong Google account or a missing permission to the target spreadsheet. Re-select the credential inside each Google Sheets node, then confirm the Sheet is accessible to that account. If you copied a Sheet template, double-check the Document ID fields too. One more thing: some teams lock down Sheets with workspace policies, so an admin approval may be required.
On n8n Cloud, capacity depends on your plan’s monthly executions, and each audit run uses multiple executions because it branches across sources. If you self-host, there’s no hard execution cap; it mostly depends on your server resources and API rate limits. Practically, many teams run this monthly across dozens of sites without issues once credentials and timeouts are set sensibly.
Often, yes. This workflow relies on parallel data collection, merging, and multi-agent AI analysis, which is where n8n tends to feel more flexible and less constrained. You also get the self-hosting option, which can matter if you want predictable costs. Zapier or Make can be quicker for very simple “send metric A to Sheet B” tasks, but the logic here is more than a two-step zap. If you’re unsure, Talk to an automation expert and we’ll sanity-check the best path for your team.
Once this is running, your monthly audit stops being a recurring fire drill and starts being a repeatable system. The workflow handles the busywork, and you spend your time making the calls that actually move rankings.
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.