---
title: "Index monitoring for a site"
method: GET
path: "/v1/sites/{site}/search/index"
tags: ["gsc"]
---

# Index monitoring for a site

`GET /v1/sites/{site}/search/index`

## Request

- Base URL: `https://frontshelf.io/api`
- URL: `https://frontshelf.io/api/v1/sites/{site}/search/index`
- Auth: HTTP bearer

Which of the pages Frontshelf tracks (the latest crawl's pages plus those with impressions in 90 days, under the primary property) Google has, and why not, from Google's stored URL Inspection answers. On a paid site `index_summary` carries `tracked`, `checked`, `by_state`, `at_risk` (indexed, not crawled by Google in 90 days: a tendency), `first_checked_not_indexed`, `revisit` (observed re-check intervals, never a schedule), the capacity, a stop or refusal, `scope` (a path-prefix property leaves pages unchecked: said) and `sentences`; `history` counts today's tracked pages per day by what Google last said over `range`. Without the plan (index) `index_summary` is the free `counted` state and `history` is null. A part the cap stopped is `{state: too_large, sentence}`. Next: gsc_index_pages_list for each page and why it is not on Google.

## Path parameters

- `site` string, required: Site ID (site_…), origin (https://example.com), or bare domain, resolved server-side; the response carries the canonical ID.

## Query parameters

- `source_id` string: One of the site's Search Console properties (ssrc_…, from gsc_sources_list). Omit for the site's primary property.
- `filter` object: Narrow the rows: query and page as lists of {op: contains | equals | regex | not_contains | not_equals | not_regex, values} (values ORed, conditions ANDed, RE2 patterns); country {mode: include | exclude, codes} as lower-case ISO 3166-1 alpha-3; device {mode, devices: desktop | mobile | tablet}; segments [{id, mode}]; brand: branded | non_branded (needs brand terms); presets: question, long_tail; daily_position_max. Default: nothing narrowed.
  - `query` object[]
    - `op` 'contains' | 'equals' | 'regex' | 'not_contains' | 'not_equals' | 'not_regex', required
    - `values` string[], required
  - `page` object[]
    - `op` 'contains' | 'equals' | 'regex' | 'not_contains' | 'not_equals' | 'not_regex', required
    - `values` string[], required
  - `country` object
    - `mode` 'include' | 'exclude', required
    - `codes` string[], required
  - `device` object
    - `mode` 'include' | 'exclude', required
    - `devices` string[], required
  - `segments` object[]
    - `id` string, required
    - `mode` 'include' | 'exclude', required
  - `brand` 'branded' | 'non_branded'
  - `presets` string[]
  - `daily_position_max` number
- `range` union: The days the history covers: a word (7d, 3m, last:90, 2026-01-01..2026-01-31) or its object ({preset}, {last_days: n}, {start, end}). Default 28d.
  - string
  - object
    - `preset` 'yesterday' | '7d' | '14d' | '28d' | '3m' | '6m' | '12m' | '16m' | 'this_month' | 'last_month' | 'this_quarter' | 'last_quarter' | 'ytd' | 'all', required
  - object
    - `last_days` integer, required
  - object
    - `start` string, required
    - `end` string, required

## Response `200`

Index monitoring for a site

- object
  - `summary` string, required: The answer in one or two sentences, with the numbers it rests on.
  - `warnings` string[], required: What limits this answer (a cap, a read that was cut short). Empty when nothing does.
  - `next_actions` object[], required: What to call next, best first. Follow them.
    - `capability` string, required: What to call next: a capability.
    - `arguments` object, required: Its arguments, complete; pass them as they are.
    - `instruction` string, required: What to do, written to you.
  - `site_id` string, required: The site's canonical id.
  - `source_id` string, required: The property the answer is from (ssrc_…).
  - `index_summary` union, required
    - object
      - `state` 'ready', required
      - `scope` object, required
        - `property` string, required
        - `kind` 'domain' | 'url_prefix', required
        - `partial` boolean, required
        - `sentence` string, nullable, required: Said when a path-prefix property leaves pages unchecked.
      - `tracked` integer, required
      - `checked` integer, required
      - `by_state` object, required
      - `at_risk` integer, required: Indexed pages Google has not crawled in 90 days: a tendency, never a prediction.
      - `first_checked_not_indexed` integer, required: First checked with success in the last 14 days and not on Google: a fact about our checks, never a publication date.
      - `revisit` object, nullable, required: Observed re-check intervals among pages checked twice in 30 days, never a schedule.
        - `median_days` number, required
        - `p90_days` number, required
        - `intervals` integer, required
        - `pages_sampled` integer, required
        - `window_days` integer, required
        - `sentence` string, required
      - `capacity_per_day` integer, nullable, required
      - `stopped_since` string, nullable, required
      - `refusal` 'not_permitted', nullable, required
      - `first_check` string, nullable, required
      - `sentences` string[], required: The summary strip's lines, in order.
    - object
      - `state` 'counted', required: A site without the plan: the free counts.
      - `tracked` integer, required
      - `indexed` integer, required
      - `not_indexed` integer, required
      - `not_yet` integer, required
      - `sentence` string, required
    - object
      - `state` 'too_large', required
      - `sentence` string, required
  - `history` union, required: Null on a site without the plan.
    - object
      - `state` 'ready', required
      - `tracked` integer, required
      - `days` object[], required
        - `date` string, required
        - `by_state` object, required
      - `sentence` string, required
    - object
      - `state` 'too_large', required
      - `sentence` string, required

## Other responses

- `400`: SEARCH_SPEC_INVALID, VALIDATION_FAILED
- `401`: UNAUTHENTICATED
- `402`: BILLING_REQUIRED
- `403`: SCOPE_DENIED
- `404`: SITE_NOT_FOUND, NOT_FOUND
- `409`: AMBIGUOUS_SITE, SEARCH_NOT_CONNECTED, AGENT_STOPPED
- `503`: DEPENDENCY_UNAVAILABLE

---

[API](https://skmtc.dev/frontshelf/apis/frontshelf-api.md) · [All operations](https://skmtc.dev/frontshelf/apis/frontshelf-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frontshelf/apis/frontshelf-api/revisions/ce3602d26c7c?raw)
