Skip to content

IndexNow Server

Tell search engines about new pages the moment they go live, for every site you run, from one dashboard.

Free, MIT licensed and self-hosted. One Node process and one SQLite file. It handles IndexNow keys, sitemap diffing and schedules so you stop pasting URLs into curl.

Copy
git clone https://github.com/TheTechBasket/index-now-server
cd index-now-server
pnpm install
pnpm dev   # http://localhost:3020

Quick with a hundred thousand URLs loaded

The bench script in the repo loads 100,000 URLs across 10 sites, then measures the API one request at a time. These are median times.

Dashboard load
0.57 ms
median of 50 requests
One site with its URLs
17 ms
median of 100 requests
URLs in the test set
100,000
across 10 sites
Per submit request
10,000
URLs at most, batched for you

Source: bench/results/v0.9.0.json in the repo, node v24.13.1, one request at a time. Hardware was not recorded, so treat the times as a rough guide. The batch size is the IndexNow limit.

What it looks like

IndexNow Server dashboard showing six demo sites with their URL counts, pending URLs, schedules and key status
Every site on one screen: pending URLs, schedule and key status. Demo data.
IndexNow Server site page listing sitemap URLs with new, submitted and removed statuses and a Submit Pending button
One site: sync the sitemap, then submit only what is new or changed. Demo data.

What you get

  • Many sites, one dashboard

    Add each site, generate or rotate its IndexNow key, then Submit, Sync, Verify or Delete in bulk across sites.

  • Sitemap diffing

    It fetches your sitemaps and submits only new or changed URLs, in batches of up to 10,000. No more resubmitting a whole site for one new post.

  • Three modes per site

    Manual from the dashboard, scheduled (hourly, every 6 hours or daily), or a webhook: POST /hook/:siteId from your CMS or build pipeline.

  • Key file helper

    Copy or download the exact key file content from the dashboard, then host it at https://your-domain/<key>.txt. Verify checks that it is reachable.

  • Discord notifications

    Optional webhook with a toggle per event and a test button, so you hear about failed submissions without watching the dashboard.

  • Auth when you want it

    A login gate through ADMIN_EMAIL and ADMIN_PASSWORD, plus an API_TOKEN Bearer token for the /api/* routes. Skip both on a trusted network.

Let an agent submit URLs for you

IndexNow Server ships an MCP server over stdio. It reads the database directly, so there is no HTTP round trip and no extra port to open.

Eight tools cover the daily work: get_overview, get_site_detail, add_site, update_site, verify_key, submit_urls, sync_sitemap and get_site_urls.

Prefer scripts? Every /api/* route takes the Bearer token, for example curl -H "Authorization: Bearer $API_TOKEN" http://localhost:3020/api/sites.

mcp.jsonCopy
{
  "mcpServers": {
    "indexnow": {
      "command": "pnpm",
      "args": ["mcp"],
      "cwd": "/path/to/index-now-server",
      "env": { "DATABASE_PATH": "./data/indexnow.db" }
    }
  }
}

Running in a few minutes

  1. Start it. Run pnpm install then pnpm dev, or pull the Docker image ghcr.io/thetechbasket/index-now-server:latest. It listens on port 3020 and needs Node 22 or newer.
  2. Add a site. Enter the domain, copy the generated key file and host it at https://your-domain/<key>.txt.
  3. Submit. Press Submit, pick a schedule, or point your CMS or build pipeline at the webhook.
  4. Go to production. Run pnpm build, then pnpm start with an AUTH_SECRET. The database lives at ./data/indexnow.db, so backing up that file backs up everything.

Good to know

  • It is version 0.9.0, so expect changes before 1.0.
  • IndexNow reaches Bing, Yandex and the other engines that take part. Google does not, so keep your sitemap in Search Console for Google.
  • AUTH_ENABLED=false is for trusted networks only.
  • The MCP server uses stdio, so the agent has to run on the same machine as the database.

Questions

What is IndexNow?
IndexNow is an open protocol that lets a site tell search engines which URLs are new, changed or removed, instead of waiting for a crawl. You prove ownership by hosting a key file, then send the URLs to api.indexnow.org.
What is IndexNow Server?
A self-hosted dashboard that does the IndexNow work for many sites at once. It manages keys, reads your sitemaps, submits only what changed, and runs on a schedule or from a webhook.
Is IndexNow Server free?
Yes. It is MIT licensed and free to self-host, from source or with the Docker image on ghcr.io.
What do I need to run it?
Node 22 or newer and pnpm, or just Docker. It uses SQLite, so there is no database server to install. Migrations run when it starts.
Does it work with Google?
No. Google does not take part in IndexNow. Bing, Yandex and the other participating engines receive your submissions, so keep using your sitemap and Search Console for Google.
How does it avoid resubmitting the same URLs?
It stores the URLs it has seen for each site and compares every new sitemap fetch against them. Only new or changed URLs go out.

Try it on one site first

Issues and stars on GitHub help other people find it.