IndexNow Bulk Submitter and Search Console Index Checker (Python Scripts)
Publishing at volume raises two questions every week: have the search engines heard about my new and updated pages, and has Google actually indexed them? This free pair of Python scripts covers both. One submits URLs in bulk through IndexNow; the other checks Google’s index status through the Search Console URL Inspection API.
Who it’s for
Technical SEOs, developers and site owners who publish or update many pages, run migrations, or want a log of what was submitted and when.
How to use it
- Install the requirements (locally, or in Google Colab by uploading the script and running it with
!python). - Run
generate-keyto create your IndexNow key and key file, then upload the file to your site root. - Run
check-keyto confirm search engines can read it. The submit command checks it again before the first batch. - Run
submitwith--dry-runon your sitemap (add--sinceto send only recently changed URLs), a crawl export, or a text file of URLs. Review what would be sent. - Start small with
--limit 5, then submit for real. Every URL is logged toindexnow_submissions.csv. - Optionally, run
check_indexation_gsc.pywith a service account that has access to your Search Console property to check which URLs Google has indexed.
What you get
A repeatable submit step you can run after every publish or migration batch, a CSV log of every URL sent (with batch, status and timestamp) that you can chart in Looker Studio, and gsc_inspection.csv with Google’s verdict, coverage state and last crawl time for each URL. If you hit the daily quota, run it again the next day and it picks up where it stopped.
What the submitter protects you from
- URLs that aren’t on your host (filtered out before sending) and duplicates (removed, order kept).
- A missing or wrong key file, and keys in the wrong format.
- Rate limits: on a 429 it waits 30, 60, 120 and 240 seconds before retrying.
- A failed batch: it stops, so the rest of your list isn’t wasted.
Limits
- Google doesn’t take part in IndexNow. Bing, Yandex, Seznam, Naver, Yep and others share the URLs you submit to any one endpoint.
- A 200 or 202 response means the URLs were received. Neither means indexed.
- The URL Inspection API allows 2,000 inspections per property per day, so check large sites in batches.
- Both scripts are free; you only need a site you own and, for the checker, a Google Cloud service account.
The full walkthrough, including what changed from my 2022 code, is in The Ultimate Guide to the IndexNow API. If you’re new to running Python for SEO, the Introduction to Machine Learning for SEO course starts from the basics.
What’s included
- Generates and checks your IndexNow key file before anything is sent
- Collects URLs from a sitemap index (with a date filter), a crawl export or a text file, removes duplicates and off-host URLs
- Batches of up to 10,000 URLs, dry-run mode, retries with backoff on 429, stops on a failed batch
- Logs every URL sent to a CSV you can chart in Looker Studio
- Optional bulk Google index check through the Search Console URL Inspection API
Where this resource is used on MLforSEO
Walkthroughs on the blog
Concepts behind it
More content audits resources
- No-Code TemplateContent Audit Template: Search Console, GA4 and Crawl to Keep, Update, Merge or Prune (Google Sheets)
- ChecklistSEO Site Migration Checklist + Redirect Mapping Workbook
- Coding Script or NotebookAI Crawler Access Checker: robots.txt, llms.txt and Bot Rules
- Coding Script or NotebookStructured Data Automation Kit: Audit, Generate and Validate JSON-LD with Python
- Coding Script or NotebookInternal Link Audit and Topic Clustering Notebook with Embeddings
- Coding Script or NotebookImage SEO Audit and Bulk AI Alt Text Generator (Colab Notebook)
See all 16 content audits resources →See all 6 site migrations resources →See all 42 coding script or notebook resources →
