The n8n community node for SEO Score API is at 1.3.0. The big addition over the last release is a Compare URLs operation — drag the node onto your canvas, paste 2–5 URLs, and you get a side-by-side scorecard with a structured diff. No code, no Code node, no manual JSON parsing.

The history operations (Get History, List Tracked Domains) shipped in 1.2 but are worth a recap, because most n8n users haven't seen them yet.

If you don't have the node installed, search for n8n-nodes-seoscoreapi in your n8n self-hosted instance under Settings → Community Nodes, or:

npm install n8n-nodes-seoscoreapi

Operations available in 1.3

Operation Tier What it returns
Audit URL Free+ Full audit JSON for one URL
Batch Audit Paid Full audit JSON for up to 10 URLs
Compare URLs Basic+ Score + diff for 2–5 URLs
Get History Starter+ Timeseries + summary for a URL
List Tracked Domains Starter+ One row per domain you've audited
Check Usage Free+ Your current quota and limits
Scoreboard Opt-Out Free+ Toggle public scoreboard listing

Three patterns below show how to wire these together.

Pattern 1: Weekly competitor comparison posted to Slack

The classic agency workflow. You want a Monday-morning summary of how your client's pricing page compares to two competitors, posted automatically to a #client-acme channel.

The workflow:

  1. Schedule Trigger — fire every Monday at 9am.
  2. SEO Score API node — operation Compare URLs, URLs field set to:
    https://acme.com/pricing, https://competitor-a.com/pricing, https://competitor-b.com/pricing
    
  3. Set node — extract a few fields:
    • acme_score = {{ $json.urls[0].score }}
    • comp_a_score = {{ $json.urls[1].score }}
    • comp_b_score = {{ $json.urls[2].score }}
    • leader = {{ $json.diff.overall.leader }}
    • gap = {{ $json.diff.overall.gap }}
  4. Slack node — post to #client-acme:
    📊 Weekly competitor check
    Acme: {{ $json.acme_score }}
    Competitor A: {{ $json.comp_a_score }}
    Competitor B: {{ $json.comp_b_score }}
    Leader: {{ $json.leader }} (+{{ $json.gap }})
    

That's it. Five nodes, runs weekly, replaces an hour of manual work.

The Compare URLs operation is Basic plan ($15/mo) and up. It also caps at 5 URLs per call, which is the right size for "you vs. your top competitors" — pick the four URLs that matter most and let the node do the work.

Pattern 2: Daily history check that pages on regression

This is the workflow we recommend to anyone running monitors. Instead of waiting for the score-drop alert email, you actively pull the history and decide what counts as worth paging.

The workflow:

  1. Schedule Trigger — every morning at 7am.
  2. SEO Score API node — operation List Tracked Domains. This returns one row per domain you've audited, with latest_score and trend_30d.
  3. Filter node — keep only items where trend_30d <= -3.
  4. Loop Over Items — for each domain that dropped, branch into:
    • SEO Score API node — operation Get History, URL = https://{{ $json.domain }}. This pulls the full timeseries.
    • Code node (or just a Set + Compose) — extract the last 5 audit points and format them.
    • Slack node — post to #seo-alerts with the domain name, current score, trend, and the last 5 data points.

The combination of List Tracked Domains (broad scan) and Get History (narrow drill-down) is the n8n version of "find regressions, then investigate them" — the same loop a human would run, just automated.

Pattern 3: Audit-on-publish pipeline with the Get History delta

If your CMS triggers an n8n webhook when a page is published, you can chain an audit and surface the delta:

  1. Webhook Trigger — receives { "url": "https://acme.com/blog/new-post" }.
  2. SEO Score API node — operation Audit URL, URL = {{ $json.url }}.
  3. IF node — check whether $json.history.first_audit is true:
    • First-time audit branch: post to Slack: "First audit recorded for {{ $json.url }} — score {{ $json.score }}."
    • Repeat-audit branch: post: "Re-audit for {{ $json.url }} — score moved {{ $json.history.delta.score }} ({{ $json.history.delta.grade_change }})."

The history block is on every paid /audit response, so this works without any extra API call. The first-audit case is just the absence of a delta — a cleanly handled edge.

Setting up the API key credential

The first time you drop the SEO Score API node onto a canvas, n8n will prompt you to create a credential. You'll need:

That's it. No OAuth, no scopes — every operation is keyed by your API key and the tier rules are enforced server-side.

Tier-aware design

Not every operation is on every plan. The node won't stop you from picking an operation your key can't access, but the API will return a 402 with a message telling you which tier you need:

Operation Minimum tier
Audit URL, Check Usage Free
Batch Audit, monitor operations Starter ($5/mo)
Get History, List Tracked Domains Starter ($5/mo)
Compare URLs Basic ($15/mo)

If you're new to the API, grab a free key and try Audit URL first. Once you've got that working, Starter on $5/mo unlocks all the history-based workflows in this post.

Upgrading from 1.2

Strict additive update — old workflows still work. The Compare URLs operation is the only new option; everything else carried over.

In n8n: Settings → Community Nodes → seoscoreapi → Update, or npm update n8n-nodes-seoscoreapi in your install.

The full operation reference and source are in the n8n SDK on GitHub. The companion Python SDK (blog post) and Node SDK (blog post) cover the same release if you'd rather work in code than in the visual editor.