Keyword Rank Check

Find a domain in the top Google results for a keyword, scanning 10 results by default and up to 100. Lower-ranked domains can be missed.

Pay by wallet (x402) keyword-rank-check

Example

Input
{
  "domain": "wikipedia.org",
  "keyword": "wikipedia",
  "country": "us",
  "language": "en"
}
Answer
{
  "url": "https://en.wikipedia.org/wiki/Main_Page",
  "page": 1,
  "found": true,
  "title": "Wikipedia, the free encyclopedia",
  "domain": "wikipedia.org",
  "country": "us",
  "keyword": "wikipedia",
  "snippet": "Wikipedia is a free online encyclopedia, created and edited by volunteers around the world.",
  "language": "en",
  "position": 1,
  "results_scanned": 10,
  "competitors_above": [],
  "scan_depth_requested": 10
}

Inputs

FieldTypeRequiredWhat it is
depthintegerNoNumber of results to scan (Serper "num" parameter). Defaults to 10, max 100.
domainstringYesDomain to check ranking for (e.g. stripe.com). Aliases: url, site.
countrystringNoMarket to check the ranking in, as an ISO 3166-1 alpha-2 code (SE), alpha-3 code (SWE), numeric code (752), or exact country name (Sweden). "UK" is accepted as an alias for GB. Unrecognised values are rejected before the search runs rather than silently ignored. Sent to Google as the gl parameter. Defaults to "us".
keywordstringYesSearch term to check ranking for. Aliases: query, search, term.
languagestringNoLanguage for results, as an ISO 639-1 code ("en"), optionally with a region ("pt-BR"). Validated for shape and rejected before the search runs if malformed, rather than silently ignored. Sent to Google as the hl parameter. Defaults to "en".

Output fields

How reliably each field appears in a successful answer.

FieldTypeAppears
pageinteger or nullUsually (present for most inputs)
foundbooleanAlways (present in every successful answer)
positioninteger or nullUsually (present for most inputs)
competitors_abovearrayAlways (present in every successful answer)
unresolved_positionsarrayAlways (present in every successful answer)
breadcrumb_derived_positionsarrayAlways (present in every successful answer)
domain—Always (present in every successful answer)
keyword—Always (present in every successful answer)
country—Always (present in every successful answer)
language—Always (present in every successful answer)
results_scanned—Always (present in every successful answer)
scan_depth_requested—Always (present in every successful answer)
url—Usually (present for most inputs)
title—Usually (present for most inputs)
snippet—Usually (present for most inputs)

How to call it

The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.

# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
  -H "Authorization: Bearer $STRALE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "capability_slug": "keyword-rank-check",
    "inputs": {
      "domain": "wikipedia.org",
      "keyword": "wikipedia",
      "country": "us",
      "language": "en"
    },
    "max_price_cents": 15
  }'

Limitations

  • Point-in-time sample, not an average

    Each call captures one Google results snapshot, and rankings vary with algorithm changes, time and personalisation absent from the API request. Repeat checks over time to assess trends rather than treating one result as a stable ranking.

    What to do instead: Call periodically (e.g. daily/weekly) and track position over time rather than relying on a single result.

  • Location is approximated by country/language, not exact geo

    Serper's gl/hl parameters approximate a country-level search context. They do not reproduce city-level local pack results or a specific searcher's true location, device, or personalisation/history, which can shift real-world rankings the caller sees.

  • Scan depth is bounded and explicit

    Only the top `depth` results are searched, with a default of 10 and maximum of 100. A lower-ranked domain returns `found` false and `position` null, which does not mean it has no ranking.

    What to do instead: Increase the depth parameter (up to 100) if the domain is expected to rank beyond position 10.

Related tools