URL_UPDATED Notification per URL
Sends one URL_UPDATED notification per submitted URL on its own status row.
Google Indexing API Submission
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.
Definition
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 routes ask Google to crawl a list of URLs. Here is what each one asks of you.
What is inside
Five parts carry a URL from your list to a confirmed result.
Sends one URL_UPDATED notification per submitted URL on its own status row.
Counts publish requests against 200 a day and holds the rest for the next UTC window.
Indexing API Quota QueueReads the page HTML for JobPosting or BroadcastEvent and labels the URL.
Structured Data Eligibility LabelConfirms indexing through the URL Inspection API, the only row that turns green.
URL Inspection ConfirmationAccepts batches of up to 10,000 URLs from scripts, CI jobs and AI agents.
Submission REST API and MCP ToolsHow it works
Five steps take a URL from your list to a verified result.
Connect Google and Pick a Property
Connect Google with OAuth and pick the matching Search Console property, domain (sc-domain:) or URL-prefix.
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.
Read the Eligibility Label
Each URL shows Eligible, Best-effort or Unknown from its JobPosting or BroadcastEvent structured data.
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.
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.
Why it matters
Google Indexing API submission advantages here are a quota you never overspend, a scope label on every URL, and a status Google confirmed.
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 URLEvery URL shows Eligible, Best-effort or Unknown. Before you submit, the free indexability checker tests one page for blocks and redirects.
Free indexability checkerA URL turns Indexed only on a URL Inspection PASS. The Google index checker keeps every inspection in its check history.
Google index checkerEach URL gets a BING row too, through IndexNow submission for Bing, and deindex monitoring rechecks Indexed URLs every 7 days.
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
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.”
Reference
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 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.
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 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.
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.
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.
| Unit | Size limit | Set by |
|---|---|---|
| Indexing API batch request | Up to 100 URLs | |
| Indexing API daily quota | 200 publish requests per project | |
| SearchAnalysis.io batch | Up to 10,000 URLs | SearchAnalysis.io |
| Batch page listing | 100 URLs per page | SearchAnalysis.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.
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.
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 type | Counts as a publish request | Sent by SearchAnalysis.io |
|---|---|---|
URL_UPDATED | Yes | Yes, one per submitted URL |
URL_DELETED | Yes | No |
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.
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.
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 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.
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.
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.
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.
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.
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.
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 label | What it means |
|---|---|
| Queued | Received, waiting for a worker |
| Sending | A worker is sending it |
| Processing | The engine accepted it; inspection has not confirmed yet |
| Indexed | Verified by URL Inspection |
| Failed | An error that needs a person; the error text is shown |
| Dropped | Filtered out before sending |
| Cancelled | The 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.
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.
sc-domain: followed by your domain.| Stage | What happens to the token |
|---|---|
| At rest | Encrypted with AES-256-GCM |
| At call time | Decrypted in memory for the request to Google |
| In plain text on disk | Never; 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/mcpThe SearchAnalysis.io privacy policy and terms of service describe how account data is handled.
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 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.
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.
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 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.
| Channel | What happens for a Best-effort URL |
|---|---|
| GOOGLE_INDEXING | The URL_UPDATED notification is sent inside the daily quota |
| GOOGLE_SEARCH_CONSOLE | URL Inspection checks the URL on the normal schedule |
| BING | An IndexNow notification is sent once your key file is verified |
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 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.
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:
*, and the longest matching rule decides.X-Robots-Tag.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
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.
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.
You request indexing in Google Search Console by inspecting a URL in the URL Inspection tool and clicking Request Indexing. The button handles one URL per click, so SearchAnalysis.io sends Indexing API notifications in batches instead.
You request indexing from Google for many URLs through the Indexing API, within 200 a day per project. SearchAnalysis.io queues a pasted list, CSV, sitemap import or API call in priority order and inspects each URL about 10 minutes after it is sent.
You submit a URL to Google with the Request Indexing button, a sitemap, or an Indexing API notification. Sitemaps are submitted in Search Console, through the Search Console API, or referenced in robots.txt.
An accepted Indexing API request means Google received the notification, and nothing more. SearchAnalysis.io shows it as Processing until the URL Inspection verdict is PASS.
SearchAnalysis.io sends URL_UPDATED notifications only, one per submitted URL. Both types count against the 200-a-day publish quota.
Early access
SearchAnalysis.io is invite-only today. Join the waitlist and invites go out from the list.
Picture your next batch queued in priority order, each URL turning green when Search Console confirms it.
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.
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.