Skip to main content
Lifetime license included with every purchase
n8n workflowsseo reportingsearch consolega4 automation

n8n SEO Reporting Automation: A Weekly Report That Imports and Runs

Build n8n SEO reporting automation with GSC and GA4 auth, a JSON parse step, and a scheduled Sheets-to-stakeholder weekly report you can import once.

Nn8n Marketplace Team·June 19, 2026·Updated June 19, 2026·6 min read

Search for SEO automation in n8n and you get listicles. "10 SEO workflows that transform your operations," each one a screenshot and a paragraph, none of them an actual importable report you can run Monday morning. The gap is glaring: nobody ships the one scheduled report that pulls Search Console and GA4, parses the JSON, and lands a clean rollup in a stakeholder's inbox.

n8n SEO reporting automation is that report. One workflow, one schedule, one Sheet, one email. This guide covers the GSC and GA4 auth that trips most people up, the parse step the listicles never mention, and the weekly Sheets-to-stakeholder cadence that makes the whole thing worth building.

The parse step is the part that quietly breaks every copy-paste attempt. The APIs return nested JSON; your Sheet wants flat rows. Without a parse node in between, you write garbage.

What an SEO reporting workflow can automate

A weekly report is a small pipeline that replaces a tedious manual export:

  • Pull top queries, clicks, impressions, and position from Search Console.
  • Pull sessions and conversions from GA4 for the same window.
  • Compute week-over-week deltas.
  • Flatten the nested API responses into Sheet rows.
  • Write a dated tab and a rollup summary.
  • Email the stakeholder a link plus the headline numbers.

That's the whole job. The hard parts aren't the nodes; they're the auth and the parse.

How to authenticate GSC and GA4 in n8n

This is where most builds die quietly.

For Search Console, use a Google OAuth2 credential scoped to the Search Console API and call searchanalytics.query. The catch: the authenticated identity has to be a verified owner or user of the exact property. A https://example.com URL-prefix property and a sc-domain:example.com domain property are different objects. Authenticate against the wrong one and the query returns an empty array with a 200, no error to chase.

For GA4, use the Google Analytics Data API (runReport) with the same OAuth credential or a service account added to the GA4 property with Viewer access. GA4's report payload is nested differently from Universal Analytics, so any tutorial older than 2023 will point you at endpoints that no longer exist.

An empty report usually means permissions, not code

If auth succeeds but the report comes back empty, it's almost never the workflow. It's the authenticated identity lacking access to the exact GSC property, or a date range that includes the last two to three days GSC hasn't finalized. Check the property URL type and pull the window two days back from today before you touch the nodes.

The reporting pipeline

Schedule (Mon 08:00) → GSC query → GA4 runReport
   → Parse + flatten JSON → Compute WoW deltas
   → Write dated Sheet tab → Build summary → Email stakeholder

1. Trigger weekly

A Schedule trigger fires Monday morning. Weekly is right for SEO; the data is too noisy day to day, and GSC lags by a couple of days anyway. Set the query window to the prior full week, ending two days before today.

2. Pull GSC and GA4

Call searchanalytics.query for top queries and pages. Call GA4's runReport for sessions and conversions on the matching dimensions. Both come back as nested JSON.

3. Parse and flatten

This is the step the listicles skip. The Search Console response nests data under rows[], each with a keys array and metric fields. A Code node flattens it:

return items[0].json.rows.map(r => ({
  json: {
    query: r.keys[0],
    clicks: r.clicks,
    impressions: r.impressions,
    position: Number(r.position.toFixed(1)),
  }
}));

Skip this and every Sheet cell reads [object Object]. That's the single most common "why doesn't my SEO report work" thread.

4. Compute deltas

Read last week's tab, join on query, and compute clicks and position deltas. The deltas are what a stakeholder actually reads; raw numbers without a trend are noise.

5. Write and email

Write a dated tab to the report Sheet, build a short summary (top movers, biggest drops, total clicks WoW), and email the stakeholder the Sheet link with the headline numbers in the body. They click through only if a number surprises them.

Implementation patterns

Pattern: parse node is mandatory, not optional. Treat every API-to-Sheet hop as needing a flatten step. The model here is the same one AI content workflows get wrong: the upstream node returns a shape the downstream node doesn't expect, and the fix is always an explicit parse in between.

Pattern: window ends two days back. Hardcode the report window to end today - 2 so GSC's unfinalized data never skews the latest numbers. A report that swings 30% every Monday because of unfinalized data destroys trust faster than no report.

n8n nodes you'll use most

NodePurpose
Schedule TriggerWeekly Monday run
HTTP Request / Google APIGSC searchanalytics, GA4 runReport
CodeFlatten nested JSON, compute deltas
Google SheetsDated tabs, week-over-week store
SetBuild the email summary payload
Send Email / GmailDeliver the report to stakeholders

Getting started

  1. Create a Google OAuth2 credential scoped to Search Console and the GA4 Data API.
  2. Confirm the identity has access to the exact GSC property and the GA4 property.
  3. Add a Schedule trigger for Monday morning with a window ending two days back.
  4. Wire the GSC and GA4 calls, then the Code node that flattens both responses.
  5. Add the delta computation against last week's tab.
  6. Write the dated tab and build the email summary.
  7. Run it once manually, confirm the Sheet has real rows (not [object Object]), then let the schedule take over.

The Sheets-read, AI-process, distribute-on-a-schedule spine here matches the Content Scheduler & Distributor, which already wires the parse-and-send pattern.

Browse the n8n template catalog
Skip the build

The Content Scheduler & Distributor ships the scheduled-read, parse, and email-out pipeline this report needs: it reads a queue from Google Sheets, filters items for today, runs them through an OpenAI step with a proper parse, and emails a distribution summary. Swap the content step for the GSC and GA4 pulls and the reporting cadence is done. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to every template now and later, sensible once you run more than one scheduled report.

Get the Content Scheduler & Distributor

Reporting pairs with the rest of the marketing stack. The data reporting automation guide generalizes this parse-and-deliver pattern to any dashboard, and the analytics automation post covers the GA4 specifics in more depth. Both lean on the same Content Scheduler & Distributor scheduling spine.

See reporting automation templates
FAQ

Common questions

How do I connect Google Search Console to n8n?
Use a Google OAuth2 credential scoped to the Search Console API, then call the searchanalytics.query endpoint via the HTTP Request node or the Google API node. The service account or OAuth user must be added as a verified owner or user of the property, or the query returns an empty result with no error.
Why does my SEO report come back empty even though auth works?
Almost always a permissions or property-URL mismatch. The authenticated identity needs explicit access to the exact GSC property (the https vs domain-property distinction matters), and the date range can't include the last two to three days, which GSC hasn't finalized yet.
Do I need to parse the data before writing it to Sheets?
Yes. The Search Console and GA4 APIs return nested JSON, not flat rows. A Code node has to flatten rows[].keys and rows[].clicks into the columns your Sheet expects. Skip the parse and you write [object Object] into every cell.
How often should an automated SEO report run?
Weekly is the standard cadence for stakeholder reports, fired by a Schedule trigger on Monday morning. Daily is overkill for SEO because the data is noisy day to day and GSC lags. A weekly rollup with week-over-week deltas reads cleaner and lands better.
Stop reading. Start running.

Get the workflow templates this guide is built on

Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.

Free — $40 value

Get 3 tested n8n templates, free

The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Test-run on a live n8n instance like everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.

  • 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
  • 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
  • 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14