DomainLens

Guides

Google Search Console API: Endpoints, Access, and Quotas

The Search Console API exposes four surfaces: search analytics, URL inspection, sitemaps, and site management. Each has a different quota and a different blind spot.

Check your site before you start fixing

Run a fresh DomainLens audit and use the report as your priority list.

Run a free SEO audit

Search Console API endpoints

The split matters when planning a dashboard. Performance data and index status come from different endpoints whose quotas differ by three orders of magnitude, so you cannot inspect every URL you can report on. Design around that gap from the start rather than discovering it at 429.

APIAnswersMain limit
Search AnalyticsClicks, impressions, CTR, position by dimension16-month window; rows withheld below a threshold
URL InspectionIndex status and canonical for one URLRoughly 2,000 URLs per day per property
SitemapsList, submit, and delete sitemapsReflects submission, not indexing outcome
SitesList, add, and remove propertiesRequires ownership to modify

Search Console API access and authentication

The property identifier trips people up more than the auth flow. A domain property is addressed as sc-domain:example.com and must be URL-encoded in the request path, while a URL-prefix property is addressed by its full URL including the scheme.

  • OAuth 2.0 for anything acting on a person's behalf, including internal tools where a human grants access once and you store the refresh token.
  • A service account for unattended jobs. Add its email as a user on the property first — unlike the Indexing API, plain read access is enough for reporting.
  • Scopes: webmasters.readonly for reporting, webmasters when submitting sitemaps or managing properties.
  • Property identity is exact. A domain property and a URL-prefix property for the same site are different resources returning different data.
A minimal Search Analytics query
POST https://searchconsole.googleapis.com/webmasters/v3/sites/
     sc-domain%3Aexample.com/searchAnalytics/query
Authorization: Bearer <access_token>

{
  "startDate": "2026-07-01",
  "endDate": "2026-07-31",
  "dimensions": ["page", "query"],
  "rowLimit": 25000,
  "startRow": 0
}

# Paginate with startRow until fewer than rowLimit rows return.

Search Console API row limits and data gaps

Totals in the interface rarely match the sum of API rows, and the API is not wrong. Google withholds rows below a privacy threshold, so long-tail queries disappear individually while still counting toward the aggregate. The more dimensions you request, the more rows fall below that threshold and the wider the gap grows.

Fresh data also lags. The last two to three days keep moving after you first read them, so a daily job that treats yesterday as final will under-report permanently. Re-fetch a trailing window instead of appending once and moving on.

Using the URL Inspection API at scale

A stored history turns a one-off reading into a monitor, which is where this endpoint earns its cost — a canonical that silently flips after a template change is invisible in any single check. Combine it with indexability debugging when an alert fires, and read the fields themselves in the URL Inspection guide.

  1. 1Decide which URLs are worth a daily inspection — the quota is far smaller than most sitemaps.
  2. 2Prioritise by business value and by recent change, rather than inspecting alphabetically.
  3. 3Store coverageState, the Google-selected canonical, and the last crawl time on every run so you can detect drift.
  4. 4Alert on transitions that matter: indexed to not indexed, and a declared canonical diverging from the selected one.
  5. 5Back off on 429 responses. Bursting past the per-minute limit costs the rest of the window.

What the Search Console API cannot return

Build around these gaps rather than against them. Most useful internal tooling combines Search Console for index and query data, CrUX for field performance, and a crawler for the on-page facts Google never reports back — because the API describes Google's conclusions, never the page that produced them.

  • Why a page is not indexed, beyond the coverage state string — there is no explanation field.
  • Whether a manual action exists. That lives only in the interface.
  • Core Web Vitals field data. Use the CrUX API for that instead.
  • Backlinks. The links report is not exposed through the API at all.
  • Anything about a property your credentials do not cover.

How DomainLens contributes

The API tells you what Google concluded; it never tells you what on the page caused it. DomainLens supplies that half — crawled status codes, directives, canonical tags, and markup — so an alert from your integration has something concrete to diagnose against. For the reports themselves see the Search Console audit guide.

Why do Search Console API totals differ from the UI?
Rows below Google's privacy threshold are withheld individually but still counted in aggregates. The difference grows with every dimension you add to the query.
How far back does Search Console API data go?
Sixteen months. Export continuously if you need longer history, because there is no way to recover data once it falls outside the window.
Can I submit URLs for indexing through the Search Console API?
No. Sitemap submission is available, but there is no bulk indexing request. The separate Indexing API covers only job postings and livestreams.
Does a service account need Owner access?
Not for reading. Add it as a user with read access; ownership is only required for actions such as managing properties or submitting sitemaps.

Related resources