Checking index status via an API
Published
An index-check API takes a list of URLs, looks each one up in Google, and returns which are indexed, which are not, and which could not be checked. With IndexChex v1 you POST up to 10,000 URLs to /api/v1/index-check/jobs, poll the job, then GET its report once the status is completed.
Why check over an API
Search Console's URL Inspection tool covers only properties you have verified, one URL at a time. Backlinks live on other people's sites, and a link-building campaign can produce thousands of them. An index-check API answers the question "is this URL in Google?" for a whole list at once and returns machine-readable results that a script, spreadsheet or reporting job can act on. The method behind such tools in general is explained on the checker site's index checking via API page.
The examples below use the IndexChex v1 interface. IndexChex checks each URL against live Google search results, so the answer reflects what Google currently shows rather than a cached database. Its weekly measurements on recurring URL sets put the checker at about ~96% accuracy on average (as of October 2026).
Step 1: create the check job
POST /v1/index-check/jobs with a JSON body:
| Field | Type | Required | Rules |
|---|---|---|---|
urls | array of strings | yes | 1 to 10,000 non-empty strings; whitespace is trimmed |
name | string | no | Up to 255 characters |
curl -X POST https://indexchex.com/api/v1/index-check/jobs \
-H "Authorization: $INDEXCHEX_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name": "October link audit",
"urls": ["https://example.org/post-1", "https://example.org/post-2"]}'
The reply is HTTP 202:
{
"job_id": 90314,
"status": "pending",
"total_urls": 2,
"checked_urls": 0,
"indexed_count": 0,
"not_indexed_count": 0,
"name": "October link audit",
"queued_at": "2026-10-08T10:02:44+00:00"
}
Each URL costs 1 credit, deducted when the job is created. If the balance is short the request fails with HTTP 422 and a message stating how many credits were needed and how many are available.
Step 2: wait for completion
GET /v1/index-check/jobs/{run} returns counters and a status that moves from pending through processing to completed:
{
"job_id": 90314,
"status": "processing",
"total_urls": 2,
"checked_urls": 1,
"indexed_count": 1,
"not_indexed_count": 0,
"failed_count": 0,
"progress_percent": 50,
"completed_at": null
}
There are no webhooks, so the client polls. Interval and back-off choices are covered in polling job status.
Step 3: read the report
GET /v1/index-check/jobs/{run}/report returns the URL lists once the job is complete:
{
"job_id": 90314,
"status": "completed",
"total_urls": 2,
"checked_urls": 2,
"indexed_count": 1,
"not_indexed_count": 1,
"failed_count": 0,
"indexed_links": ["https://example.org/post-1"],
"unindexed_links": ["https://example.org/post-2"],
"failed_links": [],
"completed_at": "2026-10-08T10:06:19+00:00"
}
Python: check and wait
import os, time, requests
API = "https://indexchex.com/api"
H = {"Authorization": os.environ["INDEXCHEX_API_KEY"], "Accept": "application/json"}
def check_index(urls, name=None, every=20):
r = requests.post(f"{API}/v1/index-check/jobs",
json={"urls": urls, "name": name}, headers=H, timeout=30)
r.raise_for_status()
job_id = r.json()["job_id"]
while True:
s = requests.get(f"{API}/v1/index-check/jobs/{job_id}", headers=H, timeout=30)
s.raise_for_status()
if s.json()["status"] == "completed":
break
time.sleep(every)
rep = requests.get(f"{API}/v1/index-check/jobs/{job_id}/report", headers=H, timeout=30)
rep.raise_for_status()
return rep.json()
report = check_index(["https://example.org/post-1", "https://example.org/post-2"])
print(len(report["indexed_links"]), "indexed")
For production code add the status handling from handling API errors rather than calling raise_for_status() on everything.
Reading the three lists
| List | Meaning | Typical action |
|---|---|---|
indexed_links | Google currently shows the URL | Record the date; re-check on a schedule |
unindexed_links | The lookup completed and the URL was not found | Inspect the page for noindex, robots.txt or canonical issues, then resubmit |
failed_links | The lookup could not complete | Check again later; do not count as unindexed |
Keeping the third list separate is the point of the design. Merging failed lookups into "not indexed" inflates the miss rate and leads to paying for submissions that were never needed.
From check to resubmission
The usual loop takes unindexed_links, filters out pages that cannot be indexed for on-page reasons, and passes the rest to the submission endpoint in submitting URLs via an API. Submissions can also carry a checker value so the follow-up check is scheduled automatically. Lists above 10,000 URLs are split as shown in rate limits and batching.
Related
The general case for tools that combine submission and checking is in what backlink indexer software is. The backlink indexer API overview compares how other vendors expose checks, and the IndexChex entry summarises its API at account level.
FAQ
Why are some URLs in failed_links instead of unindexed_links?
A URL is listed as failed when its lookup could not complete. That says nothing about whether Google has indexed it, so failed URLs should be checked again rather than treated as unindexed.
Can I fetch the report before the job finishes?
No. Until the status is completed the report endpoint returns HTTP 422 with the message "Report not ready. Check status and retry later."
Is the order of URLs in the report the same as in my request?
Each list is ordered by result, which follows the order the URLs were stored for the job. Match URLs by value rather than by position.
Does an index check need the Search Console property?
No. The check looks at public Google results, so it works for URLs on sites you do not own, which is the normal case for backlinks.
Terms used on this page
Sources
- IndexChex API reference
- Google Search Central: Page indexing report
- The IndexChex index checker is about 96% accurate. IndexChex weekly measurement on recurring URL sets, October 2026.
Cite this entry
IndexChex. (2026, October 8). Checking index status via an API. backlinkindexersoftware.com. https://backlinkindexersoftware.com/checking-index-status-via-api/