{"slug": "open-source-self-hosted-seo-dashboard-that-runs-on-4-mo-of-api-credits", "title": "Open-source, self-hosted SEO dashboard that runs on –$4/mo of API credits", "summary": "A developer released SEO Command Center, an open-source, self-hosted SEO dashboard that runs on DataForSEO's pay-as-you-go API for roughly $4 per month in API credits, undercutting subscription-based tools like Ahrefs and Local Falcon. The platform offers rank tracking, keyword research, competitor gap analysis, AI Overview visibility, site audits, link gap analysis, and local map-pack grids, all without subscription fees or keyword caps.", "body_md": "**A self-hosted SEO platform that costs ~$4/month instead of $139/month.**\n\nRank tracking · keyword research · competitor gaps · AI Overview visibility · site audits · link gaps · local map-pack grids\n\nSEO tools charge subscription prices for data they buy wholesale. Under the hood they're calling the same SERP APIs you can call yourself.\n\nSEO Command Center is the whole dashboard, self-hosted, on top of [DataForSEO](https://dataforseo.com/?aff=254685)'s pay-as-you-go API. No subscription, no seat pricing, no keyword caps — you pay cents for the exact SERPs you pull:\n\n| SEO Command Center |\n|\n|---|\n\n[Ahrefs Lite](https://ahrefs.com/pricing)\n\n[Local Falcon](https://www.localfalcon.com/pricing)\n\n**pay-as-you-go (~$4/mo typical*)*** Measured on a real deployment: 570 keywords across 5 sites updated daily, plus weekly local map grids and brand-SERP checks — **$3.55/month** in API costs. A 7×7 map-grid scan is $0.29; a keyword-research pull is ~$0.02.\n\nSeven pages, one dark command center, everything driven from the browser:\n\n| Page | What it does |\n|---|---|\nRankings |\nDaily positions, 1d/7d/30d deltas, best-ever, sparklines, history charts, visibility score, GSC impressions/clicks, mobile ranks, CSV export |\nResearch |\nLive keyword ideas from seeds or any competitor's domain — volume, CPC, competition — checkbox → tracked |\nCompetitors |\nWho actually outranks you + every keyword they rank for that you don't |\nAI Visibility |\nWhich of your keywords trigger Google AI Overviews, whether you're cited, and who is |\nSite Health |\nZero-cost technical crawler: broken links, duplicate titles, missing metas, thin content, per-site score |\nLink Gap |\nDomains linking to your rivals but not you, junk-filtered and classified by how to actually get the link |\nMap Grid |\nLocalFalcon-style GPS grid: your Google map-pack rank from 49+ points around your city, plus who holds the top 3 at every pin |\n\nMore screenshots in [docs/screenshots](/testedmedia/seo-command-center/blob/main/docs/screenshots).\n\n**Try it with sample data first (no account needed):**\n\n```\ngit clone https://github.com/testedmedia/seo-command-center.git\ncd seo-command-center\npython3 demo.py && python3 worker.py serve\n# → http://localhost:8000\n```\n\n**Track your own site:**\n\n```\npython3 setup.py            # guided: DataForSEO creds (validated live), your sites, options\npython3 worker.py run all   # first pull — typically $0.10-0.50\npython3 worker.py serve     # local dashboard\n```\n\nThat's it. Python 3.9+ standard library only — no pip install, no Docker, no database server (SQLite file).\n\n| Requirement | For | Cost |\n|---|---|---|\n| Python 3.9+ | everything | free |\n|\n\n`worker.py deploy`\n\n(wrangler)Local mode is read-only pages. Hosted mode (free Cloudflare Pages) unlocks the buttons: refresh any report, add keywords/sites, delete keywords, live research, and map-grid setup from the browser — protected by a login page (orange matrix included).\n\n```\npython3 worker.py deploy-config   # creates the Pages project + queue, pushes your secrets\npython3 worker.py deploy          # ship the dashboard\npython3 worker.py loop            # poll the queue + daily auto-refresh (cron/systemd/launchd)\n```\n\nButtons queue work into Cloudflare KV; `worker.py loop`\n\non any machine (a laptop, a $4 VPS, a Raspberry Pi) picks jobs up within 2 minutes, runs them, and redeploys. Your API credentials only ever live in your `.env`\n\nand as encrypted Pages secrets.\n\n- Create an OAuth client (Desktop) in\n[Google Cloud Console](https://console.cloud.google.com/apis/credentials), enable the Search Console API. - Save the client JSON to\n`credentials/gsc-client-secret.json`\n\n. - Run any OAuth helper to get a refresh token into\n`credentials/gsc-tokens.json`\n\n(`{\"refresh_token\": \"...\"}`\n\n). - That's it — rankings runs will merge impressions, clicks and Google-reported positions, and auto-discover keywords you already get traffic for.\n\n```\n┌────────────────────┐     ┌──────────────────────┐     ┌─────────────────────┐\n│  DataForSEO API    │ ←── │  tracker/*.py        │ ──→ │  data/ranks.db      │\n│  (SERPs, keywords, │     │  stdlib Python,      │     │  (SQLite, all       │\n│   maps, backlinks) │     │  one file per report │     │   history forever)  │\n└────────────────────┘     └──────────┬───────────┘     └─────────────────────┘\n                                      │ renders\n                                      ▼\n                           ┌──────────────────────┐     ┌─────────────────────┐\n                           │  site/*.html         │ ──→ │  localhost or       │\n                           │  self-contained dark │     │  Cloudflare Pages   │\n                           │  dashboard pages     │     │  (+ auth, buttons)  │\n                           └──────────────────────┘     └─────────────────────┘\n```\n\n**No framework.** Each report is one Python file that pulls data, stores history in SQLite, and renders a self-contained HTML page.**No backend server.** Hosted interactivity is three tiny Cloudflare Pages Functions (auth, queue, research proxy).**No lock-in.** Your entire SEO history is one SQLite file you can query directly.\n\n- Manual refreshes are capped per tool per day (default 2) and research pulls per day (default 20) — a shared dashboard can't drain your balance.\n- Every research pull and grid save shows its dollar cost before/after running.\n- The keyword cap per site (default 100, configurable) bounds the daily tracking spend.\n- Weekly-only for the expensive stuff (map grids, true-SERP brand checks) by default.\n\n**Is the ranking data as good as Semrush/Ahrefs?**\nIt's the same class of data — DataForSEO is one of the SERP providers this industry runs on. Tracked positions come from live Google SERPs (top 100, any country/language).\n\n**Can I track competitors' sites too?**\nYes — add any domain as a site, or use Research → \"Steal from a competitor\" and the Competitors gap report.\n\n**Multiple sites?**\nUnlimited. Cost scales with keywords, not sites.\n\n**White-label / client dashboards?**\nOut of the box it carries the Tested Media logo. Set `BRAND_NAME`\n\n(and optionally `LOGO_FILE`\n\n) in `.env`\n\nto rebrand everything — sidebar, login page, titles. Deploy once per client, each with its own access key.\n\n**Why not just use rank tracker X?**\nIf you're happy paying monthly SaaS pricing, do that. This is for people who want the whole stack, their own data, and a bill that rounds to a coffee.\n\nPRs welcome. The codebase is intentionally boring: stdlib Python, one file per report, no build step. Add a report = one script that writes JSON + HTML, one nav entry.", "url": "https://wpnews.pro/news/open-source-self-hosted-seo-dashboard-that-runs-on-4-mo-of-api-credits", "canonical_source": "https://github.com/testedmedia/seo-command-center", "published_at": "2026-07-11 16:49:55+00:00", "updated_at": "2026-07-11 17:05:04.004726+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["DataForSEO", "Ahrefs", "Local Falcon", "Google Cloud Console", "Cloudflare Pages", "SEO Command Center"], "alternates": {"html": "https://wpnews.pro/news/open-source-self-hosted-seo-dashboard-that-runs-on-4-mo-of-api-credits", "markdown": "https://wpnews.pro/news/open-source-self-hosted-seo-dashboard-that-runs-on-4-mo-of-api-credits.md", "text": "https://wpnews.pro/news/open-source-self-hosted-seo-dashboard-that-runs-on-4-mo-of-api-credits.txt", "jsonld": "https://wpnews.pro/news/open-source-self-hosted-seo-dashboard-that-runs-on-4-mo-of-api-credits.jsonld"}}