SEO Rank & Link Data APIs (Optional Integration Reference)
This is an OPTIONAL reference. None of the other seo-* skills require it.
They are designed to work from first-party signals you already control — your
own crawl, Search Console exports, server logs, and the rendered HTML/RSC
output of your Next.js app. A paid data API only adds the part of SEO you
cannot observe directly: what the rest of the web and the SERPs are doing.
Reach for it when a decision genuinely turns on competitive/external data,
not as a default.
What only an external API can tell you
Most SEO work is observable from your own stack. A data API exists to fill the
gaps you physically cannot crawl:
| Data class |
What it gives you |
Why you can't self-serve it |
| Live SERP positions |
Your (and competitors') rank for a keyword, plus SERP features (snippets, PAA, AI Overview citations, image/video packs) |
Requires geo-distributed, captcha-solving scraping at scale |
| Keyword metrics |
Monthly search volume, CPC, competition, difficulty (0-100), search intent |
Derived from clickstream + ad-auction data you don't have |
| Backlink graph |
Referring domains, anchor-text distribution, follow/nofollow ratio, new/lost links, spam/toxicity score |
Needs a continuous crawl of the whole web's link graph |
| Competitor intelligence |
Estimated traffic, ranked-keyword sets, keyword/backlink overlap, domain rating |
Aggregates the above across domains you don't own |
| AI visibility / share-of-voice |
How often a brand is cited by ChatGPT, Gemini, Perplexity, Google AI Overviews / AI Mode |
Requires sampling LLM responses across a prompt set |
If the question is "is my page indexable / fast / well-structured / correctly
marked up?", you do not need this — use seo-technical, seo-page,
seo-schema, seo-content. If the question is "where do I rank, who beats me,
who links to them, and am I cited by AI assistants?", an API is the only
reliable source.
First-party data you should exhaust first (free)
Before paying for an API, confirm you've used what's already free and often more
trustworthy because it's your data:
- Google Search Console — real impressions, clicks, average position, and the
exact queries Google attributes to your pages. This is ground truth for your
own rankings; no third-party estimate beats it. Export via the Search Console
API or bulk export to BigQuery.
- Bing Webmaster Tools — same idea for Bing/Copilot surfaces.
- Your own crawl — render each route (RSC/SSR output, not just the shell) and
parse titles, metadata, canonicals, internal links, status codes. Use your own
crawler/tooling (a headless browser or a Node crawler over your sitemap).
- Server / edge logs — which bots (Googlebot, GPTBot, PerplexityBot,
ClaudeBot) actually fetch which routes, and how often.
An external API is for the external half of those questions only.
Choosing a vendor (treat them as interchangeable backends)
Vendors differ in coverage, freshness, and pricing model, but the data classes
are the same. Pick based on what you actually need:
- Broad, pay-per-call platforms (e.g. DataForSEO) — widest module coverage
(SERP across Google/Bing/Yahoo/YouTube/Images, keywords, backlinks, on-page
Lighthouse, business listings, AI-scraping). Billed per request; cheapest if
usage is bursty.
- Established subscription suites (e.g. Ahrefs, Semrush, Moz) — strong
backlink graphs and ranked-keyword data; metered API units on top of a seat.
Good when you already pay for the seat.
- AI-visibility-first (e.g. SE Ranking, or dedicated GEO trackers) — one call
returns share-of-voice across ChatGPT, Gemini, Perplexity, AI Overviews and AI
Mode. Worth it when the brief is GEO, not classic SERP.
Multi-source confidence weighting: when two vendors disagree on the same
metric (e.g. referring-domain count), don't average blindly. Report both, note
the discrepancy, and weight by the vendor with the larger/fresher crawl for that
metric. Always cite the source and freshness on every figure, e.g.
DR 62 (Ahrefs, live) or volume 1.9k/mo (DataForSEO, est.). A number without a
source is not actionable.
Wiring it in via an MCP server (recommended)
Expose the API to the agent as an MCP server rather than hand-rolling fetch
calls. The agent then calls typed tools (serp_organic, keyword_volume,
backlinks_summary, …) and the credential never enters the conversation or the
repo. Two common patterns:
- Vendor-published MCP server — some vendors ship one (e.g. an official
@vendor/mcp package run over stdio). Configure it in your MCP client with
the API token supplied via environment, not inline.
- Thin wrapper MCP server — if the vendor only offers REST, write a small
MCP server (TypeScript SDK) that maps a handful of tools to their endpoints.
Keep it minimal: one tool per data class you actually use.
Example MCP client config (token comes from the environment, never committed):
// mcp config — token injected from env, not hardcoded
{
"mcpServers": {
"rank-data": {
"command": "npx",
"args": ["-y", "@vendor/mcp"],
"env": { "RANK_DATA_API_TOKEN": "${RANK_DATA_API_TOKEN}" }
}
}
}
In our stack the token lives in the personal master.env (fetched at runtime via
user_env_get), never in .env.local committed to the repo, and never read
from disk by the agent.
Availability check (do this before any call): verify the MCP tool is actually
connected in the session. If it isn't, tell the user the integration isn't set
up and fall back to first-party data — do not fabricate numbers. A missing
data API degrades the audit's confidence; it does not block it.
Cost awareness (these APIs cost money per call)
Every call is billed (per-request or per-unit). Build the habit of estimating
before spending and logging after:
- Estimate before bulk runs. Before a large keyword list, full backlink
crawl, or a SERP pull with
site: / filetype: operators (often billed at a
multiple of a plain query), surface the expected cost and get explicit
approval.
- Set a daily budget. Track spend per endpoint against a cap. Below a small
threshold, auto-approve; above it, ask; above the daily cap, refuse and
explain.
- Prefer bulk endpoints over N single calls — bulk volume/difficulty/traffic
endpoints are dramatically cheaper per keyword.
- Use sane defaults (one locale/language, depth 100) unless the user asks
for more; don't pull 700-deep SERPs or all locales by reflex.
- Don't re-fetch within a session. Cache results in working memory; the same
keyword's volume doesn't change between two questions five minutes apart.
- Pull, then reason offline. Fetch the dataset once and do the analysis on it
locally rather than making the API do iterative work.
A simple budget gate (illustrative — wire your own tracker/ledger):
// Rough cost guard before an external rank-data call.
type Decision = "approved" | "needs_approval" | "blocked";
function checkSpend(estCost: number, spentToday: number, opts = {
autoApproveUnder: 0.5, // currency units
dailyCap: 20,
}): Decision {
if (spentToday + estCost > opts.dailyCap) return "blocked";
if (estCost > opts.autoApproveUnder) return "needs_approval";
return "approved";
}
How the other skills optionally benefit
When (and only when) a rank-data MCP is connected, the existing skills can
upgrade an estimate to a measured fact. They never depend on it:
seo-audit — annotate findings with live SERP positions and real backlink
counts instead of "likely ranks for".
seo-technical / seo-page — cross-check your crawl with the vendor's on-page
/ Lighthouse pull and live SERP position for target queries.
seo-content — replace guessed search volume / difficulty / intent with real
numbers when prioritizing topics.
seo-backlinks — add a vendor's referring-domain and toxicity signal to the
multi-source confidence model.
seo-competitor-pages / seo-plan — use keyword/backlink intersection and
traffic estimates for genuine competitive gap analysis.
seo-geo — add measured AI share-of-voice / LLM-citation data on top of the
qualitative citability audit.
In each case the rule is the same: prefer first-party truth (Search Console)
where it exists, use the API for what only it can see, and label the source.
Falsifiability check
How would we know this integration is not helping?
- Failure signal: decisions (which keywords to target, which links to chase)
come out the same whether or not the API data is present — i.e. you're paying
for numbers that don't change the plan. Or: reported figures contradict Search
Console for queries you own (the API is wrong about your site, so trust it
less for everyone else's).
- Leading indicator: track API spend against decisions-changed. If a month of
spend produced zero plan changes attributable to external data, the
integration is overhead — narrow it to the few queries that actually need
competitive context, or drop it.
- Confidence, not gating: an audit run without this API should still
produce a valid, lower-confidence report. If removing the API makes a skill
unusable, the dependency was wired wrong.
Parts adapted from claude-seo (MIT, © 2026 agricidaniel).
1---2name: seo-rank-data3description: OPTIONAL reference for wiring third-party rank-tracking, keyword, backlink, SERP, and AI-visibility DATA APIs into an SEO workflow via an MCP server. Vendor-agnostic: explains what each data class provides, when to reach for live data vs. first-party signals, how to wire an MCP server, and how to keep API spend under control. Not required by any other seo-* skill. Use when user says they have (or want) a rank-tracking / keyword / backlink data API, or asks how to get live SERP positions, search volume, keyword difficulty, referring-domain counts, or AI share-of-voice. Triggers on: rank tracking, keyword data API, search volume, keyword difficulty, backlink API, referring domains, live SERP, SERP API, AI visibility, share of voice, LLM mentions, rank data MCP, DataForSEO, Ahrefs, SE Ranking, Semrush, Moz.4---56# SEO Rank & Link Data APIs (Optional Integration Reference)78> **This is an OPTIONAL reference.** None of the other `seo-*` skills require it.9> They are designed to work from first-party signals you already control — your10> own crawl, Search Console exports, server logs, and the rendered HTML/RSC11> output of your Next.js app. A paid data API only *adds* the part of SEO you12> cannot observe directly: what the rest of the web and the SERPs are doing.13> Reach for it when a decision genuinely turns on competitive/external data,14> not as a default.1516## What only an external API can tell you1718Most SEO work is observable from your own stack. A data API exists to fill the19gaps you physically cannot crawl:2021| Data class | What it gives you | Why you can't self-serve it |22|------------|-------------------|-----------------------------|23| **Live SERP positions** | Your (and competitors') rank for a keyword, plus SERP features (snippets, PAA, AI Overview citations, image/video packs) | Requires geo-distributed, captcha-solving scraping at scale |24| **Keyword metrics** | Monthly search volume, CPC, competition, difficulty (0-100), search intent | Derived from clickstream + ad-auction data you don't have |25| **Backlink graph** | Referring domains, anchor-text distribution, follow/nofollow ratio, new/lost links, spam/toxicity score | Needs a continuous crawl of the whole web's link graph |26| **Competitor intelligence** | Estimated traffic, ranked-keyword sets, keyword/backlink overlap, domain rating | Aggregates the above across domains you don't own |27| **AI visibility / share-of-voice** | How often a brand is cited by ChatGPT, Gemini, Perplexity, Google AI Overviews / AI Mode | Requires sampling LLM responses across a prompt set |2829If the question is "is my page indexable / fast / well-structured / correctly30marked up?", you do **not** need this — use `seo-technical`, `seo-page`,31`seo-schema`, `seo-content`. If the question is "where do I rank, who beats me,32who links to them, and am I cited by AI assistants?", an API is the only33reliable source.3435## First-party data you should exhaust first (free)3637Before paying for an API, confirm you've used what's already free and often more38trustworthy because it's *your* data:3940- **Google Search Console** — real impressions, clicks, average position, and the41 exact queries Google attributes to your pages. This is ground truth for your42 own rankings; no third-party estimate beats it. Export via the Search Console43 API or bulk export to BigQuery.44- **Bing Webmaster Tools** — same idea for Bing/Copilot surfaces.45- **Your own crawl** — render each route (RSC/SSR output, not just the shell) and46 parse titles, metadata, canonicals, internal links, status codes. Use your own47 crawler/tooling (a headless browser or a Node crawler over your sitemap).48- **Server / edge logs** — which bots (Googlebot, GPTBot, PerplexityBot,49 ClaudeBot) actually fetch which routes, and how often.5051An external API is for the **external** half of those questions only.5253## Choosing a vendor (treat them as interchangeable backends)5455Vendors differ in coverage, freshness, and pricing model, but the *data classes*56are the same. Pick based on what you actually need:5758- **Broad, pay-per-call platforms** (e.g. DataForSEO) — widest module coverage59 (SERP across Google/Bing/Yahoo/YouTube/Images, keywords, backlinks, on-page60 Lighthouse, business listings, AI-scraping). Billed per request; cheapest if61 usage is bursty.62- **Established subscription suites** (e.g. Ahrefs, Semrush, Moz) — strong63 backlink graphs and ranked-keyword data; metered API units on top of a seat.64 Good when you already pay for the seat.65- **AI-visibility-first** (e.g. SE Ranking, or dedicated GEO trackers) — one call66 returns share-of-voice across ChatGPT, Gemini, Perplexity, AI Overviews and AI67 Mode. Worth it when the brief is GEO, not classic SERP.6869**Multi-source confidence weighting:** when two vendors disagree on the same70metric (e.g. referring-domain count), don't average blindly. Report both, note71the discrepancy, and weight by the vendor with the larger/fresher crawl for that72metric. Always cite the source and freshness on every figure, e.g.73`DR 62 (Ahrefs, live)` or `volume 1.9k/mo (DataForSEO, est.)`. A number without a74source is not actionable.7576## Wiring it in via an MCP server (recommended)7778Expose the API to the agent as an **MCP server** rather than hand-rolling fetch79calls. The agent then calls typed tools (`serp_organic`, `keyword_volume`,80`backlinks_summary`, …) and the credential never enters the conversation or the81repo. Two common patterns:82831. **Vendor-published MCP server** — some vendors ship one (e.g. an official84 `@vendor/mcp` package run over stdio). Configure it in your MCP client with85 the API token supplied via environment, not inline.862. **Thin wrapper MCP server** — if the vendor only offers REST, write a small87 MCP server (TypeScript SDK) that maps a handful of tools to their endpoints.88 Keep it minimal: one tool per data class you actually use.8990Example MCP client config (token comes from the environment, never committed):9192```jsonc93// mcp config — token injected from env, not hardcoded94{95 "mcpServers": {96 "rank-data": {97 "command": "npx",98 "args": ["-y", "@vendor/mcp"],99 "env": { "RANK_DATA_API_TOKEN": "${RANK_DATA_API_TOKEN}" }100 }101 }102}103```104105In our stack the token lives in the personal master.env (fetched at runtime via106`user_env_get`), never in `.env.local` committed to the repo, and never read107from disk by the agent.108109**Availability check (do this before any call):** verify the MCP tool is actually110connected in the session. If it isn't, tell the user the integration isn't set111up and fall back to first-party data — do **not** fabricate numbers. A missing112data API degrades the audit's confidence; it does not block it.113114## Cost awareness (these APIs cost money per call)115116Every call is billed (per-request or per-unit). Build the habit of estimating117before spending and logging after:118119- **Estimate before bulk runs.** Before a large keyword list, full backlink120 crawl, or a SERP pull with `site:` / `filetype:` operators (often billed at a121 multiple of a plain query), surface the expected cost and get explicit122 approval.123- **Set a daily budget.** Track spend per endpoint against a cap. Below a small124 threshold, auto-approve; above it, ask; above the daily cap, refuse and125 explain.126- **Prefer bulk endpoints** over N single calls — bulk volume/difficulty/traffic127 endpoints are dramatically cheaper per keyword.128- **Use sane defaults** (one locale/language, depth 100) unless the user asks129 for more; don't pull 700-deep SERPs or all locales by reflex.130- **Don't re-fetch within a session.** Cache results in working memory; the same131 keyword's volume doesn't change between two questions five minutes apart.132- **Pull, then reason offline.** Fetch the dataset once and do the analysis on it133 locally rather than making the API do iterative work.134135A simple budget gate (illustrative — wire your own tracker/ledger):136137```ts138// Rough cost guard before an external rank-data call.139type Decision = "approved" | "needs_approval" | "blocked";140141function checkSpend(estCost: number, spentToday: number, opts = {142 autoApproveUnder: 0.5, // currency units143 dailyCap: 20,144}): Decision {145 if (spentToday + estCost > opts.dailyCap) return "blocked";146 if (estCost > opts.autoApproveUnder) return "needs_approval";147 return "approved";148}149```150151## How the other skills *optionally* benefit152153When (and only when) a rank-data MCP is connected, the existing skills can154upgrade an estimate to a measured fact. They never depend on it:155156- `seo-audit` — annotate findings with live SERP positions and real backlink157 counts instead of "likely ranks for".158- `seo-technical` / `seo-page` — cross-check your crawl with the vendor's on-page159 / Lighthouse pull and live SERP position for target queries.160- `seo-content` — replace guessed search volume / difficulty / intent with real161 numbers when prioritizing topics.162- `seo-backlinks` — add a vendor's referring-domain and toxicity signal to the163 multi-source confidence model.164- `seo-competitor-pages` / `seo-plan` — use keyword/backlink intersection and165 traffic estimates for genuine competitive gap analysis.166- `seo-geo` — add measured AI share-of-voice / LLM-citation data on top of the167 qualitative citability audit.168169In each case the rule is the same: **prefer first-party truth (Search Console)170where it exists, use the API for what only it can see, and label the source.**171172## Falsifiability check173174How would we know this integration is *not* helping?175176- **Failure signal:** decisions (which keywords to target, which links to chase)177 come out the same whether or not the API data is present — i.e. you're paying178 for numbers that don't change the plan. Or: reported figures contradict Search179 Console for queries you own (the API is wrong about *your* site, so trust it180 less for everyone else's).181- **Leading indicator:** track API spend against decisions-changed. If a month of182 spend produced zero plan changes attributable to external data, the183 integration is overhead — narrow it to the few queries that actually need184 competitive context, or drop it.185- **Confidence, not gating:** an audit run *without* this API should still186 produce a valid, lower-confidence report. If removing the API makes a skill187 unusable, the dependency was wired wrong.188189---190191> Parts adapted from [claude-seo](https://github.com/AgriciDaniel/claude-seo) (MIT, © 2026 agricidaniel).