Blogger IndexNow Complete Setup and Automation Guide

Learn how to set up the Blogger (blogspot) IndexNow Dashboard to automate Bing indexing and monitor crawl status.
Blogger Blogspot IndexNow Dashboard showing automatic Bing IndexNow submission and crawl monitoring

What is IndexNow?

IndexNow is a protocol created by Microsoft Bing (and adopted by Yandex, Naver, and others) that allows website owners to instantly notify search engines when content is published or updated.

Without IndexNow:

  • Bing discovers your new posts by crawling randomly
  • This can take days or even weeks
  • Your content is invisible to searchers during that time

With IndexNow:

  • New posts are submitted to Bing within minutes
  • Search engines know to crawl immediately
  • Your content appears in search results much faster

The Problem for Blogger Users

Blogger (blogspot) does not allow you to upload files to your domain root. IndexNow requires a verification key file to be hosted at your domain root. This dashboard solves that problem by hosting the key file locally on your computer and exposing it via a free tunnel service.

What This Dashboard Does

This dashboard is a complete automation system that runs on your local computer. Here is what it does automatically:

A. Monitors Your Blogger RSS Feed

  • Checks your Blogger RSS feed every 15 minutes
  • Detects when you publish a new blog post
  • Extracts the URL of the new post

B. Submits to IndexNow Automatically

  • Sends the new post URL to Bing via the IndexNow API
  • Bing receives the notification and crawls your page
  • Your post appears in search results within hours instead of days

C. Monitors Crawl Status

  • Every 6 hours, checks which URLs have been successfully crawled by Bing
  • Separates crawled URLs from uncrawled URLs
  • Shows you the status in a beautiful web dashboard

D. Auto-Resubmits Uncrawled URLs

  • If a URL has not been crawled after 24 hours, it is automatically resubmitted to IndexNow
  • This ensures no post gets missed
  • Tracks how many times each URL has been resubmitted

E. Web Dashboard

  • Dark-themed, responsive web interface
  • Shows statistics: total submitted, crawled, not crawled, resubmissions
  • Lists all URLs with their status
  • Shows real-time activity logs
  • Manual controls: check RSS now, check crawl status, resubmit specific URLs

Requirements

Before you start, make sure you have:

  • A Blogger website (custom domain or blogspot subdomain)
  • A Windows computer that stays on (or runs when you publish)
  • Python 3.8 or higher installed
  • Internet connection
  • A free ngrok account (or Cloudflare account for tunnel)

Optional but recommended:

  • A custom domain for your Blogger site (blogspot works too)
  • Your computer connected to the internet most of the time

Step 1: Get Your IndexNow API Key

The IndexNow API key is a random string that proves you own the website. You can generate it yourself. It must be exactly 32 characters.

How to Generate Key

  1. Go to https://www.bing.com/indexnow/getstarted
  2. Copy the generated string (example: a1b2c3d4e5f6789012345678abcdef90)

Important

The key file name must be exactly your key with .txt extension. Example: If your key is a1b2c3d4e5f6789012345678abcdef90, then the file name must be: a1b2c3d4e5f6789012345678abcdef90.txt

Save this key somewhere safe. You will need it in the next steps.

Step 2: Install Python

If you already have Python 3.8+, skip to Step 3.

  1. Go to python.org/downloads
  2. Download the latest Python 3.x for Windows
  3. Run the installer
  4. VERY IMPORTANT: Check the box "Add Python to PATH" at the bottom
  5. Click "Install Now"
  6. Wait for installation to complete
  7. Open Command Prompt and verify: python --version

You should see something like:

Python 3.12.0

If You Get an Error

Python is not in your PATH. Reinstall and check "Add Python to PATH".

Step 3: Download and Extract the Dashboard

  1. Download the Bing IndexNow Dashboard ZIP file
  2. Extract it to a folder on your computer.
Bing.zip 7.86MB

Example path used in this guide:

C:\Users\yourname\Downloads\Bing

After extraction, your folder structure should look like this:

Bing/
|-- app.py                                 (Main application)
|-- key_server.py                          (Key file server)
|-- a1b2c3d4e5f6789012345678abcdef90.txt   (Your key file)
|-- requirements.txt                       (Python packages)
|-- setup.bat                              (First-time setup)
|-- start.bat                              (Launch script)
|-- README.md                              (Instructions)
|-- data/                                  (Auto-created)
|-- templates/
    |-- dashboard.html                     (Web interface)

Replace the Key File with YOUR Key

  1. Delete the existing .txt file (it contains a dummy key)
  2. Create a new text file named exactly: YOUR_KEY.txt
  3. Open it in Notepad and paste ONLY your 32-character key
  4. Save and close

Example

File name: a1b2c3d4e5f6789012345678abcdef90.txt

File contents (only this, nothing else):

a1b2c3d4e5f6789012345678abcdef90

Step 4: Configure Your Settings

Open app.py in Notepad (right-click -> Edit with Notepad).

Find the CONFIG section near the top (around line 20-35):

CONFIG = {
    "RSS_FEED": "https://www.yourblog.com/feeds/posts/default?alt=rss",
    "DOMAIN": "www.yourblog.com",
    "API_KEY": "a1b2c3d4e5f6789012345678abcdef90",
    "KEY_LOCATION": "https://your-tunnel-url.ngrok.io/a1b2c3d4e5f6789012345678abcdef90.txt",
    "INDEXNOW_URL": "https://api.indexnow.org/indexnow",
    "CHECK_INTERVAL": 15,
    "MAX_POST_AGE_HOURS": 24,
    "RETRY_AFTER_HOURS": 24,
    "CRAWL_CHECK_INTERVAL": 6,
    "DATA_DIR": os.path.join(os.path.dirname(os.path.abspath(__file__)), "data"),
}

A. RSS_FEED

Replace with your actual Blogger RSS feed URL.

If you have a custom domain:

https://www.yourblog.com/feeds/posts/default?alt=rss

If you use blogspot subdomain:

https://yourblog.blogspot.com/feeds/posts/default?alt=rss

Example:

"RSS_FEED": "https://www.demoblog.com/feeds/posts/default?alt=rss",

B. DOMAIN

Replace with your domain (without https://).

If custom domain:

www.yourblog.com

If blogspot:

yourblog.blogspot.com

Example:

"DOMAIN": "www.demoblog.com",

C. API_KEY

Replace with your 32-character key.

Example:

"API_KEY": "a1b2c3d4e5f6789012345678abcdef90",

D. KEY_LOCATION

Leave for now, we will set this in Step 5. This will be your ngrok or Cloudflare tunnel URL + your key file name.

Example (we will update this in the next step):

"KEY_LOCATION": "https://abc123def.ngrok.io/a1b2c3d4e5f6789012345678abcdef90.txt",

Save and close app.py.

Step 5: Expose Your Key File to the Internet

This is the Most Important Step

Bing needs to verify your key file by accessing it from the internet. Since Blogger does not allow file uploads, we will use a free tunnel service.

Option A: ngrok (Easiest, Free)

  1. Go to ngrok.com and sign up for a free account
  2. Download ngrok for Windows
  3. Extract ngrok.exe to a folder (example: C:\ngrok)
  4. Open Command Prompt and authenticate:
cd C:\ngrok
ngrok config add-authtoken YOUR_AUTH_TOKEN_HERE

(Your auth token is shown on your ngrok dashboard after login)

Start the tunnel to your local key server (port 8765):

ngrok http 8765

You will see output like this:

Session Status                online
Account                       YourName (Plan: Free)
Version                       3.x.x
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    https://abc123def.ngrok.io -> http://localhost:8765

Copy the HTTPS URL (in this example: https://abc123def.ngrok.io)

Open app.py again and update KEY_LOCATION:

"KEY_LOCATION": "https://abc123def.ngrok.io/a1b2c3d4e5f6789012345678abcdef90.txt",

Important

Replace abc123def with YOUR actual ngrok URL, and replace a1b2c3d4... with YOUR actual key.

Save and close app.py.

Keep the ngrok window open! If you close it, the URL changes and Bing cannot verify your key.

Option B: Cloudflare Tunnel (More Stable, Free)

If you want a permanent URL that does not change, use Cloudflare Tunnel.

Install cloudflared:

Download from: Cloudflare Downloads

Or use winget: winget install --id Cloudflare.cloudflared

Open Command Prompt and login:

cloudflared tunnel login

This opens a browser. Select your domain and authorize.

Create a tunnel:

cloudflared tunnel create bing-indexer

This outputs a tunnel ID. Save it.

Create a configuration file at:

C:\Users\YourName\.cloudflared\config.yml

With this content:

tunnel: YOUR_TUNNEL_ID
credentials-file: C:\Users\YourName\.cloudflared\YOUR_TUNNEL_ID.json

ingress:
  - hostname: bing-key.yourdomain.com
    service: http://localhost:8765
  - service: http_status:404

Add a DNS record in Cloudflare:

  • Type: CNAME
  • Name: bing-key
  • Target: YOUR_TUNNEL_ID.cfargotunnel.com
  • Proxy status: Enabled (orange cloud)

Run the tunnel:

cloudflared tunnel run bing-indexer

Your key file is now accessible at:

https://bing-key.yourdomain.com/a1b2c3d4e5f6789012345678abcdef90.txt

Update KEY_LOCATION in app.py:

"KEY_LOCATION": "https://bing-key.yourdomain.com/a1b2c3d4e5f6789012345678abcdef90.txt",

Step 6: Run the Dashboard

You Need to Run TWO Things Simultaneously

Terminal 1: Key Server

This serves your key file so Bing can verify it.

  1. Open Command Prompt
  2. Navigate to your Bing folder:
cd C:\Users\demo\OneDrive\Documents\Bing

Run the key server:

python key_server.py

You should see:

Key server running on http://localhost:8765

Keep this window open! Press Ctrl+C to stop.

Leave This Window Open

Do not close it.

Terminal 2: ngrok Tunnel (if using ngrok)

  1. Open a SECOND Command Prompt
  2. Navigate to your ngrok folder:
cd C:\ngrok

Run:

ngrok http 8765

Copy the HTTPS URL and update app.py KEY_LOCATION (if not done already)

Leave this window open too.

Terminal 3: Dashboard

  1. Open a THIRD Command Prompt
  2. Navigate to your Bing folder:
cd C:\Users\demo\OneDrive\Documents\Bing

Install requirements (first time only):

pip install -r requirements.txt

Run the dashboard:

python app.py

You should see:

[2026-07-13 10:00:00] [INFO] Data loaded successfully
[2026-07-13 10:00:00] [INFO] Starting scheduled check...
[2026-07-13 10:00:01] [INFO] Found 5 posts in feed
[2026-07-13 10:00:01] [INFO] New post found: My Latest Blog Post
[2026-07-13 10:00:02] [INFO] Submitting 1 URL(s) to IndexNow...
[2026-07-13 10:00:03] [INFO] Submitted 1 URL(s) - Status 202 (pending)
[2026-07-13 10:00:03] [INFO] Scheduled check complete
[2026-07-13 10:00:03] [INFO] Dashboard available at http://localhost:5000

Open your web browser and go to: http://localhost:5000

You Should See the Dashboard!

Understanding the Dashboard Interface

When you open http://localhost:5000, you see:

Stats Cards (Top Row)

  • Total Submitted: How many URLs have been submitted to IndexNow
  • Crawled: How many have been successfully crawled by Bing
  • Not Crawled: How many are still pending or failed
  • Resubmissions: How many times uncrawled URLs were auto-resubmitted

Tabs

All URLs

Complete list of every submitted URL with:

  • URL (clickable link)
  • Post title
  • Submission date/time
  • Status badge (Crawled / Pending / Error)
  • Number of times resubmitted

Crawled

Only URLs that Bing has successfully crawled.

Not Crawled

URLs that are pending or failed, with:

  • Last checked time
  • Status reason
  • A "Resubmit" button to manually resubmit

Logs

Real-time activity log showing:

  • Timestamp
  • Log level (INFO, SUCCESS, WARNING, ERROR)
  • Message describing what happened

Action Buttons

  • Check RSS Now: Manually trigger an RSS feed check
  • Check Crawl Status: Manually check which URLs are crawled
  • Resubmit Uncrawled: Manually resubmit all uncrawled URLs
  • Refresh Data: Refresh the dashboard data from the server

How Auto-Resubmission Works

The dashboard has three automatic background tasks:

Task 1: Check RSS Feed (Every 15 Minutes)

  • Fetches your Blogger RSS feed
  • Compares with already submitted URLs
  • Finds new posts published in the last 24 hours
  • Submits them to IndexNow
  • Saves the URL to the tracking file

Task 2: Check Crawl Status (Every 6 Hours)

  • Goes through all submitted URLs
  • Checks if each URL is accessible (HTTP 200)
  • Updates crawl status in the tracking file
  • Separates crawled from uncrawled URLs

Task 3: Auto-Resubmit Uncrawled URLs (Every 24 Hours)

  • Finds URLs that have not been crawled
  • Checks if 24 hours have passed since last submission
  • Resubmits them to IndexNow
  • Increments the resubmit counter
  • Updates the last resubmitted timestamp

This Ensures No Post Gets Missed

Even if Bing misses a URL the first time, it gets another chance automatically.

Troubleshooting Common Issues

Issue: "Status: 403 - Key verification failed"

Cause: Bing cannot access your key file from the internet.

Solutions:

  • Make sure key_server.py is running (Terminal 1)
  • Make sure ngrok/cloudflared is running (Terminal 2)
  • Open your KEY_LOCATION URL in a browser. It should show ONLY your key.
  • Example: https://abc123def.ngrok.io/a1b2c3d4e5f6789012345678abcdef90.txt
  • If ngrok URL changed, update KEY_LOCATION in app.py and restart
  • Check that your key file name matches your API_KEY exactly

Issue: "No new posts found"

Cause: RSS feed is empty or incorrect.

Solutions:

  • Open your RSS feed URL in a browser. You should see XML with posts.
  • Check that RSS_FEED in app.py matches your actual feed URL
  • Make sure your Blogger feed is public (Settings -> Site feed -> Allow)
  • Try the full feed URL: https://yourblog.blogspot.com/feeds/posts/default?alt=rss

Issue: "Python is not recognized"

Cause: Python is not in your system PATH.

Solutions:

  • Reinstall Python and check "Add Python to PATH"
  • Or use the full path: C:\Users\YourName\AppData\Local\Programs\Python\Python312\python.exe

Issue: "Port 5000 is already in use"

Cause: Another program is using port 5000.

Solutions:

  • Change the port in app.py: app.run(host="0.0.0.0", port=5001, debug=False)
  • Then access: http://localhost:5001

Issue: "ngrok URL changes every time"

Cause: Free ngrok URLs are temporary.

Solutions:

  • Use Cloudflare Tunnel for a permanent URL (see Option B in Step 5)
  • Or upgrade to ngrok paid plan for a reserved domain
  • Or update KEY_LOCATION each time you restart ngrok

Issue: Dashboard shows "Never" for all dates

Cause: Timezone issue or no data yet.

Solutions:

  • This is normal on first run. Publish a new post and wait 15 minutes.
  • Check that your computer time is correct.

Complete Code Reference

Below are all the code files included in the dashboard package.

File: app.py (Main Application)

This is the heart of the dashboard. It contains:

  • Flask web server
  • RSS feed parser
  • IndexNow API client
  • Crawl status checker
  • Auto-resubmission scheduler
  • REST API endpoints for the dashboard

Key functions:

  • get_latest_posts(): Fetches and parses your Blogger RSS feed
  • submit_to_indexnow(urls): Sends URLs to Bing IndexNow API
  • check_crawl_status(url): Checks if Bing has crawled a URL
  • auto_resubmit_uncrawled(): Resubmits uncrawled URLs after 24h
  • check_and_submit(): Main scheduled task that runs every 15 minutes

The scheduler uses the "schedule" library to run tasks at intervals:

  • Every 15 minutes: check_and_submit()
  • Every 6 hours: check_all_crawl_statuses()
  • Every 24 hours: auto_resubmit_uncrawled()

API Endpoints:

EndpointMethodDescription
/GETDashboard HTML page
/api/statsGETStatistics for the dashboard cards
/api/submittedGETAll submitted URLs with metadata
/api/crawledGETOnly crawled URLs
/api/uncrawledGETOnly uncrawled URLs
/api/logsGETRecent activity logs
/api/submitPOSTManual URL submission
/api/resubmitPOSTResubmit uncrawled URLs
/api/check-crawlPOSTTrigger crawl status check
/api/settingsGET/POSTView or update configuration

File: key_server.py (Key File Server)

A minimal HTTP server that serves your IndexNow key file.

  • Runs on port 8765
  • Serves the key file at: /YOUR_KEY.txt
  • Required for Bing to verify your domain ownership
  • Must stay running continuously

How it works:

  1. Bing receives your IndexNow submission
  2. Bing tries to fetch: https://yourdomain.com/YOUR_KEY.txt
  3. Since you cannot host on Blogger, ngrok forwards this to localhost:8765
  4. key_server.py receives the request and returns your key
  5. Bing verifies the key matches and accepts the submission

File: templates/dashboard.html (Web Interface)

A complete single-page web application with:

  • Dark theme design
  • Responsive layout (works on mobile and desktop)
  • Real-time stats cards
  • Tabbed interface (All URLs, Crawled, Not Crawled, Logs)
  • Action buttons with loading states
  • Toast notifications
  • Auto-refresh every 30 seconds
  • No external dependencies (pure HTML/CSS/JS)

JavaScript functions:

  • loadData(): Fetches stats and updates the current tab
  • loadAllUrls(): Renders the All URLs table
  • loadCrawledUrls(): Renders the Crawled table
  • loadUncrawledUrls(): Renders the Not Crawled table with resubmit buttons
  • loadLogs(): Renders the activity log
  • checkNow(): Triggers manual RSS check
  • checkCrawlStatus(): Triggers manual crawl check
  • resubmitUncrawled(): Triggers manual resubmission of all uncrawled
  • resubmitSingle(url): Resubmits one specific URL
  • refreshData(): Refreshes dashboard data

File: YOUR_KEY.txt (IndexNow Key File)

A plain text file containing ONLY your 32-character IndexNow API key.

  • File name must be exactly: YOUR_KEY.txt
  • Contents must be exactly: YOUR_KEY (no extra spaces, no newlines)
  • This file is served by key_server.py for Bing verification

File: requirements.txt (Python Dependencies)

Lists the Python packages needed:

  • flask: Web framework for the dashboard
  • requests: HTTP client for API calls
  • feedparser: RSS feed parser
  • schedule: Task scheduling

Install with: pip install -r requirements.txt

File: setup.bat (First-Time Setup Script)

Automates the first-time setup:

  • Checks if Python is installed
  • Creates a Python virtual environment (venv)
  • Activates the virtual environment
  • Installs all required packages

Run once: double-click setup.bat

File: start.bat (Launch Script)

Automates launching the dashboard:

  • Activates the virtual environment
  • Starts key_server.py in a new window
  • Waits 3 seconds
  • Starts app.py (dashboard) in a new window
  • Opens http://localhost:5000

Run every time: double-click start.bat

FAQ

Q: Do I need to keep my computer on all the time?

A: The dashboard only works while your computer is on and connected to the internet. If you turn off your computer, auto-submission stops. When you turn it back on, it will catch up by checking recent posts.

Q: Can I run this on a server or VPS instead?

A: Yes! The dashboard works on any computer with Python. A VPS (like DigitalOcean, Vultr, or AWS) is actually better because it stays online 24/7. Just upload the files and run app.py.

Q: Does this work with blogspot.com domains?

A: Yes, but with a limitation. IndexNow requires the key file to be hosted at your domain root. With blogspot, you cannot do this. However, the dashboard still works because we host the key file locally and expose it via ngrok/Cloudflare. Bing will verify the key through the tunnel.

Q: Is this free?

A: Yes, completely free. ngrok has a free tier. Cloudflare Tunnel is free. Python and all libraries are free. The only cost is keeping your computer on (electricity).

Q: How many URLs can I submit per day?

A: IndexNow allows up to 10,000 URLs per day. For a typical Blogger site, you will never hit this limit.

Q: Will this also submit to Google?

A: No. Google does not participate in IndexNow (as of 2026). For Google, submit your sitemap in Google Search Console. Google will discover your posts through the sitemap and RSS feed.

Q: Can I submit old posts too?

A: Yes. The dashboard only auto-submits posts from the last 24 hours, but you can manually submit any URL using the API endpoint or by modifying the submitted_urls.json file.

Q: What happens if my ngrok URL changes?

A: If your ngrok URL changes, Bing will get a 403 error on the next submission. Update KEY_LOCATION in app.py with the new URL and restart the dashboard. For a permanent solution, use Cloudflare Tunnel.

Q: Is my API key safe?

A: Your API key is stored locally on your computer. The key file is only served to Bing for verification. Do not share your key with anyone. If you suspect it is compromised, generate a new one and update all files.

Q: Can I use this for multiple Blogger sites?

A: Yes, but you need a separate instance for each site. Copy the Bing folder, update the RSS_FEED, DOMAIN, and API_KEY for each site, and run on different ports (5000, 5001, 5002, etc.).

Q: The dashboard says "Pending" for all URLs. Is that normal?

A: "Pending" means the URL was submitted but crawl status has not been checked yet. Wait up to 6 hours for the crawl check to run, or click "Check Crawl Status" manually.

Q: Can I change the check intervals?

A: Yes. Edit app.py and change these values:

"CHECK_INTERVAL": 15,          # Minutes between RSS checks
"CRAWL_CHECK_INTERVAL": 6,      # Hours between crawl checks
"RETRY_AFTER_HOURS": 24,         # Hours before auto-resubmit

Q: Where is my data stored?

A: All data is stored locally in the data/ folder:

  • submitted_urls.json: List of submitted URLs
  • crawled_urls.json: Crawl status tracking
  • dashboard_log.txt: Activity logs
  • settings.json: Your configuration

Q: How do I uninstall?

A: Simply delete the Bing folder. No registry entries, no background services.

This dashboard gives Blogger users the same indexing power that WordPress and other self-hosted platforms enjoy. By automating IndexNow submissions, your new blog posts will appear in Bing search results within hours instead of days or weeks.

The setup requires some initial configuration, but once running, it operates completely automatically. Just publish your posts on Blogger as usual, and the dashboard handles the rest.

For questions or issues, check the Troubleshooting section above or review the logs in the dashboard for specific error messages.


Bing IndexNow Dashboard for Blogger - Complete Guide

Built with Python, Flask, and a lot of coffee

Post a Comment