---
title: "Page Indexing Report via the Search Console API · GSC PAP"
source: https://gscpap.com/guides/page-indexing-report-api
updated: 2026-11-12
---

[All guides](https://gscpap.com/guides)

Guide · about 11 minutes

# The Page Indexing report through the API: every not-indexed URL and why, without spending your quota

By the [GSC PAP team](https://gscpap.com/about) · Updated November 12, 2026

The Page Indexing report is the first thing anyone checks in a technical audit: how many pages are not indexed, and why. It is also the one report you cannot get out of Search Console programmatically. There is no API for it, the bulk export to BigQuery leaves it out, and the export button gives you at most 1,000 example URLs per reason.

The only per-URL source is the URL Inspection API, and it is slow and rationed: 7 to 8 seconds a URL, 2,000 URLs a day per property. This guide shows a way around both limits that needs no extra tool: most of your URLs can be cleared without inspecting them at all, because Google cannot show a page in search that it has not indexed.

We ran the method on 908 sitemap URLs from a range of real sites, from a 4-page site to a 270-page one. 85% of them needed no inspection. The rest are below, by reason, with what each reason usually means and what fixed it.

## Can you get the Page Indexing report through the Search Console API?

No. The Search Console API covers search performance, sitemaps and URL Inspection. The Page Indexing report, with its counts per reason ("Crawled - currently not indexed", "Discovered - currently not indexed", "Excluded by 'noindex' tag" and the rest), is only in the Search Console interface.

| Route | What you get | What stops it |
| --- | --- | --- |
| Page Indexing report, Export | Counts per reason and example URLs | Manual, one property at a time, at most 1,000 examples per reason, and Google says the list may not include every affected URL |
| BigQuery bulk export | Search performance, every row | No indexing data at all |
| URL Inspection API | Google's own coverage state for one URL | One URL per call, 7 to 8 seconds each, 2,000 a day and 600 a minute per property |
| A crawler (Screaming Frog, Sitebulb) | What your pages say: noindex, canonicals, status codes | On its own it sees your site, not Google's index. Crawlers that call URL Inspection for you work within the same quota |

Search Console API and URL Inspection API limits as documented by Google, November 2026. Inspection times measured on GSC PAP calls over 30 days.

## Why inspecting every URL is the slow way

The URL Inspection API answers one URL per call and Google spends seconds on each. Run in parallel the time per URL barely changes, so the ceiling is the quota: 600 a minute, 2,000 a day. A 500-page site takes minutes, and a site past 2,000 pages takes days, using up the inspections you need for anything else that day.

Most of those calls are wasted. They confirm, one URL at a time, that pages already bringing in traffic are indexed.

## Impressions first: the URLs you don't need to inspect

A page that appeared in Google's results is in Google's index. Search Console's performance data lists every page that earned an impression, it is fast, and it costs no inspection quota. So the method has two passes.

908 sitemap URLs, two passes

1.  Every URL in the sitemaps
    
    Sitemap indexes expanded, gzipped files unpacked
    
    908 URLs
    
    -   Lost: 772 earned an impression: indexed, no inspection needed
    
2.  No impression in the last 90 days
    
    The suspects. Only these are inspected
    
    136 URLs
    
    -   Lost: 52 were indexed after all, with no impressions yet
    
3.  Not indexed, by Google's own reason
    
    From URL Inspection
    
    84 URLs
    

Sitemap URLs from a range of real sites, November 12, 2026. Impressions are Search Console page data for the last 90 days.

-   Pass one, free: read every sitemap, pull every page with an impression in the last 90 days, and take the difference. Here that left 136 of 908 URLs, 15%.
-   Pass two, rationed: inspect only those. 136 inspections instead of 908, under a minute instead of several.
-   Keep the answers. An inspection result is good for days, so the next run only inspects what changed or what was left over.
-   Match URLs carefully. A sitemap that lists https://example.com and Search Console's https://example.com/ name the same page; a strict string comparison sends your home page to the suspects.

## What 908 real sitemap URLs showed

Grouped by Google's coverage state, the 136 URLs without impressions split like this.

| Coverage state | URLs | What it usually means |
| --- | --- | --- |
| URL is unknown to Google | 56 | Google has not processed the URL, though it is in a submitted sitemap. New pages, a sitemap Google has not read since, or a URL variant (slash, case) it knows under another form |
| Submitted and indexed | 52 | Indexed and simply not shown yet: thin demand, a new page, or a page that ranks for nothing anyone searches |
| Crawled - currently not indexed | 14 | Google fetched it and chose not to index it. Usually thin or near-duplicate content, or a page that adds little next to others on the site |
| Discovered - currently not indexed | 9 | Google knows the URL and has not crawled it yet. Often weak internal linking, or a site Google crawls slowly |
| Duplicate, Google chose different canonical than user | 3 | Google picked another URL as the main one. In all three here, the same page without the trailing slash |
| Alternate page with proper canonical tag | 2 | The page points to another as canonical, as intended. Not a problem |

URL Inspection API, November 12, 2026. The coverage states are Google's own wording.

Not indexed, out of 908 sitemap URLs

-   URL is unknown to Google: 56
-   Crawled - currently not indexed: 14
-   Discovered - currently not indexed: 9
-   Duplicate, other canonical: 3
-   Alternate with canonical: 2

84 URLs, 9% of the sitemap URLs. The other 824 were indexed.

## No impressions does not mean not indexed

The usual shortcut, "no impressions, so not indexed", was wrong for 52 of the 136 URLs without impressions: 38%. They were indexed and nobody searched for anything they rank for. Privacy pages, contact pages in a fifth language, a booking page for a niche market.

That matters for what you do next. A page that is indexed and unseen needs demand or better targeting. A page that is not indexed needs Google to want it. Treating the first as the second sends people rewriting pages that have no indexing problem.

## "URL is unknown to Google": the biggest group, and the easiest to miss

Every one of these URLs was in a sitemap submitted to Search Console, and Google still said it had never seen them. On one site it was 31 of 48 product pages without impressions.

-   Check when Google last read the sitemap. Search Console's Sitemaps report shows it, and so does the sitemaps API (lastDownloaded). A sitemap read months ago doesn't list pages added since.
-   Check that the sitemap URLs are the ones your pages link to. If the sitemap says /product/ and every internal link says /product, Google may know the page under the other form.
-   Link to the pages. A URL that only appears in a sitemap is a weak signal; a link from a page Google already crawls is a strong one.
-   Then inspect again in a week. New pages often move from unknown to discovered to indexed on their own.

## Canonical mismatches: the trailing slash

All three "Duplicate, Google chose different canonical than user" URLs had the same shape. The sitemap and the page's own canonical tag said /ar/book/, and Google chose /ar/book, without the slash. The site already redirects the form without the slash to the one with it, and Google still kept the other.

A canonical tag is a hint, not an order. Google weighs it with redirects, internal links, links from other sites and the sitemap, and a form it has known longer can win for a while after a change. The fix is one URL form everywhere, links included, with the other redirecting to it, then inspecting again in a few weeks. Until Google switches, impressions and links are credited to the form it chose.

## How to rebuild the report yourself

Without any tool, the two passes take a spreadsheet and some patience.

-   Export every sitemap URL. Open each sitemap file (and each child of a sitemap index) and copy the loc values into one column.
-   Export pages with impressions. In Search Console, Performance, Pages tab, last 3 months, export. The export stops at 1,000 rows; the API returns up to 25,000 per request.
-   Take the difference: sitemap URLs that are not in the Pages export. Normalize the home page and trailing slashes before you compare.
-   Inspect those in URL Inspection, and note the coverage state of each. The interface allows a limited number of inspections a day, so for more than a few dozen use the API.
-   Count by coverage state. That is your Page Indexing report for the sitemap.

## Limits of this method

The two passes give Google's own answer for every sitemap URL. They are still not the Page Indexing report itself.

-   It covers sitemap URLs only. Search Console's report also counts URLs Google found through links, parameters and old pages, so its totals are higher.
-   An impression proves the page is indexed, not that every variant is. A non-canonical duplicate of an indexed page has no impressions and lands with the suspects, which is where you want it.
-   Ninety days is a choice. A page indexed but unseen for longer is counted as a suspect and inspected, which costs a call but gives the right answer.
-   Coverage states change. An inspection is a snapshot; re-run after a fix, or weekly while you work through a site.
-   Your numbers will differ. The 85% that needed no inspection here comes from sites whose sitemaps list pages people search for. A site with thousands of thin pages will have more suspects.

## Running the audit with Claude

The prompt works in any client connected to GSC PAP. Not set up in Claude yet? [Connect GSC PAP to Claude](https://gscpap.com/integrations/claude-ai-connectors)

### The scenario

A client's site lists 1,800 URLs in its sitemaps and the Page Indexing report says 600 are not indexed. You need the list, by reason, in a sheet you can work through, and the export gives you 1,000 examples split across tabs.

### The prompt

```prompt
Use the gsc-pap MCP. For sc-domain:example.com, call audit_index_coverage with max_inspections 300. If pending is above 0, call it again until it is 0 or the notes say the daily quota is used up. Then give me a table by coverage state with URL counts, and list every URL in the not-indexed states with its state. Separately, list the canonical mismatches with the canonical I set and the one Google chose. Finish with the three fixes that would move the most URLs, based on which states are biggest.
```

### What happens

1.  #### Claude reads every sitemap and clears the indexed pages
    
    audit_index_coverage reads the sitemaps submitted in Search Console, expands sitemap indexes, and drops every URL that earned an impression in the last 90 days. Those are indexed, and inspecting them would only spend quota.
    
2.  #### Claude inspects the rest in batches
    
    The remaining URLs go to URL Inspection, 25 at a time and up to 300 a call. Each result is kept for a week, so the next call carries on with what is pending instead of starting over, and stops short of the daily quota.
    
3.  #### Claude groups them by Google's reason
    
    The result is Google's own coverage state per URL, counted, with examples, and the URLs where Google chose a different canonical than yours.
    
4.  #### Claude turns the biggest groups into fixes
    
    "URL is unknown to Google" points at sitemaps and internal links, "Crawled - currently not indexed" at content, a canonical mismatch at URL consistency. Claude says which fix covers the most URLs.
    

### Outcome

A Page Indexing report for every URL in your sitemaps, with Google's reason per URL, in one or a few calls, and most of the day's inspection quota still unused.

### Where to take it next

-   Re-run a week after a fix. Only the URLs still pending or changed are inspected again.
-   For the "Crawled - currently not indexed" URLs, pull their query data with get_search_by_page_query before rewriting anything.
-   List the sitemaps with list_sitemaps and check when Google last downloaded each one.
-   Compare the not-indexed list with your internal links: pages nobody links to are the usual "Discovered" cases.

## Frequently asked questions

### Is there an API for the Page Indexing report in Google Search Console?

No. The Search Console API covers search performance, sitemaps and URL Inspection, and the bulk export to BigQuery carries performance data only. The Page Indexing report is only in the Search Console interface. To rebuild it, inspect URLs with the URL Inspection API and group them by coverage state, inspecting only the URLs without impressions to save quota.

### How many URLs can I inspect with the URL Inspection API per day?

2,000 a day and 600 a minute per property, according to Google's documentation. Each call takes several seconds. Inspect only URLs that earned no impressions in the last few months; on the sites in this guide that was 15% of sitemap URLs.

### How do I export all not-indexed pages from Search Console?

The Page Indexing report's export gives at most 1,000 example URLs per reason, and Google says they may not include every affected URL. For a complete list of your sitemap URLs, take the sitemap URLs that earned no impressions and inspect them with the URL Inspection API.

### Does a page with no impressions mean it is not indexed?

No. In our data 38% of sitemap URLs without impressions were indexed: nobody searched for anything they rank for. A page with impressions is indexed; a page without needs an inspection to know.

### Why does Search Console say "URL is unknown to Google" for a page in my sitemap?

Google has not processed that URL yet. Common causes: Google has not re-read the sitemap since the page was added, the sitemap lists a different form of the URL than your links use, or the page is new. Check the sitemap's last read date, link to the page, and inspect again after a week.

## Other guides

[All guides](https://gscpap.com/guides)

[

### Did the Google core update hit your site? How to measure it in Search Console and GA4

Which dates to compare, how to split the change by section, and the four things that fake an update's effect, shown on a real site through three 2026 updates.

13 min read

](https://gscpap.com/guides/measure-google-core-update-impact)[

### AI queries in Google Search Console: how to tell people, AI Mode and agents apart

Search Console mixes AI Mode follow-ups, AI agent searches and scripts into your query report. How to spot each one, with regex filters and real data.

14 min read

](https://gscpap.com/guides/ai-queries-in-google-search-console)[

### Good position, no clicks: find the SERP features eating your CTR

Ranking third and getting no clicks usually means something sits above you: an AI Overview, a featured snippet or a map pack. How to check which, query by query.

7 min read

](https://gscpap.com/guides/low-ctr-at-good-position-serp-features)[

### Find the pages quietly losing organic traffic, before the rankings go

Content decay is slow enough to miss on a dashboard. How to find the pages whose clicks keep sliding, tell decay from seasonality, and decide what to refresh.

7 min read

](https://gscpap.com/guides/find-pages-losing-organic-traffic)[

### Traffic changed: how to compare two Search Console periods and find out why

Clicks are down 18% and nobody knows why. How to compare two periods properly, avoid the three traps that fake a drop, and find the queries and pages behind it.

7 min read

](https://gscpap.com/guides/compare-search-console-date-ranges)[

### Google Search Console anonymized queries: measure the traffic you can't see

Search Console hides anonymized queries from query rows but counts them in totals. Learn what they are, why no tool reveals them, and how to measure them.

6 min read

](https://gscpap.com/guides/google-search-console-anonymized-queries)[

### GSC clicks vs GA4 sessions: why they differ and how to tie clicks to conversions

A Search Console click and a GA4 session measure different things. Why the numbers never match, what gap is normal, and how to compare and combine them page by page.

11 min read

](https://gscpap.com/guides/correlate-organic-clicks-to-ga4-conversions)[

### Audit Core Web Vitals across your site with AI

Audit Core Web Vitals with Claude through a hosted PageSpeed Insights MCP server: Lighthouse lab data and real-user CrUX field data for your top pages.

7 min read

](https://gscpap.com/guides/audit-core-web-vitals-with-ai)[

### Google Search Console historical data: how to keep it past 16 months

Google Search Console keeps 16 months of historical data, then deletes it. Here is what it includes and how to keep it longer, from BigQuery to an archive.

8 min read

](https://gscpap.com/guides/recover-search-console-history-past-16-months)[

### Build a weekly SEO health report with Claude

Automate a weekly SEO report with Claude: one saved prompt pulls Search Console changes, quick wins, decaying pages, GA4 conversions and Core Web Vitals.

8 min read

](https://gscpap.com/guides/weekly-seo-health-report-via-claude)[

### Bulk URL inspection in Google Search Console: diagnose indexing issues at scale

Search Console inspects one URL at a time. The URL Inspection API allows 2,000 checks a day per property. How to inspect in bulk and find indexing issues.

8 min read

](https://gscpap.com/guides/diagnose-indexing-issues-bulk-url-inspection)[

### Track keyword rankings in Google Search Console, past the 16-month limit

See a keyword's position history in Google Search Console, what that average really measures, and how to keep ranking history past the 16-month limit.

6 min read

](https://gscpap.com/guides/track-keyword-rankings-over-years)[

### How to find striking distance keywords in Google Search Console

Striking distance keywords rank just off page one of Google. Find them in Search Console, pick the ones worth fixing, and learn what to change on the page.

8 min read

](https://gscpap.com/guides/find-seo-quick-wins)[

### How to find keyword cannibalization in Google Search Console

Check for keyword cannibalization in Google Search Console: find queries where your pages compete, judge whether it hurts, and fix the cases that do.

8 min read

](https://gscpap.com/guides/detect-keyword-cannibalization)

### Tools that automate this workflow

The MCP exposes 43 tools across 11 categories. These are the ones most relevant to this page:

-   [audit_index_coverage](https://gscpap.com/tools#audit_index_coverage) · The Page Indexing report Google has no API for: every URL in your sitemaps grouped by why it is or is not indexed (crawled or discovered but not indexed, unknown to Google, duplicate, noindex), with counts and examples. Pages with impressions count as indexed, so only the rest use inspection quota; results are kept for a week, and the next call carries on where the last stopped.
-   [get_index_coverage_summary](https://gscpap.com/tools#get_index_coverage_summary) · A quick indexing check of your top pages by clicks (indexed, crawled-not-indexed, discovered-not-indexed) so you know where to focus.
-   [batch_inspect_urls](https://gscpap.com/tools#batch_inspect_urls) · Bulk URL Inspection, up to 10 URLs per call within Google's 2,000-per-day quota. Diagnose why a content cluster or sitemap isn't getting indexed.
-   [list_sitemaps](https://gscpap.com/tools#list_sitemaps) · List all sitemaps submitted for a property along with last download time and status.
-   [get_search_by_page_query](https://gscpap.com/tools#get_search_by_page_query) · Drill into a specific page to see which queries drive its traffic, impressions, and average position.

[Browse all 43 tools](https://gscpap.com/tools)

### No GCP project. No Python. No JSON files.

Self-hosting an MCP server for Search Console means a Google Cloud project, an OAuth client, a Python venv, and JSON config maintenance per AI client. We handle all of it. You sign in with Google and copy a token.

[Sign in with Google](https://app.gscpap.com/login) Read-only Search Console scope, revoke anytime

Want a guide for a workflow we have not covered? Email [support@gscpap.com](mailto:support@gscpap.com).
