# Semscraper

> Real Google and Google Maps SERPs for AI assistants: pixel positions, AI Overviews and sources.

- name: com.semscraper/semscraper
- version: 1.0.0
- connection class: R1 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.semscraper%2Fsemscraper
- tools: https://api.protogrid.dev/v1/servers/com.semscraper%2Fsemscraper/tools

**An agent can connect on its own if it already holds `SEMSCRAPER_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "semscraper": {
      "type": "http",
      "url": "https://mcp.semscraper.com/mcp",
      "headers": {
        "Authorization": "Bearer ${SEMSCRAPER_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${SEMSCRAPER_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-10d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 2 of 8 tools declare all four hints; missing: ai_overview_sources (destructiveHint, idempotentHint); list_searches (destructiveHint, idempotentHint); get_balance (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 2,889 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 5 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 2,889 tokens to load them all
- tool set hash: 372807c70b93e80aef09e194cc078ffc
- badge: [![protogrid quality](https://protogrid.dev/badge/com.semscraper/semscraper.svg)](https://protogrid.dev/servers/com.semscraper/semscraper)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.semscraper.com/mcp (streamable-http, auth api_key ${SEMSCRAPER_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (8)

- `ai_overview_sources`: Computes, on the server, which domains Google cites in the AI Overviews of searches already created (google_search IDs): for each domain, the number of keywords where it is cited, the number of mentions, the keywords and its best position on the page. Also returns how many searches have an AI Overview. Free. Best tool to answer "which sites does Google cite in its AI Overviews on these keywords": one small answer instead of every SERP. Based on source URLs, not on brand names.
- `get_balance`: Returns the balance of the Semscraper account, in euros. Free.
- `get_queue_status`: Returns how many searches of the account are pending, processing or done. Free. The account has its own queue: the robots serve accounts in turn, so a large batch flows through gradually.
- `get_serp_results`: Returns searches already created (google_search or google_maps), by their IDs (serp_...), e.g. the pending_ids of a previous call. Free: the searches were paid when created.
- `google_maps`: Collects the listings of a Google Maps search for one or more keywords, in the order Google Maps shows them, from a given place. Each listing comes with its rank, name (title), CID, category (type), address, website, rating, review count, opening status and the snippet shown. Use it for local SEO, local competition and market research. Paid from the account balance, same price as google_search. Returns rating and review count, not the full text of reviews.
- `google_search`: Collects the real Google results page (SERP) for one or more keywords, rendered in a real browser, and returns every block (organic results, ads, local pack, People Also Ask, AI Overview with its citations and sources...) with, for each item, its rank in its block (rank_type), its rank on the page (rank_serp), its Google page and its pixel position. Use it to know what Google actually shows for a query, in a given country, language, city and device. Paid from the account balance: about EUR 0.0003 per keyword for the first page, EUR 0.0002 per extra page. Takes about 30 seconds per keyword (about a minute for 10 pages); the tool waits for the results. Returns titles, snippets and URLs, not the full content of the pages.
- `list_google_versions`: Lists the supported Google versions as location / language pairs (186 Google domains, 117 languages), to pick valid location and language values. Free. Filter with a country domain, a code or a language name to keep the answer short.
- `list_searches`: Lists the searches of the account, most recent first (ID, engine, keyword, device, location, language, depth, geolocation, status, whether the results were already fetched, cost, creation date), without their results. Free. Covers every search made with the account, through this server or the API. Use it to find IDs (e.g. "the last 10 searches", "today's searches"), and whenever a google_search or google_maps call failed, timed out or lost its answer: the searches were probably created and paid already, so fetch them with get_serp_results instead of searching again.
