SEO data that powers your tools.

One API for search and AI visibility data — rankings, keywords, and backlinks. 100TBs of data at your disposal.

No credit card required · Start with 1,000 free credits.

$ curl api.seofetch.com/v1/search -d '{"query": "best running shoes"}'

← response200 · 1 credit
{
  "object": "search",
  "credits": { "charged": 1, "balance": 9857 },
  "data": {
    "query": "best running shoes",
    "total_results": 84900000,
    "items": [
      {
        "rank": 1,
        "title": "The 12 Best Running Shoes",
        "url": "https://example.com/best-running-shoes",
        "site_name": "Example Running Co.",
        "rating": { "value": 4.6, "votes": 1284, "max": 5 },
        "sitelinks": [ { "title": "Best Trail Running Shoes" } ]
      }
    ]
  }
}
+9 more results ranks · titles · ratings · sitelinks 1 credit
how it works

Three commands to first data.

01

Get a key

Sign up and generate an API key from your dashboard.

$ export SEOFETCH_KEY=sof_live_…
02

Send a request

One POST, one response on the same connection. No task IDs, no webhooks.

$ curl api.seofetch.com/v1/search -H "Authorization: Bearer $SEOFETCH_KEY"
03

Get normalized JSON

The same envelope on every endpoint: object, credits, data. One integration, all data types.

"credits": { "charged": 1, "balance": 9857 }
endpoints

Every endpoint, with its price.

Click one. Request and response, generated from the endpoint catalog.

pricing

Prepaid credits. No subscription.

$49
10,000 credits
$0.0049 / credit
up to 1,000 req/hour
Get started
most popular
$199
50,000 credits
$0.0040 / credit
up to 3,000 req/hour
Get started
$499
150,000 credits
$0.0033 / credit
up to 6,000 req/hour
Get started
$999
400,000 credits
$0.0025 / credit
up to 12,000 req/hour
Get started
No credit card requiredCredits don't expireUpstream failures are refundedUp to 12,000 req/hour — more on requestFixed cost per request
why seofetch

Design principles.

usage feedbalance 10,000
/v1/search−1200
/v1/backlinks/summary−20200
/v1/page/lighthouse−2200
usage metering

Per-request pricing

Timed and logged. No seats, no tiers to outgrow.

{ envelope — never changes
  "id", "request_id", "object", 🔒
  "created_at", "elapsed_ms", "credits", 🔒
  "data": { "query", "items[rank, title, domain]" }
}
same envelope since v1every endpoint
one envelope

One API to learn

Learn the envelope once. Every endpoint uses it.

idempotency-key: kd-001attempt 1
POST /v1/keywords/difficulty
job running…charged 110 cr
retries are free

Idempotent by default

Same key, same result, one charge. Crashed cron, flaky network, long job: retry for free.

POST /v1/keywords/volume — one request
"trail running shoes"#1
"running shoes for flat feet"#2
"carbon plate shoes"#3
keywords 3 / 500price 20 cr — flat
batch scale

Built for bulk

One keyword or five hundred per call. Same envelope, one flat price.

rank · "best running shoes"#6
1 credit / keyword / daysame request_id = free re-read
daily data

Dependable enough to build on

Fresh daily, stable ids, replayable results. An input, not a report.

agent: find pages worth optimizing
/v1/searchrank 7
/v1/keywords/volume135k/mo
/v1/keywords/difficultyKD 41 — winnable
/v1/page/crawlmeta missing
→ verdict: rewrite /blog/shoes — upside 135k/mo · 133 cr spent
composable

Primitives, not features

JSON in, JSON out, fixed costs. Build trackers, audit gates and agents on top.

faq

Questions.

What is a credit?

A unit of API usage. Most endpoints cost a flat number of credits per request. Two exceptions: /v1/search costs 1 or 10 depending on depth, and /v1/site/audit is billed per delivered page (the worst case is held up front, the unused part refunded once the crawl settles). /v1/locations is free. Credits don't expire.

What are the rate limits?

An hourly cap per organization, not per key. It follows what you've spent in the trailing 30 days: spend accumulates across packs, and a top-up never lowers your tier. Free tier is 100/hour; the top tier is 12,000/hour. Over the cap you get a clean 429 (rate_limit_error / rate_limited), no queue. The cap is enforced, not a capacity guarantee. Need more? Email support@seofetch.com.

What happens if I run out of credits?

Requests return 402 Payment Required until you top up.

Do failed requests cost credits?

No. Upstream failures are refunded automatically. One caveat: a 504 with code connection_timeout means the job is still running and the charge stands. Reconnect with the same key, or the request_id from that response, to collect the result. A 504 with code upstream_timeout is a definite failure and is refunded.

Are requests synchronous?

Yes. The result comes back on the same connection, up to each endpoint's ceiling: 60 s for most, 180 s for /v1/search, 600 s for /v1/site/audit (full list). If the job outlives the connection you get a 504. Reconnect with the same key, or the request_id it carries.

$ seofetch signup — 1,000 credits granted

Start with 1,000 free credits.

No credit card required.

Get your API key