Google Indexing API: Who Can Use It, Quotas and Setup
What the Google Indexing API supports (JobPosting and livestream pages), the 200 per day quota, setup, a working Python request, and errors.
TL;DR: The Google Indexing API is a free Google endpoint that lets a site owner notify Google to crawl or remove a URL, but Google only supports it for pages with JobPosting or BroadcastEvent (livestream) structured data. The default quota is 200 publish requests per day per project. For ordinary pages such as blog posts, products and landing pages, use a sitemap and Search Console's Request indexing instead.
The Google Indexing API is the https://indexing.googleapis.com/v3/urlNotifications:publish endpoint, which accepts a URL and a notification type (URL_UPDATED or URL_DELETED) and tells Google it may recrawl or drop that page. Google's Indexing API documentation states the limit in its first paragraph: "The Indexing API can only be used to crawl pages with either JobPosting or BroadcastEvent embedded in a VideoObject." It also says that Google's spam policies apply to content submitted through it and that you must not "circumvent our submission limits, such as by using multiple accounts." Many popular tutorials and WordPress plugins still present it as a way to get any page indexed fast. That is not what Google supports, and the quota page, last updated in July 2026, still says the same.
Who should use the Google Indexing API?
Use the Indexing API when your pages are short lived and carry the supported markup:
- Job boards and careers pages with
JobPostingstructured data, where a listing must appear while it is open and disappear when it closes. - Livestream pages with
BroadcastEventembedded in aVideoObject, where the event matters only around its start time.
Do not use it for blog posts, ecommerce products, programmatic landing pages, or documentation. For those, Google's ask Google to recrawl page names exactly two methods: the URL Inspection tool for a few URLs and a sitemap for many. Our guide on how to request indexing in Google covers both.
What are the Indexing API quotas and limits?
Google's quota and pricing page sets these defaults per Google Cloud project:
- Publish requests: 200 per day, counting both
URL_UPDATEDandURL_DELETED. The day resets at midnight Pacific Time. - Metadata (read only) requests: 180 per minute.
- All endpoints combined: 380 requests per minute.
- Batches: up to 100 calls in one HTTP request to
https://indexing.googleapis.com/batch, each part no larger than 1MB. Quota is still counted per URL, so a batch of 10 uses 10. - Price: free.
The default quota is "for initial API onboarding and testing". To go beyond it, and to get approval for JobPosting or BroadcastEvent pages, you submit Google's quota request form, and Google notes the quota "may increase or decrease based on the document quality."
How do you set up the Indexing API?
Setup follows Google's prerequisites guide and takes about 15 minutes:
- Create or pick a project in the Google Cloud console.
- Enable the Web Search Indexing API (listed as "Indexing API") for that project.
- Create a service account under IAM & Admin > Service accounts. Skip the optional roles step.
- Create a key for the service account and choose JSON. Store the file as a secret; anyone with it can use your quota.
- Add the service account as an Owner in Search Console. Open the verified property, go to Settings > Users and permissions, and add the service account's email (it ends in
iam.gserviceaccount.com) with Owner permission. A Full user is not enough for this API. - Authenticate with the scope
https://www.googleapis.com/auth/indexing.
How do you send an Indexing API request?
A request is an authenticated POST with Content-Type: application/json and a body naming one URL. In Python, with the official google-auth library installed (pip install google-auth requests), the whole call is six lines:
from google.oauth2 import service_accountfrom google.auth.transport.requests import AuthorizedSessioncreds = service_account.Credentials.from_service_account_file("key.json", scopes=["https://www.googleapis.com/auth/indexing"])session = AuthorizedSession(creds)r = session.post("https://indexing.googleapis.com/v3/urlNotifications:publish", json={"url": "https://example.com/jobs/42", "type": "URL_UPDATED"})print(r.status_code, r.json())
An HTTP 200 response returns a UrlNotificationMetadata object. Google's wording is careful: a 200 "means that Google may try to recrawl this URL soon." It is not a promise of a crawl or of indexing.
To remove a page, send the same request with "type": "URL_DELETED". Google requires the URL to return 404 or 410, or carry <meta name="robots" content="noindex">, before you send it.
To check what you sent, call GET https://indexing.googleapis.com/v3/urlNotifications/metadata?url= followed by the URL encoded address. The response shows latest_update and latest_remove with a notify_time. Google states this "doesn't tell you when Google indexes or removes a URL; it only returns whether you successfully submitted a request."
What do common Indexing API errors mean?
- 403 "Permission denied. Failed to verify the URL ownership." The service account is not an Owner of the Search Console property that contains the URL, or the URL belongs to a different property (for example
http://vshttps://, orwwwvs non-www on a URL prefix property). - 403 "Indexing API has not been used in project ... or it is disabled." Enable the API in the same Cloud project as the key.
- 429 "Quota exceeded". You passed 200 publish requests for the day or a per minute limit. Wait for the midnight Pacific reset or request more quota.
- 400 Invalid argument. Usually a missing
type, a relative URL, or the wrong content type.
Is it safe to use the Indexing API for normal pages?
Google's documentation makes three points that matter here. The API "can only be used" for the two supported page types. Spam policies apply to anything submitted. And quota depends on document quality. Sending blog or product URLs through it is outside what Google supports, and tools that rotate many service accounts to raise the 200 per day limit are doing the exact thing Google tells you not to do. Even when such pages get crawled, a crawl is not indexing: the page still has to pass Google's quality bar. If pages are stuck, the fixes are in our guides to crawled currently not indexed and discovered currently not indexed.
What should you use instead for regular pages?
Use these supported channels:
- XML sitemap with accurate
<lastmod>, submitted in Search Console. Google's sitemap documentation says it useslastmodwhen it is consistently accurate and ignores<priority>and<changefreq>. Check yours with our sitemap validator. - URL Inspection > Request indexing for a handful of important URLs, within the daily quota per property.
- Internal links from pages Google already crawls often.
- IndexNow for Bing, Yandex, Naver, Seznam and Yep: up to 10,000 URLs per request per the IndexNow documentation. Google does not take part. See what IndexNow can and cannot do.
IndexLinks uses only these official channels for sites you own: IndexNow, your Search Console, Baidu push, and the AI crawlers through its Discover hub, with a receipt for every verified crawl within 24 hours. It guarantees a crawl, not indexing, and it does not send normal pages through the Indexing API. Run the free site check on the IndexLinks homepage to see what might be blocking yours.
FAQ
Is the Google Indexing API free? Yes. Google states that "all use of the Indexing API is available without payment."
How many URLs can I submit per day? 200 publish requests per project per day by default. Higher limits require Google's approval.
Does the Indexing API work for WordPress posts? Plugins can send the request, but Google only supports the API for JobPosting and livestream pages. Use a sitemap for posts.
Does a 200 response mean my page is indexed? No. It means Google received the notification and "may try to recrawl this URL soon." Check the result with the URL Inspection tool.
Can I use the Indexing API to remove pages? Yes, with URL_DELETED, after the page returns 404 or 410 or carries a noindex tag. It applies to the supported page types.
Use this information as a starting point, then verify the page-level evidence available to you.