Skip to content

Google Indexing API Submission

Google Indexing API Submission With Confirmed Results

The Request Indexing button in Search Console takes one URL at a time. SearchAnalysis.io runs Google Indexing API submission for whole batches inside the 200-a-day quota. It sends each URL to the Indexing API as a URL_UPDATED notification. Every request to Google for indexing then waits on proof from Search Console URL Inspection.

Join the waitlist See the product overview

Invite-only today. Pricing is announced at launch.

Google Indexing APICloud project quota · resets 00:00 UTC
184of 200 today
HIGHexample.com/jobs/senior-editorQueued
HIGHexample.com/pricingQueued
NORMALexample.com/guides/canonical-tagsQueued
NORMALexample.com/blog/spring-releaseQueued
LOWexample.com/archive/2019Queued
NORMALexample.com/docs/webhooksQueued
Over quota? URLs wait for the next UTC window and keep their place.100 per batch call

Definition

What Google Indexing API Submission Is

Google Indexing API submission is a URL_UPDATED notification sent to Google's Indexing API that asks Google to crawl a URL. Google documents the API for pages with JobPosting or BroadcastEvent structured data and allows 200 publish requests a day per Google Cloud project, with up to 100 URLs per batch request. An accepted notification means Google received it and says nothing about index status.

The Request Indexing button in the Search Console URL Inspection tool handles one URL per click. The URL Inspection API returns a verdict and a coverageState for a URL in a verified property. SearchAnalysis.io pairs each Indexing API notification with those inspections on the same URL row.

200a day

Publish requests per projectThe Google Indexing API allows 200 publish requests a day per Google Cloud project.

10minutes

Until the first checkSearchAnalysis.io inspects a submitted URL about 10 minutes after it is sent.

7days

Between rechecksSearchAnalysis.io inspects an Indexed URL again every 7 days while the site is connected.

Old way, new way

Three Ways to Request Indexing From Google

Three routes ask Google to crawl a list of URLs. Here is what each one asks of you.

Indexing API Submission in SearchAnalysis.io

SearchAnalysis.io
  • Paste, upload a CSV, import a sitemap or call the submission REST API.
  • Overflow waits for the next UTC window and keeps its place.
  • High, Normal and Low priorities order your own queue.
  • Accepted shows Processing; only a URL Inspection PASS shows Indexed.

What is inside

Inside the Indexing API Workflow

Five parts carry a URL from your list to a confirmed result.

Indexing API Quota Queue

Counts publish requests against 200 a day and holds the rest for the next UTC window.

200 a day

Indexing API Quota Queue

URL Inspection Confirmation

Confirms indexing through the URL Inspection API, the only row that turns green.

Verdict PASS

URL Inspection Confirmation

How it works

How a URL Moves Through the Indexing API Queue

Five steps take a URL from your list to a verified result.

  1. Connect Google and Pick a Property

    Connect Google with OAuth and pick the matching Search Console property, domain (sc-domain:) or URL-prefix.

  2. Submit URLs Your Way

    Paste, upload a CSV, import a sitemap, or use the REST API or MCP tools. Set High, Normal or Low priority per URL.

  3. Read the Eligibility Label

    Each URL shows Eligible, Best-effort or Unknown from its JobPosting or BroadcastEvent structured data.

  4. Send Inside the Quota

    Workers send URL_UPDATED in batch requests of up to 100, never past 200 a day. Overflow waits for the next UTC window.

  5. Confirm With URL Inspection

    Checks run at about 10 minutes, +15 minutes, +1 hour, +6 hours, then every 24 hours, up to 6 checks. PASS turns the URL Indexed.

Inspection schedule for one URLSearch Console URL Inspection
0 minSent to Indexing API and IndexNow
+10 minFirst URL Inspection
+15 minSecond inspection
+1 hThird inspection
+6 hFourth inspection
+24 hDaily, up to 6 checks
7 daysRecheck after Indexed
example.com/docs/webhookscheck history
Oct 06 14:20Not indexedCrawled, currently not indexedrecheck
Sep 29 14:18IndexedSubmitted and indexedrecheck
Sep 22 14:21IndexedSubmitted and indexedrecheck
Sep 15 20:02IndexedSubmitted and indexedinspection
Sep 15 14:02ProcessingDiscovered, currently not indexedinspection
Deindex eventIndexed on Sep 15. The recheck on Oct 06 found it not indexed.
First inspectionAbout 10 minutesAfter submission
Confirmation ladderAbout 3 daysUp to 6 checks
Deindex watchEvery 7 daysOnce Indexed

Why it matters

Why Teams Queue Indexing API Requests Here

Google Indexing API submission advantages here are a quota you never overspend, a scope label on every URL, and a status Google confirmed.

Spend the Daily Quota on Pages That Matter

High priority goes first, and the 30-day dedup stops repeat pastes from spending quota twice. Set priority in the app or through the submission API with priority per URL.

Submission API with priority per URL

See Which Pages Fit Google's Documented Scope

Every URL shows Eligible, Best-effort or Unknown. Before you submit, the free indexability checker tests one page for blocks and redirects.

Free indexability checker

Trust Green Because Google Confirmed It

A URL turns Indexed only on a URL Inspection PASS. The Google index checker keeps every inspection in its check history.

Google index checker

Each URL gets a BING row too, through IndexNow submission for Bing, and deindex monitoring rechecks Indexed URLs every 7 days.

URL Inspection / sc-domain:example.comLive
https://example.com/pricingIndexed
verdict
PASS
coverageState
Submitted and indexed
robotsTxtState
ALLOWED
indexingState
INDEXING_ALLOWED
pageFetchState
SUCCESSFUL
googleCanonical
https://example.com/pricing
crawledAs
MOBILE
lastCrawlTime
2026-10-06T14:12:09Z
Check historynewest first
Oct 06 14:20IndexedSubmitted and indexed
Sep 29 14:18IndexedSubmitted and indexed
Sep 15 20:02IndexedSubmitted and indexed
Sep 15 14:02ProcessingDiscovered, currently not indexed
Sep 15 13:17ProcessingURL is unknown to Google

Picture pasting 300 new URLs on a quiet project. The first 200 go to Google today, the other 100 wait for the next UTC window in their place, and each one turns green only when Search Console returns PASS.

What we publish about limits

Where the Indexing API Stops

Google decides what it crawls and indexes. Nobody can guarantee indexing. These are the limits we show you up front.

Google's Documented Scope Is Narrow

The Indexing API is documented for JobPosting or BroadcastEvent pages. Most content sites have neither, so their URLs go out Best-effort.

The Quota Belongs to the Project

200 publish requests a day, shared across the Google Cloud project. Google states: "The quota may increase or decrease based on the document quality."

An Accepted Notification Stays Processing

HTTP 2xx means Google received the notification. SearchAnalysis.io shows Processing, never Indexed, until URL Inspection confirms.

“The Indexing API can only be used to crawl pages with either JobPosting or BroadcastEvent embedded in a VideoObject.”
Google Indexing API, quota and pricing documentation

Reference

Google Indexing API Rules and Limits

Every rule below comes from Google's Indexing API documentation or from how SearchAnalysis.io behaves around it. Rate limits and quotas are Google's defaults per project.

(Select a rule to read more)

The Indexing API's Documented Scope

GOOGLE RULESCOPE

The Indexing API's documented scope fits in one sentence on Google's quota and pricing page: "The Indexing API can only be used to crawl pages with either JobPosting or BroadcastEvent embedded in a VideoObject." That sentence names two structured data types. Every other kind of page sits outside the scope Google writes down.

What the Scope Means for Your URLs

  • A page with JobPosting structured data matches the documented scope. SearchAnalysis.io labels it Eligible.
  • A page with BroadcastEvent structured data matches the documented scope too, and it gets the same Eligible label.
  • A blog post, product page or landing page without either type falls outside the documented scope. SearchAnalysis.io labels it Best-effort and the submission proceeds best-effort.
  • A page the product could not read gets Unknown, and the label says exactly that.

Why Best-effort URLs Still Go Out

Most content sites carry no JobPosting or BroadcastEvent markup, so Best-effort is the normal label for them. SearchAnalysis.io sends the URL_UPDATED notification, shows the label beside the URL, and leaves the outcome to Google. You see the documented scope next to every URL you send, and you decide with that in view.

The confirmation comes from a separate channel. The Google index checker inspects the URL through Search Console and turns it Indexed only on a PASS verdict or an indexed coverage state. A Best-effort URL that Google indexes turns green the same way an Eligible one does.

The Indexing API Daily Publish Quota

GOOGLE RULEQUOTA

The Google Indexing API sets a default quota of 200 publish requests per day per Google Cloud project. Both URL_UPDATED and URL_DELETED notifications count as publish requests. The quota belongs to the project, so every site that sends through the same project draws from the same 200.

Default publish quota200 a dayShared across the whole Google Cloud project

How SearchAnalysis.io Spends the Quota

  1. Workers take URLs from your queue in priority order: High first, then Normal, then Low.
  2. Each URL sent to Google uses one publish request from the project's 200.
  3. When the day's quota is spent, the remaining URLs stay Queued and wait for the next UTC window.
  4. In the next window they go out in the same order, so a URL keeps its place in line.

SearchAnalysis.io respects the quota and never fights it. When the count reaches 200, sending stops for the day. A waiting URL shows Queued, the label for a URL that was received and is waiting for a worker.

You can read the remaining quota at any time. The REST API returns it from GET /api/v1/quota, and the MCP tool get_quota returns the same figures to an AI agent. The SearchAnalysis.io developer documentation describes both, and the public OpenAPI document lists the endpoint.

A list of 1,000 URLs on an idle project takes at least 5 UTC days of Indexing API quota, while the Search Console and IndexNow rows run on their own limits.

Indexing API Batch Requests of 100 URLs

GOOGLE RULEREQUESTS

An Indexing API batch request groups up to 100 URL notifications into one HTTP call. Batching cuts round trips between the sender and Google. Each notification inside the batch is still its own publish request, so a full batch of 100 uses half of the default daily quota.

UnitSize limitSet by
Indexing API batch requestUp to 100 URLsGoogle
Indexing API daily quota200 publish requests per projectGoogle
SearchAnalysis.io batchUp to 10,000 URLsSearchAnalysis.io
Batch page listing100 URLs per pageSearchAnalysis.io

Two meanings of the word batch meet here. Your submission in SearchAnalysis.io becomes a batch with its own page, an optional name and a source: web, API, MCP or scheduled scan. That batch holds up to 10,000 URLs. The Google batch request is the smaller unit the workers send, at most 100 URLs at a time and never past the day's quota.

A 10,000-URL batch in SearchAnalysis.io turns into many Google batch requests spread over many UTC days.

Retries Without Duplicates

Batches created through the submission REST API accept an Idempotency-Key header. A retry with the same key returns the original batch instead of creating a duplicate. That protects your quota when a CI job or an agent retries after a timeout. GET /api/v1/submissions/{batchId} returns the batch with per-URL, per-channel state.

URL_UPDATED and URL_DELETED Notification Types

GOOGLE RULENOTIFICATIONS

The Google Indexing API accepts two notification types, and both count against the daily publish quota. URL_UPDATED reports a new or changed URL. URL_DELETED reports a URL that was removed.

Notification typeCounts as a publish requestSent by SearchAnalysis.io
URL_UPDATEDYesYes, one per submitted URL
URL_DELETEDYesNo

Why SearchAnalysis.io Sends URL_UPDATED

Submission exists to get pages crawled and indexed, so each URL you add goes out as one URL_UPDATED notification on the GOOGLE_INDEXING channel. The same URL gets two more status rows: GOOGLE_SEARCH_CONSOLE for the URL Inspection confirmation, and BING for an IndexNow notification.

Duplicates and Filtered URLs

A URL already tracked on your account inside 30 days is skipped and reported, and it is not resent. That 30-day dedup keeps repeat pastes from spending quota twice on one page. URLs filtered out before sending show as Dropped, with the reason: a URL outside the site's domain, a duplicate, or an invalid format.

Pages That Leave Your Site

When a page drops out of your sitemap, sitemap monitoring marks it Removed in the page inventory and keeps its first seen and last seen dates. For URLs that were Indexed, the 7-day recheck keeps inspecting them, so a later not-indexed result shows up as an amber Not indexed deindex event.

The Indexing API getMetadata Call and Rate Limits

GOOGLE RULERATE LIMITS

The Google Indexing API has a read call next to its publish call. getMetadata returns what Google holds about the notifications sent for a URL, and it runs under its own per-minute limit. Google's quota page lists the defaults per project.

getMetadata requests180 a minuteDefault per project
All Indexing API endpoints380 a minuteDefault per project, across endpoints

These per-minute limits sit beside the daily publish quota of 200. A project can read notification metadata far more often than it can publish new notifications, and the URL Inspection API has separate limits again.

Where SearchAnalysis.io Gets Index Status

SearchAnalysis.io treats no Indexing API response as proof of indexing. For index status it calls the Search Console URL Inspection API, which returns a verdict, a coverageState, a robotsTxtState, the indexing state, the Google-selected canonical and the last crawl time. Those fields are stored with every inspection.

  • URL Inspection allows 2,000 inspections a day per property (site).
  • URL Inspection allows 600 inspections a minute per property.
  • Per project, Google allows 10,000,000 inspections a day and 15,000 a minute.
  • Transient errors (429, 5xx, network) retry after 30 minutes.

Each inspection becomes a row in the URL's check history with its time, its state (INDEXED, NOT_INDEXED or ERROR), its coverage state and its source. The Google index checker shows that history on the URL detail page.

Requesting More Indexing API Quota

GOOGLE RULEQUOTA

More Indexing API quota is Google's decision. The default is 200 publish requests a day per project, and Google's quota page states: "The quota may increase or decrease based on the document quality." The number can move in either direction, and Google is the one who moves it.

What Changes the Number

  • Google sets the default of 200 publish requests per day per project.
  • Google states the quota follows document quality, up or down.
  • Adding sites to the same project adds no quota, because the 200 is shared across the whole project.
  • SearchAnalysis.io cannot raise your quota. It reads what is left and plans the queue around it.

Getting More From the Quota You Have

  1. Mark the pages that matter most as High priority so they go out first.
  2. Let the 30-day dedup skip URLs you already sent.
  3. Check the eligibility label: Eligible pages match Google's documented scope.
  4. Send Bing traffic through IndexNow submission, which runs on a separate budget of 10,000 URLs a day per property.

Drip-feed submission is PLANNED. It will spread a batch over a number of days you choose. Today, the queue sends what the quota allows and holds the rest for the next UTC window.

Your scripts can watch the remaining quota through GET /api/v1/quota in the SearchAnalysis.io developer documentation, and an AI agent can ask the MCP tool get_quota.

What an Accepted Indexing API Notification Means

PRODUCT BEHAVIORSTATUS

An accepted Indexing API notification is an HTTP 2xx response from Google. It means Google received the URL_UPDATED notification. It does not confirm a crawl, and it does not confirm indexing. SearchAnalysis.io shows it as Processing with the note "ping accepted", and it never shows it as Indexed. The note tells you the ping arrived and nothing beyond that.

GOOGLE_INDEXING        Queued > Sending > Processing (ping accepted)
GOOGLE_SEARCH_CONSOLE  Queued > Sending > Processing > Indexed (verdict PASS)
BING                   Queued > Sending > Processing (accepted)
Status labelWhat it means
QueuedReceived, waiting for a worker
SendingA worker is sending it
ProcessingThe engine accepted it; inspection has not confirmed yet
IndexedVerified by URL Inspection
FailedAn error that needs a person; the error text is shown
DroppedFiltered out before sending
CancelledThe URL was cancelled

Green means verified and nothing else. Only the GOOGLE_SEARCH_CONSOLE row can turn green, and it does so when the URL Inspection verdict is PASS or the coverage state says indexed. At that moment SearchAnalysis.io sends a transactional email with the subject "Indexed: <url>". A failed send produces a "Submission failed: <url>" email with the error.

After a URL turns Indexed, it is inspected again every 7 days for as long as the site is connected. A later not-indexed result shows amber Not indexed, which deindex monitoring treats as a deindex event.

OAuth Access and Token Encryption for the Indexing API

PRODUCT BEHAVIORSECURITY

SearchAnalysis.io reaches the Google Indexing API and the Search Console URL Inspection API through Google OAuth. You add a site, connect Google with OAuth, and pick the matching Search Console property. Inspections need a verified property, so the property you pick is the one the confirmation comes from.

Property Types You Can Pick

  • A domain property, written as sc-domain: followed by your domain.
  • A URL-prefix property, written as the full address it starts with.

How Google Tokens Are Stored

StageWhat happens to the token
At restEncrypted with AES-256-GCM
At call timeDecrypted in memory for the request to Google
In plain text on diskNever; decryption happens only in memory

API keys for the SearchAnalysis.io REST API are separate from Google OAuth. You create bearer API keys in Settings. Your scripts, CI jobs and AI agents use those keys to submit URLs, and they never hold your Google tokens.

The remote MCP server at https://searchanalysis.io/mcp takes the same bearer API key. In Claude Code, you add it with one command and get six tools: list_properties, submit_urls, list_submissions, check_submission, check_url_index_status and get_quota.

claude mcp add --transport http searchanalysis https://searchanalysis.io/mcp

The SearchAnalysis.io privacy policy and terms of service describe how account data is handled.

Labels

Eligibility Labels

SearchAnalysis.io reads each page for the structured data named in Google's documented scope and shows one of three labels.

(Select a label to read more)

Eligible: JobPosting or BroadcastEvent Found

ELIGIBLESTRUCTURED DATA

Eligible is the Indexing API label SearchAnalysis.io gives a URL when its page HTML contains JobPosting or BroadcastEvent structured data. Those are the two types Google names in the Indexing API's documented scope, so an Eligible URL is the kind of page Google writes the API for.

What the Product Reads

  • The HTML of the page at the submitted URL.
  • The structured data inside that HTML.
  • A JobPosting type, or a BroadcastEvent type.
  • Finding either one sets the label to Eligible.

What Eligible Tells You

An Eligible URL matches Google's documented scope. Google still decides what it crawls and indexes, so an Eligible URL follows the same path as every other URL: Queued, Sending, Processing, and Indexed only after a URL Inspection PASS.

First confirmation checkAbout 10 minutesAfter submission, on the Search Console row

When your queue is longer than the day's quota, Eligible URLs are good candidates for High priority. They match the scope Google documents, and the 200 daily publish requests are shared across the project. The label sits on the URL detail page next to the per-channel status and the latest verdict fields from the Google index checker.

If an Eligible page later drops out of the index, the 7-day recheck shows it as amber Not indexed, the same way it treats any other URL. The label never changes how a URL is confirmed.

Best-effort: No Qualifying Structured Data

BEST-EFFORTSTRUCTURED DATA

Best-effort is the Indexing API label for a URL whose page HTML has no JobPosting or BroadcastEvent structured data. It is the normal label for most content sites: blogs, documentation, product pages and landing pages. Submission proceeds best-effort, which means the URL_UPDATED notification goes out and Google decides what happens next.

ChannelWhat happens for a Best-effort URL
GOOGLE_INDEXINGThe URL_UPDATED notification is sent inside the daily quota
GOOGLE_SEARCH_CONSOLEURL Inspection checks the URL on the normal schedule
BINGAn IndexNow notification is sent once your key file is verified

What to Do With Best-effort URLs

  1. Leave them in the queue. The label describes the page and records the documented scope beside it.
  2. Keep your sitemap current. Sitemap monitoring scans every 6 hours and can submit new URLs on its own.
  3. Watch the Search Console row. A PASS verdict turns the URL Indexed whatever its eligibility label says.
  4. Check pages that stay unconfirmed with the free indexability checker for blocks, redirects or thin content.

A URL that stays not indexed after the confirmation ladder keeps getting a daily fallback check. If Search Console reports "Crawled, currently not indexed", the guide to Crawled, currently not indexed covers what that reason means.

Best-effort does not change the status labels. The Google Indexing row still reads Processing once Google accepts the notification, and green still needs URL Inspection.

Unknown: Eligibility Could Not Be Determined

UNKNOWNSTRUCTURED DATA

Unknown is the Indexing API label for a URL whose eligibility SearchAnalysis.io could not determine. The product tried to read the page HTML for JobPosting or BroadcastEvent structured data and did not get an answer either way. The label reports that plainly and does not guess Eligible or Best-effort.

Checks Worth Running on an Unknown URL

The free indexability checker fetches one public URL as SearchAnalysisBot/1.0 and runs six checks, with a 10-second fetch timeout and a 2 MB page cap:

  1. Page loads: a non-2xx HTTP status fails.
  2. Redirects: it follows up to 5, and Google indexes the destination, so submit the destination.
  3. robots.txt: the Googlebot group wins over *, and the longest matching rule decides.
  4. Indexing directives: noindex or none in meta robots or X-Robots-Tag.
  5. Canonical: self-referencing passes, and pointing elsewhere or missing warns.
  6. Content: under about 100 words of visible text warns as thin.

Where the Answer Comes From

Eligibility and index status are separate. Whatever the label, the GOOGLE_SEARCH_CONSOLE row inspects the URL on its schedule and turns it Indexed on a PASS verdict. If the inspection reports a fetch problem, the stored coverageState and robotsTxtState explain it in Google's own words.

The indexability checker cannot tell whether a page is in Google. That needs Search Console URL Inspection on a verified property, which is what joining the SearchAnalysis.io waitlist gets you access to.

FAQ

Questions About the Google Indexing API

Google Indexing API Basics

What is the Google Indexing API?

The Google Indexing API is a Google interface that lets a program notify Google about URLs to crawl. Google documents it for pages with JobPosting or BroadcastEvent embedded in a VideoObject, with a default of 200 publish requests a day per project.

How many URLs can the Indexing API submit per day?

The Indexing API submits 200 URLs a day by default, one publish request each, shared across the Google Cloud project. SearchAnalysis.io holds anything over that for the next UTC window.

Early access

Get Early Access to Indexing API Submission

SearchAnalysis.io is invite-only today. Join the waitlist and invites go out from the list.

Invite-only. One email when your invite is ready.

Picture your next batch queued in priority order, each URL turning green when Search Console confirms it.

Waitlist members getwritten commitments

An Invite Before Public Launch

You get in before the public launch.

Launch Pricing Locked

Your launch price stays locked for as long as you stay subscribed. The price is announced at launch.

An Extended Free Trial

Its length is announced at launch.

Included in SearchAnalysis.ioshipped

Quota-Aware Indexing API Queue

Batch requests of up to 100, inside 200 a day, in priority order.

Eligibility Label per URL

Eligible, Best-effort or Unknown from structured data.

URL Inspection Confirmation

Indexed only on PASS, through the Google index checker.