Google Indexing API: what it actually covers

Officially, the Google Indexing API covers exactly two things: pages with JobPosting structured data, and pages with BroadcastEvent embedded in a VideoObject (livestreams). Google’s own documentation states that limit plainly. It is not a general-purpose “index my blog post” endpoint — despite an entire product category having been built on treating it as one.

Last updated 2026-07-28

What is the Google Indexing API?

It is a single HTTP endpoint that tells Google a specific URL has been created, updated or removed. You POST one URL at a time to urlNotifications:publish, authenticated with OAuth 2.0, as a verified owner of that site in Search Console.

The entire API surface that matters
POST https://indexing.googleapis.com/v3/urlNotifications:publish
Authorization: Bearer <oauth-token>
Content-Type: application/json

{
  "url": "https://example.com/page",
  "type": "URL_UPDATED"
}

type is either URL_UPDATED (created or changed) or URL_DELETED (removed). There is a companion read endpoint, urlNotifications/metadata, which tells you when Google last received a notification for a URL — note that this is notification state, not index state.

The required OAuth scope is https://www.googleapis.com/auth/indexing. The authenticated identity — a service account or a user — must be a verified owner of the property in Search Console. There is no way around that requirement, and it is the thing that stops the API being used to spam other people’s domains.

Which page types does Google officially support?

Two, and only two: pages with JobPosting markup, and pages with BroadcastEvent embedded in a VideoObject. Google’s documentation says the Indexing API can only be used to crawl pages with one of those two markup types.

That restriction is not a footnote or a soft recommendation — it is the stated scope of the product, and the quota-increase request form is explicitly for gaining approval to use the API for those two markup types.

Why this page is blunt about it. A lot of tools in this category quietly imply the Indexing API is a general fast-track to Google. It is not, and pretending otherwise sets customers up for a nasty surprise. Being accurate here matters more to us than sounding impressive.

Google Search Advocates have said repeatedly and publicly that site owners should stick to the documented use cases, and have warned that non-conforming use may simply stop working. That is not a theoretical risk: TagParrot, one of the better-known automated indexing services, shut down in 2024 after Google tightened enforcement of the API’s intended scope. Any product whose entire value depends on this endpoint working for ordinary pages is one policy change from being worthless.

What are the real quotas and limits?

The default is 200 publish requests per day per Google Cloud project, counting both URL_UPDATED and URL_DELETED. There are also per-minute ceilings: 180 requests per minute for read-only getMetadata calls, and 380 per minute across all endpoints. Use of the API is free of charge.

LimitDefaultScope
Publish requests per day200Per Google Cloud project
getMetadata requests per minute180Per Google Cloud project
All requests per minute380Per Google Cloud project
CostFree

The scoping detail that catches people out: the daily quota is per Google Cloud project — effectively per OAuth client — not per website. If you manage eight sites through one Cloud project, all eight share the same 200 submissions a day. Anyone running more than a couple of sites needs to think about allocation, not just volume.

The daily quota resets at midnight Pacific Time, and Google notes that newly granted quota can take up to 24 hours to take effect. Increases are requested through a form, and approval is tied to actually using the API for JobPosting or BroadcastEvent content.

There is no batch shortcut worth relying on here. The generic Google batch HTTP endpoint accepts multiple calls in one request, but each contained call still consumes quota — the 200/day ceiling is on notifications, not on HTTP round trips.

What does a 200 response actually mean?

It means Google received and accepted the notification. That is all. It is not confirmation that the page was crawled, and it is emphatically not confirmation that the page was indexed.

The gap between those three things is where most disappointment in this category comes from. A successful submission tells you the notification half of the job succeeded — the half you control. Whether Google then crawls the URL depends on crawl scheduling, and whether it indexes the page depends on its assessment of the content. Neither is exposed through this API.

If you want to know whether a URL is actually indexed, the Search Console URL Inspection tool and the Page indexing report are the only authoritative sources. And if a lot of your URLs are sitting in “Discovered — currently not indexed”, no amount of API submission will move them — that is a content verdict, not a discovery problem.

Service account or OAuth client — which should I use?

Both work. A service account is the path Google’s own documentation takes, and requires adding the service account’s email address as an owner of the property in Search Console. A desktop OAuth client authenticates as you, so it inherits the ownership you already have and needs no extra Search Console step.

The practical trade-off is where the credential lives. A service account is a long-lived key file, which is convenient for servers and awkward on a laptop. A user OAuth client is a short-lived token refreshed from a refresh token, which suits a desktop app.

The OAuth gotcha nobody documents well. If your OAuth consent screen is of type External and left in Testing status — which is what almost every individual ends up with, because publishing triggers Google verification for the sensitive indexing scope — then refresh tokens issued to it expire after seven days. You will be silently forced to re-authorise every week. A Google Workspace account can use an Internal consent screen and avoid this entirely. If your indexing automation mysteriously stops every Monday, this is why.

How do I set the Indexing API up?

Five steps, once, in about five minutes: create a Google Cloud project, enable the Indexing API in it, configure an OAuth consent screen, create a client credential, and confirm the identity is a verified owner in Search Console.

  1. 1Create a project in the Google Cloud Console. No billing account is required.
  2. 2Enable the Web Search Indexing API in that project.
  3. 3Configure the OAuth consent screen. Choose External and add your own Google address as a test user, or Internal if you have a Workspace account (see the seven-day token note above).
  4. 4Create the credential — a Desktop app OAuth client, or a service account if you are automating from a server.
  5. 5Verify the site in Search Console under the identity that will submit. Without verified ownership, every publish call returns a permission error.

Indexa walks through exactly this flow with screenshots at the Google setup guide.

How does Indexa use this API?

Indexa submits through your Google Cloud project and your OAuth client, so it spends your own 200-per-day quota rather than reselling someone else’s. It sends one URL_UPDATED notification per URL to the publish endpoint, tracks the daily budget across every site you have added, and stops cleanly when the budget is gone.

The concrete behaviour, since vague claims are not much use to anyone evaluating this:

  • One request per URL. Every submission is an individual POST to urlNotifications:publish with type: URL_UPDATED, with a 30-second timeout.
  • Your quota, budgeted across sites. Because the 200/day ceiling is per Cloud project and shared by all your sites, Indexa allocates it — evenly across sites with work to do, or by shares you set per site.
  • Never-submitted pages go first. The queue is ordered so brand-new URLs are submitted before re-submissions of changed pages, and retries come last.
  • Changed pages are re-submitted, within reason. When a URL’s lastmod moves in your sitemap it is re-queued, capped per site per day so one bulk edit cannot consume the whole budget.
  • Rate limits are respected, not fought. On a 429 or a network failure Indexa stops the run immediately, leaves the remaining URLs untouched, and retries later rather than burning quota against a closed door.
  • Failures are surfaced, not hidden. After three failed attempts a URL is flagged for you to look at rather than retried forever.
  • Credentials stay on your computer. Your OAuth client file and refresh token are stored locally with owner-only permissions, the token encrypted through your operating system’s secure storage (Keychain on macOS, Windows Credential Locker on Windows). There is no Indexa server in the submission path — your computer talks directly to Google.

Because the Google half of this is officially restricted, Indexa treats it as one of two channels rather than the whole product. The other is IndexNow, which has no such restriction and covers Bing, Yandex, Seznam, Naver and Yep. Indexa is $19 once with no subscription; it submits URLs, and it does not claim to guarantee indexing.

Frequently asked questions

Can I use the Google Indexing API for normal blog posts or product pages?

Google documents the API for JobPosting and BroadcastEvent pages only, and its Search Advocates have advised sticking to those documented use cases. Many site owners submit other page types anyway; that is outside the documented scope, may not have any effect, and could stop working. Treat it as best-effort, never as the foundation of your indexing strategy.

How many URLs a day can I submit to the Indexing API?

200 publish requests per day by default, counted per Google Cloud project rather than per site, and including both URL_UPDATED and URL_DELETED. Higher quota is requested through a Google form and is granted in connection with JobPosting or BroadcastEvent use.

Is the Google Indexing API free?

Yes. Google charges nothing for use of the Indexing API, and no billing account is needed on the Cloud project. What varies between tools is whether they let you use your own quota or resell access to theirs.

Does the Indexing API work for Bing?

No — it is a Google endpoint. Bing, along with Yandex, Seznam, Naver and Yep, uses the IndexNow protocol instead, which has no page-type restriction and much higher volume limits.

Stop hand-submitting URLs

Indexa reads your sitemaps every day and submits what changed — to Google’s Indexing API with your own Google Cloud project, and to Bing, Yandex, Seznam, Naver and Yep over IndexNow. It runs on your own computer; your credentials never leave it.

Get Indexa$19 once, no subscription $49 · 7-day free trial

Submitting a URL is not a guarantee that it will be indexed — that decision always rests with each search engine. What a submission tool controls is the notification half: making sure every engine knows about every page the day it is published or changed.

Keep reading