indexing.io

Check & monitor · Search Console API access

Google Search Console API: the Google URL Inspection API, GSC API quotas and limits

Almost everyone who finds the Search Console API arrives with the same plan: read index status for every URL, spot the pages that are not indexed, then push those pages back to Google automatically. The first two-thirds of that plan work beautifully. The last third does not exist.

Submit · monitor coverage · official methods only

Coverage Console
White-hat · official methods
Presets

Ready to check coverage

Paste a sitemap to sweep every URL for index status, then submit the missing ones through the official Google Indexing API and Bing IndexNow.

Not indexed Discovered, not indexed Indexed ✓

Coverage

indexed

Submitting via

Avg time to index

URLs submitted

Now eligible

Live, interactive · sample data · official methods only

Official Google Indexing API · Bing IndexNow · verified sitemaps · no spam, no PBNs

In short

The Google Search Console API is a free read-and-manage API covering four resources: Search Analytics (query performance data), Sitemaps (list, get, submit, delete), Sites (list, add, get, delete) and URL Inspection (index.inspect). Google publishes a per-site quota of 1,200 QPM for Search Analytics and 2,000 QPD plus 600 QPM for URL Inspection. It cannot submit a URL for indexing. The only write operation that touches indexing at all is submitting a sitemap; individual URL submission lives in the separate Indexing API, which Google restricts to JobPosting and BroadcastEvent pages.

Last updated August 2026

The API is genuinely good at what it does. Search Analytics gives you up to 25,000 rows per request of real query and page data with filters the web interface will not offer you. URL Inspection returns the same verdict you see in the Search Console UI, including the canonical Google actually selected, one URL per call. Sitemaps lets you submit and audit sitemap files programmatically. It is free, it is stable, and the documentation is accurate.

What it will not do is take a list of URLs and ask Google to index them. That function is not throttled or gated behind a quota you can raise. It was never built. Google's Indexing API is a separate product with a separate scope, officially limited to job postings and broadcast events, and the Request Indexing button in the Search Console interface has no API equivalent at all. This page covers what each endpoint actually returns, the exact quotas Google publishes, how the auth works, and what to do about the gap at the end.

GOOGLE API INDEXNOW SITEMAPS COVERAGE RE-CRAWL

Official methods only

White hat · no spam, no PBNs

Why it works

What your team gets with search console api access

Four resources, one API

Search Analytics, Sitemaps, Sites and URL Inspection. Three of them read, one of them submits sitemaps, and none of them submits a URL for indexing.

Quotas you will actually hit

URL Inspection is capped at 2,000 queries per day per property. On a 40,000-page site that is a twenty-day pass over your own catalog.

The gap at the end

We read the same status the API reads, then resubmit the fixable pages through the official channels that do accept submissions: the Indexing API where eligible, IndexNow, and your sitemaps.

What it handles

Submitted, monitored and fixed, automatically

Indexing submits your URLs through the official Google Indexing API, Bing IndexNow and clean XML sitemaps, watches coverage across both engines, and flags any page that drops out with a plain-English reason so you can resubmit and get it back.

  • Reads index status for every URL without you building an API client
  • Works around the 2,000 per day inspection quota with scheduled passes
  • Shows the canonical Google selected, not the one you declared
  • Alerts you when a previously indexed URL drops out of the index
  • Resubmits eligible pages through official Google and Bing channels
COVERAGE Live

Not indexed yet

/blog/seo-guide-2026 is discovered but not indexed

crawled, not indexed resubmit

thin content signal, queued for re-crawl via the Indexing API

1 Submitted to Google Indexing API OK
2 Pinged Bing via IndexNow OK
Google + Bing · one status Official · white hat

Why Indexing

One place to submit, monitor and fix coverage

Not a black-hat indexer that risks your site, not a free checker that only tells you the bad news. Indexing unifies official submission and live coverage monitoring, the white-hat way, across Google and Bing.

Submits the official way

Bulk-submit through the Google Indexing API, Bing IndexNow and clean XML sitemaps. We speed discovery and re-crawl using methods the engines support, never spam, PBNs or black-hat tricks.

Monitors coverage live

You do not refresh a search bar one URL at a time. Indexing watches which pages are in Google and Bing, catches anything that drops out, and tracks time-to-index across your whole site.

Diagnoses and resubmits

Every non-indexed page comes with a plain-English reason, then auto-resubmits through the official API so it gets another shot. Google still decides, but nothing waits in the dark.

At a glance

Search Console API quotas, published by Google

Every limit below is from Google published API limits page, checked August 2026. QPD is queries per day, QPM queries per minute, QPS queries per second.

Resource Per site Per user Per project What it does
Search Analytics (query) 1,200 QPM 1,200 QPM 30,000,000 QPD and 40,000 QPM Returns clicks, impressions, CTR and position by query, page, country, device, date, hour or search appearance. Up to 25,000 rows per request.
URL Inspection (index.inspect) 2,000 QPD and 600 QPM Covered by the all-other-resources limit 10,000,000 QPD and 15,000 QPM Returns what Google knows about one URL: index verdict, selected canonical, last crawl, discovery source. Read only.
Sitemaps (list, get, submit, delete) Covered by the all-other-resources limit 20 QPS and 200 QPM 100,000,000 QPD The only write path that touches indexing. Submits a sitemap file, lists submitted sitemaps, deletes one.
Sites (list, add, get, delete) Covered by the all-other-resources limit 20 QPS and 200 QPM 100,000,000 QPD Manages which properties are in the authenticated account. Adding a site does not verify it.
Submitting a single URL for indexing Not available Not available Not available No endpoint exists. The Request Indexing button in the Search Console UI has no API equivalent.

What each Search Console API endpoint actually returns

The API surface is smaller than most people expect. Google documents four resources and a total of ten methods, and once you have seen them there is nothing hidden behind a flag.

Search Analytics has exactly one method, a POST to searchanalytics.query. You pass a date range, a list of dimensions and optional filters, and you get rows back. The dimensions available are country, device, page, query, searchAppearance, date and hour. rowLimit accepts a value from 1 to 25,000 and defaults to 1,000, which is the single most common reason a first script appears to be missing data: the default truncated it. startRow lets you page through anything larger. The type parameter selects the surface, with web as the default and discover, googleNews, news, image and video as the alternatives, so Discover data is available here even though it looks separate in the interface. dataState is worth knowing about too: final is the default and gives you finalized data only, all includes fresh data that may still shift, and hourly_all gives an hourly breakdown with partial data.

URL Inspection has one method as well, index.inspect, described by Google as returning "Information about the provided URL in the Google index." It takes one URL and one property, and it returns the same object the web interface renders: the coverage verdict, the user-declared canonical alongside the Google-selected canonical, the last crawl time, how the URL was discovered, and any mobile usability or structured data findings. One URL per call, always.

  • searchanalytics.query: performance rows, up to 25,000 per request
  • sitemaps.list, sitemaps.get: what sitemaps are submitted and how each is processing
  • sitemaps.submit: submits a sitemap file for a site
  • sitemaps.delete: removes a sitemap from the property
  • sites.list, sites.get, sites.add, sites.delete: property management
  • urlInspection.index.inspect: index status for one URL

The 2,000 per day URL Inspection quota is the real constraint

Google publishes a per-site quota of 2,000 queries per day and 600 per minute for URL Inspection. The per-project ceiling is 10,000,000 QPD, which sounds generous until you notice the limit that binds is the per-site one, and properties are what you own.

Do the arithmetic against a real catalog. A 5,000-page site can be inspected end to end in under three days. A 40,000-page ecommerce site takes twenty days for a single complete pass, by which point the first URLs you checked are three weeks stale. A 200,000-page marketplace cannot be inspected comprehensively at all, not once a quarter, not once a year.

There is no form to request more. The quota is not listed as adjustable, and unlike the Indexing API there is no documented process for asking. This is the point at which most teams stop trying to inspect everything and start sampling: inspect the pages that matter commercially, inspect anything that changed, inspect a rotating slice of the long tail, and accept that a full picture is not available through this endpoint. That sampling strategy is exactly what a monitoring tool automates, and it is why we exist alongside the API rather than instead of it.

Why the Search Console API cannot submit URLs for indexing

This is the question that brings most developers to the documentation, so it deserves a direct answer: there is no method for it. Not a restricted one, not a quota-limited one. The resource list contains Search Analytics, Sitemaps, Sites and URL Inspection, and none of them accept a URL to be indexed.

The Request Indexing button that exists in the Search Console web interface is a UI-only feature. It is rate limited in practice to roughly ten to twelve URLs per day per property, and Google has never exposed it programmatically. Scripting the interface to click it is a terms-of-service problem and a fragile one, and the automation tools that claim to do it at scale are usually doing something else entirely.

The Indexing API is a genuinely separate product with its own scope. Google restricts it to pages carrying JobPosting or BroadcastEvent structured data, with a default quota of 200 URL notifications per day per project. Publishers outside those two categories are not the intended audience, and Google is explicit about that.

What is left is the honest set: submit sitemaps (which the Sitemaps API does support), keep your internal linking sound so discovery works, use IndexNow for the engines that accept it, and use the Indexing API where your content genuinely qualifies. None of those force a page into the index. Anyone selling you an API that does is selling you something Google does not offer.

Authentication: OAuth versus a service account

The API uses standard Google OAuth 2.0, which means your script needs credentials tied to a Google account that has access to the property. For anything running on a schedule, a service account is the right choice: create one in a Google Cloud project, enable the Search Console API on that project, take the service account email address, and then add that email as a user on the property inside Search Console.

That last step is the one that trips people up. Creating the service account and enabling the API grants nothing by itself. Search Console permissions are per property and are granted inside Search Console, not inside Cloud. Until you add the service account email under Settings then Users and permissions, every call returns a permission error that looks like a credentials problem and is not.

Full permission is required for the URL Inspection endpoint, while restricted users can read Search Analytics. Domain properties and URL-prefix properties are separate entities to the API, and a URL you inspect has to belong to the property you name in the request. If you have both a domain property and a prefix property for the same site, they carry separate quotas.

  • Create a Google Cloud project and enable the Search Console API on it
  • Create a service account and download its JSON key
  • In Search Console, add the service account email under Users and permissions
  • Grant Full permission if you need URL Inspection, Restricted is enough for Search Analytics
  • Use the property URL exactly as Search Console lists it, including the sc-domain: prefix for domain properties

What the API costs, and what people mean when they ask

The Search Console API is free. There is no billing tier, no paid quota, no per-call charge, and enabling it in a Google Cloud project does not put a card on file. When people search for Search Console API pricing what they usually want to know is whether the quotas can be bought up, and the answer is no for URL Inspection.

The costs that do show up are engineering costs. A script that pulls Search Analytics into a spreadsheet is an afternoon. A system that inspects a large catalog on a rotating schedule, stores history so you can see what changed, handles token refresh and quota backoff, notices when a URL drops out of the index, and then does something useful about it is a maintained internal product. Plenty of teams build it. Plenty of teams build it, use it for four months, and then nobody owns it after the person who wrote it changes jobs.

Common failure modes in a first Search Console API integration

Most of the pain in this API is not in the API. It is in the four or five specific mismatches that produce confusing errors.

  • Only 1,000 rows come back: rowLimit defaults to 1,000. Set it to 25,000 and page with startRow.
  • Permission denied on every call: the service account email was never added as a user inside Search Console.
  • URL Inspection returns permission denied specifically: the account has Restricted rather than Full permission.
  • Property not found: a domain property must be addressed as sc-domain:example.com, not https://example.com/.
  • Numbers do not match the interface: the default dataState is final, while the interface may be showing fresh data.
  • Quota exhausted mid-afternoon: URL Inspection is 2,000 per day per property and resets on Google schedule, not yours.

When the API is the right answer and when it is not

Build on the API directly when you want performance data. Search Analytics is generous, the quota is effectively unlimited for normal use at 1,200 QPM per site, and pulling your own query and page data into a warehouse or a spreadsheet is a well-trodden path with good libraries in Python, PHP and Node.

Think harder before building on URL Inspection. The endpoint is fine; the quota makes comprehensive coverage impossible above a few thousand URLs, and the endpoint reads only, so whatever you build stops at the moment it finds a problem. You get a list of pages that are not indexed and no mechanism to act on it.

That gap is the whole reason this tool exists. We read the same index status, on a schedule sized around the same published quotas, keep the history so you can see what changed rather than only what is true today, and then push the pages that qualify back out through the channels that genuinely accept submissions. We cannot force Google to index anything, and we say so on every page. What we can do is make sure you know what is in, what fell out, and why, without you maintaining an API client to find out.

Keep reading

Good questions

Questions about search console api access

It is a free Google API that exposes four Search Console resources programmatically: Search Analytics for performance data, Sitemaps for submitting and auditing sitemap files, Sites for property management, and URL Inspection for the index status of a single URL. It uses OAuth 2.0 and requires the calling account to have permission on the property.
Google publishes 1,200 QPM per site and per user for Search Analytics, with 30,000,000 QPD per project. URL Inspection is capped at 2,000 QPD and 600 QPM per site, with 10,000,000 QPD per project. All other resources are limited to 20 QPS and 200 QPM per user, and 100,000,000 QPD per project.
No. There is no endpoint for it. The API can submit a sitemap through the Sitemaps resource, but it cannot ask Google to index an individual URL. The Request Indexing button in the Search Console interface has no API equivalent, and the separate Indexing API is officially restricted to pages with JobPosting or BroadcastEvent structured data.
Nothing. The API is free, there is no paid tier, and enabling it in a Google Cloud project does not require billing. The quotas are fixed rather than purchasable, so paying more will not raise the 2,000 per day URL Inspection cap on a property.
Google publishes 2,000 queries per day and 600 queries per minute per property, with a much higher per-project ceiling of 10,000,000 per day. Because the binding limit is per property, a site with 40,000 URLs needs roughly twenty days to complete one full inspection pass.
Create a service account in a Google Cloud project, enable the Search Console API on that project, and download the JSON key. Then open Search Console, go to Settings and Users and permissions, and add the service account email address as a user on the property. Grant Full permission if you need URL Inspection. Creating the service account alone grants no access.

Explore more

More ways teams get every page indexed

Stop guessing. Get every page indexed and keep it that way.

Bulk-submit your URLs through the official Google and Bing channels, monitor coverage, and resubmit anything that drops out, automatically. White hat only, so we speed discovery without ever guaranteeing what Google chooses to index.

See pricing

Google Indexing API · Bing IndexNow · sitemaps · coverage monitoring · official methods only