> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crakseo.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> For SEO data and indexing, start with /seo-mcp/overview.md and /seo-mcp/connect.md, then read the focused server reference.
> The documentation search MCP at https://docs.crakseo.com/mcp searches documentation only. Product tools use https://crakseo.com/mcp/<server>.
> Check tool availability and API credit balance before paid calls. Request owner approval for paid indexing. Never invent prices, indexing guarantees or directory approval.

# SEO MCP: SERP, Keywords, Backlinks and Rank Tracking

> SEO MCP: Google SERP, keyword volume, backlinks, rank tracking and site audits for AI agents.

Every SEO data tool in one server: Google and Bing SERP results, live rank checks, AI Overview sources, keyword search volume, ideas and difficulty, backlinks, referring domains and anchors, ranked keywords, competitor domains and keyword gaps, site audits with Lighthouse scores, Google Maps rankings, Google Business Profiles, and ChatGPT and Perplexity brand mentions.

| | |
| - | - |
| Endpoint | `https://crakseo.com/mcp/seo` |
| Intended registry name | `com.crakseo/seo-mcp` |
| Transport | Streamable HTTP |
| Sign-in | OAuth, or an API key as a bearer token |
| Scopes | `seo-data:read` |
| Billing | Pay as you go (API credits) |

## When to use

Use when one connection should cover most SEO research tasks. Use a focused server instead when the client limits how many tools it loads.

## Connect

```bash Claude Code theme={null}
claude mcp add --transport http crakseo-seo https://crakseo.com/mcp/seo
```

Use `crakseo-seo` as the server name and `https://crakseo.com/mcp/seo` as the URL. Run `/mcp` in Claude Code to authenticate. For OAuth, scoped API keys and a free test, follow [Connect and test](https://docs.crakseo.com/seo-mcp/connect.md).

Other clients: [ChatGPT](https://docs.crakseo.com/quickstarts/chatgpt.md), [Cursor](https://docs.crakseo.com/quickstarts/cursor.md), [Codex](https://docs.crakseo.com/quickstarts/codex.md), [VS Code](https://docs.crakseo.com/quickstarts/vscode.md), [Cline](https://docs.crakseo.com/quickstarts/cline.md), [Gemini CLI](https://docs.crakseo.com/quickstarts/gemini-cli.md), [Grok](https://docs.crakseo.com/quickstarts/grok.md) and [Muse](https://docs.crakseo.com/quickstarts/muse.md).

A remote connection does not require a marketplace listing. Registry names are distribution identifiers, not a claim of directory approval.

## Verify without spending

```text theme={null}
Use CrakSEO get_api_credit_balance to report my balance and dataCallsEnabled. Do not buy credits or make a paid call.
```

## Tools

| Tool | What it does | Price per call |
| - | - | - |
| `check_google_rankings` | Check Google rankings for a domain | TBD (placeholder) |
| `get_google_serp` | Google SERP results | TBD (placeholder) |
| `get_bing_serp` | Bing SERP results | TBD (placeholder) |
| `get_ai_overview_sources` | Google AI Overview sources | TBD (placeholder) |
| `check_google_maps_rankings` | Google Maps rankings | TBD (placeholder) |
| `get_keyword_search_volume` | Keyword search volume, CPC and difficulty | TBD (placeholder) |
| `find_keyword_ideas` | Find keyword ideas | TBD (placeholder) |
| `get_keyword_difficulty` | Keyword difficulty | TBD (placeholder) |
| `check_backlinks` | Check backlinks | TBD (placeholder) |
| `get_referring_domains` | Referring domains | TBD (placeholder) |
| `get_backlink_anchors` | Backlink anchor texts | TBD (placeholder) |
| `get_ranked_keywords` | Ranked keywords for a domain | TBD (placeholder) |
| `find_competitor_keywords` | Find competitor keywords (keyword gap) | TBD (placeholder) |
| `find_competitor_domains` | Find competitor domains | TBD (placeholder) |
| `run_seo_site_audit` | SEO site audit for pages | TBD (placeholder) |
| `get_page_speed_scores` | Lighthouse and Core Web Vitals | TBD (placeholder) |
| `get_google_business_profile` | Google Business Profile and reviews summary | TBD (placeholder) |
| `check_chatgpt_brand_mentions` | ChatGPT brand mentions | TBD (placeholder) |
| `check_perplexity_brand_mentions` | Perplexity brand mentions | TBD (placeholder) |
| `get_api_credit_balance` | API credit balance | Free |

> [!NOTE]
>
> Tool names, titles and parameters on this page match the server's `tools/list` response, which stays authoritative. Example values are placeholders, not real measurements. Prices marked TBD are set at launch on [API credits](https://docs.crakseo.com/pricing/api-credits.md).

### `check_google_rankings`

**Check Google rankings for a domain.** Check Google rankings: the live Google position and ranking URL of a domain for up to 10 keywords in one country, with the top competing domains. Costs API credits per keyword.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `domain` | `string` | Yes | Domain or URL, for example example.com. Protocol and www are ignored. |
| `keywords` | `string[]` | Yes | Up to 10 keywords to check, one live Google search each. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `location` | `string` | No | Optional exact DataForSEO location name for city-level results, for example "Austin,Texas,United States". Overrides country. |
| `device` | `"desktop" \| "mobile"` | No | Device to emulate. Default `desktop`. |
| `depth` | `integer` | No | How deep to look for the domain, 10 to 100 results. Default `30`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_google_rankings",
    "arguments": {
      "domain": "example.com",
      "keywords": [
        "best running shoes"
      ],
      "country": "US"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "domain": "example.com",
    "rankings": [
      {
        "keyword": "best running shoes",
        "position": 7,
        "url": "https://example.com/running-shoes/",
        "topDomains": [
          "competitor.example"
        ]
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_google_serp`

**Google SERP results.** Google SERP API: live Google search results for any keyword, country and device, with organic positions, titles, URLs, SERP features and AI Overview sources. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `keyword` | `string` | Yes | Search query exactly as a user would type it. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `location` | `string` | No | Optional exact DataForSEO location name for city-level results, for example "Austin,Texas,United States". Overrides country. |
| `device` | `"desktop" \| "mobile"` | No | Device to emulate. Default `desktop`. |
| `depth` | `integer` | No | How many results to fetch, 10 to 100. Each extra page of 10 costs more. Default `10`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_google_serp",
    "arguments": {
      "keyword": "seo mcp server",
      "country": "US",
      "depth": 10
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "keyword": "seo mcp server",
    "totalResults": 0,
    "features": [
      "organic",
      "people_also_ask"
    ],
    "organic": [
      {
        "position": 1,
        "title": "Example result title",
        "url": "https://example.com/page",
        "domain": "example.com",
        "description": "Snippet text as shown on the results page."
      }
    ],
    "aiOverview": {
      "present": false,
      "text": null,
      "references": []
    }
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_bing_serp`

**Bing SERP results.** Bing SERP API: live Bing search results for any keyword and country, with organic positions, titles and URLs. Bing results also power DuckDuckGo and other engines. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `keyword` | `string` | Yes | Search query exactly as a user would type it. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `location` | `string` | No | Optional exact DataForSEO location name for city-level results, for example "Austin,Texas,United States". Overrides country. |
| `device` | `"desktop" \| "mobile"` | No | Device to emulate. Default `desktop`. |
| `depth` | `integer` | No | How many results to fetch, 10 to 100. Default `10`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_bing_serp",
    "arguments": {
      "keyword": "keyword research api",
      "country": "US"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "keyword": "keyword research api",
    "features": [
      "organic"
    ],
    "organic": [
      {
        "position": 1,
        "title": "Example result title",
        "url": "https://example.com/page",
        "domain": "example.com",
        "description": "Snippet text."
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_ai_overview_sources`

**Google AI Overview sources.** AI Overview sources: whether Google shows an AI Overview for a keyword, its text, every page it cites, and whether a given domain is cited. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `keyword` | `string` | Yes | Search query exactly as a user would type it. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `location` | `string` | No | Optional exact DataForSEO location name for city-level results, for example "Austin,Texas,United States". Overrides country. |
| `device` | `"desktop" \| "mobile"` | No | Device to emulate. Default `desktop`. |
| `domain` | `string` | No | Optional domain to check for a citation, for example example.com. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_ai_overview_sources",
    "arguments": {
      "keyword": "how to submit a sitemap to google",
      "country": "US",
      "domain": "example.com"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "keyword": "how to submit a sitemap to google",
    "present": true,
    "text": "AI Overview text, truncated.",
    "references": [
      {
        "title": "Example source title",
        "url": "https://example.com/guide",
        "domain": "example.com"
      }
    ],
    "domainCited": true
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `check_google_maps_rankings`

**Google Maps rankings.** Google Maps rankings: the local results for a keyword in a city, with rank, rating, review count, category and address, and the position of a given business. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `keyword` | `string` | Yes | Search query exactly as a user would type it. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `location` | `string` | Yes | Exact DataForSEO location name of the city, for example "Austin,Texas,United States". |
| `business` | `string` | No | Optional business name or domain to find in the results. |
| `depth` | `integer` | No | How many map results to fetch, 10 to 100. Default `20`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_google_maps_rankings",
    "arguments": {
      "keyword": "plumber",
      "location": "Austin,Texas,United States",
      "business": "Example Plumbing"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "keyword": "plumber",
    "location": "Austin,Texas,United States",
    "businessPosition": 4,
    "results": [
      {
        "position": 1,
        "title": "Competitor listing",
        "domain": "competitor.example",
        "rating": 4.8,
        "reviews": 0,
        "category": "Plumber",
        "address": "Example address"
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_keyword_search_volume`

**Keyword search volume, CPC and difficulty.** Keyword search volume, CPC and difficulty for up to 200 keywords in any country: monthly Google searches, cost per click, competition, keyword difficulty, intent and the last 12 months trend. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `keywords` | `string[]` | Yes | Up to 200 keywords. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_keyword_search_volume",
    "arguments": {
      "keywords": [
        "seo mcp"
      ],
      "country": "US"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "keywords": [
      {
        "keyword": "seo mcp",
        "searchVolume": 0,
        "cpc": 0,
        "competition": 0,
        "keywordDifficulty": 0,
        "intent": "commercial",
        "trend": [
          {
            "month": "2026-09",
            "searchVolume": 0
          }
        ]
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `find_keyword_ideas`

**Find keyword ideas.** Keyword ideas: related keywords for up to 20 seed keywords with search volume, CPC, difficulty and intent, sorted by search volume. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `seeds` | `string[]` | Yes | Up to 20 seed keywords that describe the topic. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `limit` | `integer` | No | How many ideas to return, 10 to 500. Default `100`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "find_keyword_ideas",
    "arguments": {
      "seeds": [
        "trail running shoes"
      ],
      "country": "US",
      "limit": 10
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "ideas": [
      {
        "keyword": "trail running shoes for women",
        "searchVolume": 0,
        "cpc": 0,
        "competition": 0,
        "keywordDifficulty": 0,
        "intent": "commercial"
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_keyword_difficulty`

**Keyword difficulty.** Keyword difficulty: how hard it is to rank organically in Google for up to 500 keywords, scored 0 to 100. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `keywords` | `string[]` | Yes | Up to 500 keywords. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_keyword_difficulty",
    "arguments": {
      "keywords": [
        "serp api"
      ],
      "country": "US"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "keywords": [
      {
        "keyword": "serp api",
        "keywordDifficulty": 0
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `check_backlinks`

**Check backlinks.** Backlink checker: total backlinks, referring domains, domain rank, spam score and the strongest backlinks (one per domain) for any domain or URL. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `target` | `string` | Yes | Domain (example.com) or full page URL ([https://example.com/page](https://example.com/page)) to analyze. |
| `limit` | `integer` | No | How many top backlinks to list, 1 to 100. Default `25`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_backlinks",
    "arguments": {
      "target": "example.com",
      "limit": 1
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "target": "example.com",
    "summary": {
      "rank": 0,
      "backlinks": 0,
      "referringDomains": 0,
      "referringMainDomains": 0,
      "brokenBacklinks": 0,
      "spamScore": 0
    },
    "backlinks": [
      {
        "from": "https://referrer.example/post",
        "to": "https://example.com/",
        "anchor": "example anchor",
        "dofollow": true,
        "domainRank": 0,
        "firstSeen": "2026-01-15"
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_referring_domains`

**Referring domains.** Referring domains: the domains linking to a domain or URL, with their rank, backlink count, spam score and first-seen date, strongest first. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `target` | `string` | Yes | Domain (example.com) or full page URL ([https://example.com/page](https://example.com/page)) to analyze. |
| `limit` | `integer` | No | How many referring domains to list, 1 to 500. Default `100`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_referring_domains",
    "arguments": {
      "target": "example.com",
      "limit": 1
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "target": "example.com",
    "totalCount": 0,
    "domains": [
      {
        "domain": "referrer.example",
        "rank": 0,
        "backlinks": 0,
        "spamScore": 0,
        "firstSeen": "2026-01-15"
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_backlink_anchors`

**Backlink anchor texts.** Backlink anchor texts: the anchors used in links to a domain or URL, with backlink and referring-domain counts per anchor. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `target` | `string` | Yes | Domain (example.com) or full page URL ([https://example.com/page](https://example.com/page)) to analyze. |
| `limit` | `integer` | No | How many anchors to list, 1 to 500. Default `100`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_backlink_anchors",
    "arguments": {
      "target": "example.com",
      "limit": 1
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "target": "example.com",
    "totalCount": 0,
    "anchors": [
      {
        "anchor": "example anchor",
        "backlinks": 0,
        "referringDomains": 0
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_ranked_keywords`

**Ranked keywords for a domain.** Ranked keywords: every Google keyword a domain or URL ranks for in one country, with position, ranking URL, search volume, difficulty and estimated traffic, highest traffic first. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `target` | `string` | Yes | Domain (example.com) or full page URL ([https://example.com/page](https://example.com/page)) to analyze. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `limit` | `integer` | No | How many keywords to return, 10 to 1000. Default `100`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_ranked_keywords",
    "arguments": {
      "target": "example.com",
      "country": "US",
      "limit": 10
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "target": "example.com",
    "totalCount": 0,
    "keywords": [
      {
        "keyword": "example keyword",
        "position": 3,
        "url": "https://example.com/page",
        "searchVolume": 0,
        "keywordDifficulty": 0,
        "estimatedTraffic": 0
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `find_competitor_keywords`

**Find competitor keywords (keyword gap).** Competitor keywords: keywords a competitor domain ranks for in Google that your domain does not, with search volume, difficulty and the competitor's position. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `competitor` | `string` | Yes | Competitor domain, for example competitor.com. |
| `yourDomain` | `string` | Yes | Your domain, for example example.com. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `limit` | `integer` | No | How many keywords to return, 10 to 1000. Default `100`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "find_competitor_keywords",
    "arguments": {
      "competitor": "competitor.example",
      "yourDomain": "example.com",
      "limit": 10
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "competitor": "competitor.example",
    "yourDomain": "example.com",
    "keywords": [
      {
        "keyword": "example keyword",
        "searchVolume": 0,
        "keywordDifficulty": 0,
        "competitorPosition": 4,
        "competitorUrl": "https://competitor.example/page"
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `find_competitor_domains`

**Find competitor domains.** Competitor domains: the domains competing with a domain in Google organic search, with shared keywords, average position and estimated traffic. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `domain` | `string` | Yes | Domain or URL, for example example.com. Protocol and www are ignored. |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `limit` | `integer` | No | How many competitors to return, 5 to 100. Default `20`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "find_competitor_domains",
    "arguments": {
      "domain": "example.com",
      "country": "US",
      "limit": 5
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "domain": "example.com",
    "competitors": [
      {
        "domain": "competitor.example",
        "sharedKeywords": 0,
        "avgPosition": 0,
        "organicKeywords": 0,
        "estimatedTraffic": 0
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `run_seo_site_audit`

**SEO site audit for pages.** SEO site audit: on-page and technical SEO checks for up to 5 pages, with status code, on-page score, title, meta description, H1, canonical, word count, links, load time and every failed check. Costs API credits per page.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `urls` | `string[]` | Yes | Up to 5 page URLs to audit. |
| `javascript` | `boolean` | No | Render JavaScript before auditing (slower, costs more). Default `false`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run_seo_site_audit",
    "arguments": {
      "urls": [
        "https://example.com/"
      ]
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "pages": [
      {
        "url": "https://example.com/",
        "statusCode": 200,
        "onpageScore": 0,
        "title": "Example home page",
        "description": null,
        "h1": [
          "Welcome"
        ],
        "canonical": "https://example.com/",
        "wordCount": 0,
        "internalLinks": 0,
        "externalLinks": 0,
        "loadTimeMs": 0,
        "failedChecks": [
          "no_description"
        ]
      }
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_page_speed_scores`

**Lighthouse and Core Web Vitals.** Page speed and Core Web Vitals: Lighthouse performance, SEO, accessibility and best-practices scores for a page, with LCP, CLS, TBT and FCP. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `url` | `string` | Yes | Absolute public http(s) URL of the page. |
| `mobile` | `boolean` | No | Test the mobile experience (true) or desktop (false). Default `true`. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_page_speed_scores",
    "arguments": {
      "url": "https://example.com/",
      "mobile": true
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "url": "https://example.com/",
    "scores": {
      "performance": 0,
      "seo": 0,
      "accessibility": 0,
      "bestPractices": 0
    },
    "vitals": {
      "lcp": "0.0 s",
      "cls": "0",
      "tbt": "0 ms",
      "fcp": "0.0 s",
      "speedIndex": "0.0 s"
    }
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_google_business_profile`

**Google Business Profile and reviews summary.** Google Business Profile lookup: a business's Google profile with rating, review count, rating distribution, category, address, phone, website and whether it is claimed. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `business` | `string` | Yes | Business name as it appears on Google, optionally with the city, for example "Joe's Pizza Brooklyn". |
| `country` | `string` | No | Two-letter country code of the search market, for example US, GB, DE or IN. Default `US`. |
| `language` | `string` | No | Language code of the search market, for example en, de or pt-BR. Default `en`. |
| `location` | `string` | No | Optional exact DataForSEO location name for city-level results, for example "Austin,Texas,United States". Overrides country. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_google_business_profile",
    "arguments": {
      "business": "Example Plumbing Austin"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "found": true,
    "business": {
      "title": "Example Plumbing",
      "category": "Plumber",
      "address": "Example address",
      "phone": null,
      "website": "https://example.com/",
      "rating": 4.7,
      "reviews": 0,
      "ratingDistribution": {
        "1": 0,
        "2": 0,
        "3": 0,
        "4": 0,
        "5": 0
      },
      "claimed": true
    }
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `check_chatgpt_brand_mentions`

**ChatGPT brand mentions.** ChatGPT brand mentions: ask ChatGPT (with web search) a buyer's question and report whether it mentions your brand, which sources it cites, and whether your domain is cited. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `prompt` | `string` | Yes | The question a buyer would ask, for example "best seo tools for agencies". |
| `brand` | `string` | Yes | Brand name to look for in the answer. |
| `domain` | `string` | No | Optional brand domain to look for among cited sources. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_chatgpt_brand_mentions",
    "arguments": {
      "prompt": "best trail running shoes",
      "brand": "Example",
      "domain": "example.com"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "prompt": "best trail running shoes",
    "brand": "Example",
    "engine": "chatgpt",
    "mentioned": false,
    "domainCited": false,
    "answer": "Answer text, truncated.",
    "citedUrls": [
      "https://competitor.example/review"
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `check_perplexity_brand_mentions`

**Perplexity brand mentions.** Perplexity brand mentions: ask Perplexity a buyer's question and report whether it mentions your brand, which sources it cites, and whether your domain is cited. Costs API credits per call.

* Price per call: TBD (placeholder)
* Annotations: read-only, idempotent
* Limits: Results are cached for 24 hours. Failed calls are free.

| Parameter | Type | Required | Description |
| - | - | - | - |
| `prompt` | `string` | Yes | The question a buyer would ask, for example "best seo tools for agencies". |
| `brand` | `string` | Yes | Brand name to look for in the answer. |
| `domain` | `string` | No | Optional brand domain to look for among cited sources. |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_perplexity_brand_mentions",
    "arguments": {
      "prompt": "best trail running shoes",
      "brand": "Example",
      "domain": "example.com"
    }
  }
}
```

```json structuredContent theme={null}
{
  "result": {
    "prompt": "best trail running shoes",
    "brand": "Example",
    "engine": "perplexity",
    "mentioned": false,
    "domainCited": false,
    "answer": "Answer text, truncated.",
    "citedUrls": [
      "https://competitor.example/review"
    ]
  },
  "billing": {
    "channel": "credits",
    "chargedMicros": 0,
    "chargedUsd": 0,
    "cacheHit": false,
    "balanceMicros": 0
  }
}
```

### `get_api_credit_balance`

**API credit balance.** API credit balance: prepaid credits left for SEO data calls, amount spent, whether spending is suspended, and the per-call pricing rule. Free; no supplier call.

* Price per call: Free
* Annotations: read-only, idempotent
* Limits: Free; reads the wallet only.

| Parameter | Type | Required | Description |
| - | - | - | - |

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_api_credit_balance",
    "arguments": {}
  }
}
```

```json structuredContent theme={null}
{
  "availableMicros": 0,
  "availableUsd": 0,
  "spentMicros": 0,
  "frozen": false,
  "dataCallsEnabled": true,
  "pricing": {
    "creditMarkup": 0,
    "minimumPerCallUsd": 0
  }
}
```

## Errors

| Code | Meaning | What to do |
| - | - | - |
| `insufficient_credits` | The API credits wallet can't cover the call's maximum price. | Add credits at [https://crakseo.com/app/indexing/credits](https://crakseo.com/app/indexing/credits), then retry the same call. The failed call isn't charged. |
| `forbidden` | The connection doesn't have the scope this tool needs, for example `seo-data:read` or `console:write`. | Reconnect and grant the scope named in the message, or use an API key that has it. |
| `not_connected` | Google Search Console or Bing Webmaster Tools isn't connected, or no connected property covers the URL. | Open the connect link in the message and sign in with the account that owns the property. |
| `invalid_input` | A parameter is missing or out of range. | Read the message, which names the field, fix the argument and retry. |
| `confirmation_required` | A paid indexing submission doesn't have the account owner's approval for this exact quote. | `submit_indexing_urls` returns `status: "needs_confirmation"` with a `confirmationUrl`. Send the owner there to approve, then retry with the same `quoteId` and `idempotencyKey`. The agent can't approve spend. |
| `wallet_frozen` | API credit spending is suspended on this account after a refund or dispute. | Contact [support@crakseo.com](mailto:support@crakseo.com). |
| `budget_exceeded` | The account's daily API credit spending limit, or the service's daily data budget, is used up. | Retry tomorrow. |
| `disabled` | SEO data calls aren't switched on for this deployment yet. | Use the free Search Console and URL indexing tools meanwhile. `get_api_credit_balance` reports `dataCallsEnabled`. |
| `supplier_unavailable` | The data supplier couldn't be reached or is rate limiting. | Retry later. Failed data calls are free. |
| `supplier_unknown` | The data supplier didn't answer in time or sent an unreadable response. | Retry later. Failed data calls are free. |
| `supplier_error` | The data supplier refused the request or returned no data. | Check the arguments (for example the location name) and retry. Failed data calls are free. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.