docs

Documentation

Get a key, make one call, read what comes back. Five minutes. After that: the contract, a reference page per endpoint, and worked examples.

1. Get a key

Sign up at https://seofetch.com/app/ and create a key from the dashboard. Every account starts with 1,000 free credits. The request below costs 1, so that is 1,000 runs before you pay for anything.

Get your API key →

2. Your first request

Swap in your key and run it:

bash
curl https://api.seofetch.com/v1/search \
  -H "Authorization: Bearer sof_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"query": "best running shoes"}'

3. Read the envelope

Every endpoint wraps its results in the same six fields: id, request_id, object, created_at, elapsed_ms, credits. The results themselves are under data. Learn this once and you can read all twenty-one endpoints.

credits.charged is what the call cost (0 on a replay). credits.balance is what's left. Errors, timeouts, rate limits and refunds are on The Contract.

json
{
  "id": "srch_7f34stnlffnsbalonq66dpuj",
  "request_id": "req_7e5465ge5fjmziqx5dyueaqyvy",
  "object": "search",
  "created_at": "2026-07-29T12:00:00Z",
  "elapsed_ms": 244,
  "credits": {
    "charged": 1,
    "balance": 9857
  },
  "data": {
    "query": "best running shoes",
    "engine": "google",
    "location": 2840,
    "language": "en",
    "device": "desktop",
    "total_results": 84900000,
    "serp_url": "https://www.google.com/search?q=best+running+shoes",
    "result_types": [
      "organic"
    ],
    "results_count": 10,
    "items": [
      {
        "type": "organic",
        "rank": 1,
        "page": 1,
        "domain": "example.com",
        "title": "The 12 Best Running Shoes",
        "url": "https://example.com/best-running-shoes",
        "description": "Our team tested 40 pairs...",
        "displayed_link": "example.com › reviews › shoes",
        "date": null,
        "site_name": "Example Running Co.",
        "rating": {
          "value": 4.6,
          "votes": 1284,
          "max": 5
        },
        "sitelinks": [
          {
            "title": "Best Trail Running Shoes",
            "url": "https://example.com/best-running-shoes/trail",
            "description": null
          },
          {
            "title": "Best Budget Running Shoes",
            "url": "https://example.com/best-running-shoes/budget",
            "description": null
          }
        ],
        "price": null,
        "highlighted_words": [
          "running shoes"
        ]
      }
    ]
  }
}

Read The Contract →

4. Retries are free

You sent no idempotency key above. That's fine: success responses carry a request_id, and so does the 504 you get if a job outlives your connection. Resend the same body with that request_id and you're never charged twice. While the job is still running, the retry waits for it. Once it has finished you get the exact stored result back for 6 hours, a cache read, uncharged. Past that it's a 409, so mint a new key. Timing and mechanics are on The Contract.

Read The Contract →

6. For agents

Every page here is also plain Markdown. Start with https://docs.seofetch.com/overview.md, a short brief rather than the whole corpus. https://docs.seofetch.com/llms.txt lists every page; https://docs.seofetch.com/llms-full.txt is the entire corpus in one fetch: this page, The Contract, the Changelog, and all twenty-one endpoint references.

Three ways to ask for Markdown instead of HTML: ?format=md on the query string, a .md suffix on the URL (https://docs.seofetch.com/the-contract.md), or an Accept: text/markdown header. All three return the same Markdown.

Request and response schemas are published as OpenAPI: https://api.seofetch.com/v1/openapi.json.

One rule for unattended retries. If your process might die before it reads the response, bring your own key up front; a lost response means no request_id to recover. If the response did arrive, its request_id is your replay key. Details on The Contract.

bash
curl "https://docs.seofetch.com/the-contract/?format=md"
curl "https://docs.seofetch.com/the-contract.md"
curl -H "Accept: text/markdown" "https://docs.seofetch.com/the-contract/"

Endpoints

/v1/search
Run one search query and get the parsed SERP back — ranked items, not raw HTML.
1 cr
/v1/keywords/volume
Historical Google keyword search volume and competition metrics.
20 cr
/v1/keywords/difficulty
Keyword difficulty (0-100) per keyword; unscored keywords return pending and are scored for a later call.
110 cr
/v1/backlinks/summary
Backlink profile summary metrics for a domain or URL.
20 cr
/v1/backlinks/list
Individual backlinks pointing at a domain or URL.
50 cr
/v1/backlinks/domains
Domains that link to a target, with per-domain metrics.
50 cr
/v1/backlinks/anchors
Anchor-text distribution of backlinks to a target.
50 cr
/v1/domains/overview
Return a domain's organic and paid search overview for one market.
10 cr
/v1/page/lighthouse
Lighthouse scores and core web vitals for a single page.
2 cr
/v1/page/crawl
Render a single page and return a slim page-SEO snapshot.
2 cr
/v1/page/accessibility
Axe accessibility scan of a single page — violations, keyboard-navigation checks, and scan status.
2 cr
/v1/site/audit
Crawl and audit a whole site; billed per delivered page (sum of enabled checks x pages delivered).
metered
/v1/serp/history
Position history for a (domain, keyword) pair from our SERP archive.
5 cr
/v1/domains/card
Company card — identity, contacts, socials, technology from our crawl.
10 cr
/v1/keywords/ideas
Related keyword ideas for a seed set, with volume, CPC and competition.
110 cr
/v1/keywords/questions
People-Also-Ask questions observed for a topic, deduplicated.
20 cr
/v1/ai/visibility
How often AI assistants mention a domain, per provider, over time.
10 cr
/v1/locations
Look up Google Ads geotarget IDs by name — country, state/region, city, or neighborhood.
free
/v1/domains/competitors
Competitor discovery from the SERP archive: domains that rank for the same keywords, ranked by overlap.
30 cr
/v1/domains/gap
Keyword gap between two domains: opportunity, shared, or unique rankings, volume-enriched.
15 cr
/v1/backlinks/changes
Links gained and lost for a target over a date window, with anchor, dofollow and source authority on each change.
50 cr