CompetitorsKeywords

Keyword gap between two domains

POST/keyword-gap
from $0.05/calljson responserest · mcp
01// about this endpoint

Compares two domains' organic rankings keyword by keyword. Each row carries keyword_data plus first_domain_serp_element (target1's ranking) and second_domain_serp_element (target2's) with rank_absolute, rank_group and the ranked URL. The classic gap query is: competitor ranks well, you don't — filters: [["first_domain_serp_element.rank_absolute",">",20],"and",["second_domain_serp_element.rank_absolute","<=",10]] with target1 = you, target2 = the competitor (a missing element means that domain does not rank at all). Cost scales with rows; the default 100 is enough for most gap analyses.

02// code samples

Call it over REST

Authenticate with a bearer token against https://api.superagnt.com. Swap the placeholders for your key and parameter values.

curlbash
curl -s -X POST "https://api.superagnt.com/keyword-gap" \
  -H "Authorization: Bearer <YOUR_AGNTDATA_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{ "target1": "<string>", "target2": "<string>" }'
03// give it to your agent

Copy-paste prompt

Paste this into a coding agent. It connects the superagnt MCP server, finds the tool data_seo_keyword_gap, and runs a first call — with the REST fallback if MCP is unavailable.

agent prompttext
You are wiring up the superagnt "SEO" API to use this endpoint: Keyword gap between two domains.

1. CONNECT over MCP (preferred). No token to paste either way.
   On Claude (claude.ai, the desktop app, or Claude Code signed in with a Claude
   account), the server is a connector: give the user this link, they click Add
   and approve:
     https://claude.ai/customize/connectors/yours?modal=add-custom-connector&connectorName=superagnt&connectorUrl=https%3A%2F%2Fmcp.superagnt.com%2Fmcp&open_in_browser=1
   Any other MCP client (or Claude Code signed in with an API key): add the server
   and let the client run the browser sign-in:
     claude mcp add --scope user --transport http superagnt https://mcp.superagnt.com/mcp
     claude mcp login superagnt
   MCP endpoint: https://mcp.superagnt.com/mcp
   After connecting, the tool you want is named exactly:
     data_seo_keyword_gap
   Call agnt_tools_search or agnt_tools_list_enabled to confirm it is available.

2. REST fallback (if you are not using MCP):
     POST https://api.superagnt.com/keyword-gap
     Header: Authorization: Bearer <YOUR_AGNTDATA_API_KEY>
   Required parameters:
    - target1 (string, required) — First domain (e.g. your domain), no protocol.
    - target2 (string, required) — Second domain (e.g. a competitor), no protocol.
   Optional parameters:
    - location_code (integer, optional) — Geo target as a location code. Default 2840 (United States).
    - language_code (string, optional) — Two-letter language code. Default 'en'.
    - limit (integer, optional) — Max intersecting keywords to return. Default 100.
    - offset (integer, optional) — Pagination offset.
    - filters (array, optional) — Optional filter expression as [field, operator, value] triples joined by 'and'/'or'. Operators: =, <>, <, <=, >, >=, in, not_in, like, not_like. Recipe (their wins, your gaps): [["first_domain_serp_element.rank_absolute",">",20],"and",["second_domain_serp_element.rank_absolute","<=",10]].
    - order_by (array, optional) — Sort rules.

3. COST & KEY. This endpoint is metered — pricing varies by request, from $0.05 per call. Only successful calls are charged.
   Get a superagnt API key at https://app.superagnt.com.

4. TEST. Connect the server (or set the key), discover the tool
   (data_seo_keyword_gap), run one minimal call with just the required parameters,
   and report back the shape of the JSON response (top-level fields).

Reference (machine-readable variant): https://www.superagnt.com/docs/apis/seo/endpoints/keyword_gap.md
mcp tool definitionjson
{
  "name": "keyword_gap",
  "description": "Compares two domains' organic rankings keyword by keyword. Each row carries keyword_data plus first_domain_serp_element (target1's ranking) and second_domain_serp_element (target2's) with rank_absolute, rank_group and the ranked URL. The classic gap query is: competitor ranks well, you don't — filters: [[\"first_domain_serp_element.rank_absolute\",\">\",20],\"and\",[\"second_domain_serp_element.rank_absolute\",\"<=\",10]] with target1 = you, target2 = the competitor (a missing element means that domain does not rank at all). Cost scales with rows; the default 100 is enough for most gap analyses.",
  "parameters": {
    "type": "object",
    "properties": {
      "target1": {
        "type": "string",
        "description": "First domain (e.g. your domain), no protocol."
      },
      "target2": {
        "type": "string",
        "description": "Second domain (e.g. a competitor), no protocol."
      },
      "location_code": {
        "type": "integer",
        "description": "Geo target as a location code. Default 2840 (United States).",
        "default": 2840
      },
      "language_code": {
        "type": "string",
        "description": "Two-letter language code. Default 'en'.",
        "default": "en"
      },
      "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 1000,
        "default": 100,
        "description": "Max intersecting keywords to return. Default 100."
      },
      "offset": {
        "type": "integer",
        "minimum": 0,
        "description": "Pagination offset."
      },
      "filters": {
        "type": "array",
        "items": {},
        "description": "Optional filter expression as [field, operator, value] triples joined by 'and'/'or'. Operators: =, <>, <, <=, >, >=, in, not_in, like, not_like. Recipe (their wins, your gaps): [[\"first_domain_serp_element.rank_absolute\",\">\",20],\"and\",[\"second_domain_serp_element.rank_absolute\",\"<=\",10]]."
      },
      "order_by": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Sort rules."
      }
    },
    "required": [
      "target1",
      "target2"
    ]
  }
}
04// parameters
NameInTypeRequiredDescription
target1bodystringrequiredFirst domain (e.g. your domain), no protocol.
target2bodystringrequiredSecond domain (e.g. a competitor), no protocol.
location_codebodyintegeroptionalGeo target as a location code. Default 2840 (United States).
language_codebodystringoptionalTwo-letter language code. Default 'en'.
limitbodyintegeroptionalMax intersecting keywords to return. Default 100.
offsetbodyintegeroptionalPagination offset.
filtersbodyarrayoptionalOptional filter expression as [field, operator, value] triples joined by 'and'/'or'. Operators: =, <>, <, <=, >, >=, in, not_in, like, not_like. Recipe (their wins, your gaps): [["first_domain_serp_element.rank_absolute",">",20],"and",["second_domain_serp_element.rank_absolute","<=",10]].
order_bybodyarrayoptionalSort rules.
05// responses

Keywords both domains rank for, with each domain's position, in `result[0].items`.

200json
{
  "type": "object"
}
06// pricing
from $0.05per successful request

Metered endpoint — the exact cost depends on the request. Credits are deducted per successful call; failed requests (4xx/5xx) are not charged.

Get started at app.superagnt.com.

08// more from SEO

start calling

Point your client at https://mcp.superagnt.com/mcp and your agent has this endpoint, plus every other source on one balance.

Start free→