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:
- Schedule Trigger — fire every Monday at 9am.
- 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 - 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 }}
- 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:
- Schedule Trigger — every morning at 7am.
- SEO Score API node — operation
List Tracked Domains. This returns one row per domain you've audited, withlatest_scoreandtrend_30d. - Filter node — keep only items where
trend_30d <= -3. - 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-alertswith the domain name, current score, trend, and the last 5 data points.
- SEO Score API node — operation
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:
- Webhook Trigger — receives
{ "url": "https://acme.com/blog/new-post" }. - SEO Score API node — operation
Audit URL, URL ={{ $json.url }}. - IF node — check whether
$json.history.first_auditistrue:- 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:
- API Key — get one free at seoscoreapi.com.
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.