Self-hosted indexing workspace

From campaign to crawl-ready URLs

Organize links in campaigns, use a drip window for your own scheduling, and push URLs through IndexNow — transparent, credit-based, and built for teams who outgrow spreadsheets.

Not affiliated with third-party indexers — your stack, your keys, your data.

Queue overview What you get in-app
IndexNow ready
Campaign batches
Name, drip days, bulk paste
100 free credits
After you subscribe to the Free plan
Per-user workspace
Isolated history & API option
Your keys · Your database · IndexNow when you configure it

How It Works

Four steps from a named campaign to IndexNow-ready URLs — on your server, under your control.

Create a campaign

Sign in to your dashboard and open New campaign. Give your batch a clear name so you can find it later.

Add your links

Paste one URL per line or drop a list from your machine. Invalid lines are skipped; duplicates already in your account won’t use extra credits.

Set drip window

Choose how many days you want to spread the campaign for your own planning. The value is stored with the campaign for scheduling logic you may add later.

Submit & track

Run the campaign. URLs join your queue; with IndexNow configured, notifications can go out on insert or via cron. Crawl timing still depends on search engines.

URL Indexer pricing

Start on Free, then pick a light monthly pack — prices stay low because you self-host. Wire Stripe, PayPal, or manual invoicing in production.

Starter

$9/mo
  • 500 credits per month
  • ~$0.018 / credit
  • Full app features & email support
Subscribe now

Growth

$19/mo
  • 1,500 credits per month
  • ~$0.013 / credit
  • Full app features & email support
Subscribe now

Pro

$29/mo
  • 4,000 credits per month
  • ~$0.007 / credit
  • Full app features & email support
Subscribe now

Business

$49/mo
  • 12,000 credits per month
  • ~$0.004 / credit
  • Higher volume & shared inbox support
Subscribe now

Agency

$79/mo
  • 30,000 credits per month
  • ~$0.0026 / credit
  • Multi-seat & white-label friendly
Subscribe now

Set SALES_EMAIL in config.php for billing contact. Paid tiers are illustrative until you connect payments and grant credits in the database.

Essential information

Self-hosted means you run the app on your server and database. Below is what operators and teams usually need to know before going live.

Data & privacy

URLs, campaign names, and account details stay in your MySQL database. This site does not send your link lists to us or to a vendor “cloud” unless you configure outbound calls (e.g. IndexNow to Microsoft’s public endpoint). Back up your database and restrict who can access the server.

Credits & accounts

Starter pack: 100 credits after you activate the Free plan inside the app. Each new URL stored for a user costs one credit; duplicates already in that user’s account do not charge again.

Paid top-ups are up to you — wire your own billing and adjust balances as needed.

Security checklist

  • Change default admin password (operator login) and user passwords after install.
  • Set a strong EXTERNAL_API_KEY and CRON_SECRET in config.php.
  • Use HTTPS in production; keep PHP and MySQL patched.
  • Limit who can reach admin_login.php (IP allowlist / HTTP auth optional).

Server requirements

  • PHP 8.0+ with PDO MySQL enabled.
  • MySQL or MariaDB — import schema.sql once (creates database, users, campaigns, URLs).
  • Writable session storage; outbound HTTPS if you use IndexNow or external APIs.
  • Optional: CLI or scheduled task for cron.php to process pending URLs in batches.

Database name and credentials are set in config.php (DB_* constants).

IndexNow, cron & API

IndexNow lets you notify participating search engines about URL changes. You host a key file on the same host as the URLs you submit and set INDEXNOW_KEY and INDEXNOW_KEY_LOCATION in config. Indexing in SERPs is still not guaranteed — it only starts the notification pipeline.

  • Auto-submit on insert can be toggled with AUTO_SUBMIT_ON_INSERT.
  • Cron (cron.php) processes queued URLs; protect HTTP triggers with CRON_SECRET.
  • JSON API at api/submit.php uses your secret key; submissions attach to the system API user and do not consume end-user credits.
Google Indexing API is optional and off by default (GOOGLE_INDEXING_ENABLED). Enabling it requires your own service account and implementation work in code.

FAQ

It confirms you accept the starter terms and unlocks your 100 credits in one step — no card required.

Each new URL stored for your account costs one credit. If the same URL was already saved for you, it does not charge again.

No. IndexNow notifies search engines; crawl and index timing depends on many factors. This tool helps you submit and track your side of the workflow.

Create an IndexNow key, host the key file at a public URL on the same host as the URLs you submit, and set INDEXNOW_KEY and INDEXNOW_KEY_LOCATION in config.php. If the URL host does not match the key file host, the app will keep URLs pending or warn according to your settings.

Not always. With AUTO_SUBMIT_ON_INSERT enabled and IndexNow correctly configured, many URLs are sent immediately. Cron (cron.php) is still useful for retries, bulk backlogs, or if auto-submit is off — run it via OS scheduler or a guarded HTTP call with your secret.

api/submit.php accepts a URL and your EXTERNAL_API_KEY. Inserts are attributed to the internal API user (see EXTERNAL_API_USER_ID) and do not deduct normal user credits — useful for Zapier-style automation or your own backends. Protect the key like a password.

This is self-hosted software: your team or host is responsible for uptime, backups, and updates. The UI is a starting point — document your own runbooks, contact email (footer), and escalation path for end users if you resell access.