Track indexed-vs-not over time with -report and -diff
Posted on July 19, 2026 by Abhay khant
Key Takeaways
Track which URLs Google has indexed over time with gsc-indexer's -report and -diff flags, and watch coverage shift between runs.
Want to know whether your pages are actually getting indexed as time goes on?
Use -report to snapshot a run and -diff to compare against a previous one.
Snapshot a run with -report
-report <dir> writes three files into the directory you name:
./gsc-indexer -creds sa.json -batch urls.txt -report ./report
indexed.txt. URLs Google has indexed.not-indexed.txt. everything else (not indexed, or errored).summary.json. counts + the full URL lists, in machine-readable form.
The run also prints a summary to your terminal:
SUMMARY: 87 indexed, 13 not indexed of 100 URLs
→ ./report/indexed.txt
→ ./report/not-indexed.txt
Compare runs with -diff
Later, re-run and point -diff at the saved summary.json:
./gsc-indexer -creds sa.json -batch urls.txt -diff ./report/summary.json
This prints what changed since the baseline:
▲ newly indexed: https://www.toolsura.com/post-new/
▼ dropped (was indexed, now not): https://www.toolsura.com/post-stale/
...
DIFF vs ./report/summary.json
indexed: 87 → 90 (+3)
not index: 13 → 10 (-3)
newly indexed: 3 | dropped: 1 | unchanged: 96
▲ newly indexed. URLs that moved from not-indexed to indexed.▼ dropped. URLs that were indexed before but aren't now.
Update and compare in one pass
You can write a fresh report and diff against the previous one at the same time:
./gsc-indexer -creds sa.json -batch urls.txt -report ./report -diff ./report/summary.json
The diff uses the previous summary.json (read before it's overwritten), so
this is safe to run on a schedule.
Next
- Large runs timing out? Throttling and quiet mode.
- Broken run? Troubleshooting.
Sources
- Google Search Console
- URL Inspection API documentation
- Google Search APIs overview
- Service account OAuth (Google Identity)
- About service accounts (Google Cloud IAM)
- Verify site ownership
- Property types: URL-prefix vs Domain
- URL Inspection tool help
- Indexing API (JobPosting/BroadcastEvent only)
- Request indexing / inspect a URL
Frequently Asked Questions
How do I snapshot the current indexed state?
Add -report ./report to write indexed.txt, not-indexed.txt, and summary.json into that directory. Run it after a full batch or sitemap pass. The summary file is the snapshot you compare against later, and it is what -diff reads.
How do I see what changed since the last run?
Re-run with -diff ./report/summary.json. The tool prints which URLs are newly indexed, which dropped out, and before versus after counts with up and down arrows. This is how you confirm a re-crawl actually moved pages into the index.
Can I update and compare in a single pass?
Yes. Pass both -report ./report and -diff ./report/summary.json together. The run writes the new snapshot and compares it against the old one, so you finish with fresh data and a delta report in one command instead of two separate invocations.
What format is the snapshot data in?
summary.json holds the counts and is machine-readable, while indexed.txt and not-indexed.txt are plain URL lists you can diff or grep by hand. Keep the whole report directory between runs; only the summary.json matters for the -diff comparison.
Why bother tracking this at all?
Google's index drifts. Pages drop from exclusions, crawl errors, or stale content, and you rarely notice until traffic moves. A weekly -report plus -diff gives you a small, readable changelog of index health instead of a silent surprise later.