Self-hosted keyword rank tracker: bring your own SERP API key, track unlimited keywords across projects, get daily position history, competitor comparisons, and big-move alerts.
AccuRanker starts at $129/mo for 1,000 keywords. Serpdeck is $39, once — it pays for itself in 9 days. No seat limits, no keyword caps, no monthly invoice ever again. You bring a metered SERP API key (pennies per search) and Serpdeck does the scheduling, history, competitor tracking, and alerting.
- Unlimited projects, keywords, and competitors — no per-seat or per-keyword pricing tiers
- Daily automatic checks on a per-project schedule (pick the hour), plus manual "check now" for a single keyword or an entire project
- Position history for every keyword, charted with an inverted axis (rank #1 at the top, like it should be) and competitor overlay lines
- Competitor comparisons — track any number of rival domains per project, see their position alongside yours on every check
- Big-move alerts — webhook or email alerts when a keyword moves N+ spots, enters the top 10, or falls out of it
- CSV export at the project level (current/best/deltas) or full per-keyword history
- SERP snapshot — the full top-100 result set is stored with every check, browsable per keyword
- Driver-based, BYO API key — SerpAPI, DataForSEO, or a generic JSON-mapping driver for any other SERP API or self-hosted scraper you already have
- Crash-safe job queue — checks run through a SQLite-backed queue; a crash mid-check just means the job goes back to
pendingon restart, nothing is lost or double-fired - One process, one SQLite file — Node + Express, deploys to a $5 VPS with docker compose, or runs as a Windows desktop app
Scraping Google's search results directly is a non-starter for a product we sell to other people, for four concrete reasons:
- Google blocks it, hard. Datacenter and VPS IPs get CAPTCHA-walled within dozens of queries. A tool that "sometimes works, sometimes gets blocked" isn't a product — it's a support ticket generator.
- It's a ToS violation. Scraping Google's SERPs directly violates Google's Terms of Service. Shipping that as the core mechanism of a paid product is legal exposure we're not willing to carry, and shouldn't ask customers to carry either.
- Wrong results without proper geo/device parameters anyway. Real rank tracking needs accurate country, language, and device targeting — the exact infrastructure (rotating proxies, real Chrome fingerprints, geo-IP pools) that SERP API providers already operate at scale. Rolling our own worse version of that infrastructure doesn't make the product better, it makes it flakier.
- Every Google markup change breaks every install. A scraper is a maintenance treadmill tied to Google's frontend HTML. A documented JSON API is a contract; a scraped HTML page is not.
SERP APIs like SerpAPI ($75 for 5,000 searches) and DataForSEO ($0.0006–$0.002 per SERP, pay-as-you-go) already solve proxies, CAPTCHAs, geo-targeting, and result parsing — for fractions of a cent per keyword. The one-time-purchase economics of Serpdeck only work because the recurring cost is the metered SERP API you already have an account with, not a scraping arms race we'd have to keep winning against Google forever.
Serpdeck is therefore driver-based, BYO-key only. There is no direct-scrape mode, and there never will be. If you don't have a SERP API key yet, SerpAPI's free tier (100 searches/month) is enough to try Serpdeck end-to-end before you commit to anything.
git clone <this-repo> serpdeck
cd serpdeck
cp .env.example .env # set ADMIN_PASSWORD at minimum
npm install # runs postinstall to vendor native bindings
npm run build # builds the React frontend
npm start # http://localhost:5339Then open the app, go to Settings, pick a driver (SerpAPI / DataForSEO / Generic), paste in your API key, hit Test connection, and you're tracking keywords.
cp .env.example .env
docker compose up -d --buildnpm run desktop # dev mode
npm run dist # builds a distributable NSIS installer into release/The desktop build stores its SQLite database in your Windows user profile (%APPDATA%/Serpdeck) and auto-logs you in — no password prompt on your own machine.
- Backend: Node.js, Express, better-sqlite3 (WAL mode), a SQLite-backed crash-safe job queue, nodemailer for SMTP alerts,
tldtsfor registrable-domain matching - Frontend: React 18, Vite, Tailwind CSS v4, Framer Motion, Recharts, Lucide icons
- Desktop: Electron wrapper around the same Express server, listening on an OS-assigned local port
- Drivers: SerpAPI, DataForSEO (Google Organic Live Advanced), and a Generic JSON-mapping driver for anything else that returns JSON
| Serpdeck | AccuRanker | Wincher | Mangools (SERPWatcher) | SE Ranking | Nightwatch | |
|---|---|---|---|---|---|---|
| Pricing | $39 once | from $129/mo (1k kw) | $32–$59/mo | from $29.90/mo | from $65/mo | from $32/mo |
| Keyword limit | Unlimited | Tiered by plan | Tiered by plan | Tiered by plan | Tiered by plan | Tiered by plan |
| Self-hosted | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Your data, your server | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Recurring cost | Your SERP API usage only (~pennies) | Full subscription | Full subscription | Full subscription | Full subscription | Full subscription |
| Competitor tracking | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Cost-over-time math: AccuRanker's cheapest plan is $129/mo for 1,000 keywords — $1,548/year. Serpdeck is a one-time $39, and even a fairly active install (100 keywords checked daily via DataForSEO) runs $2–$6/month in API fees. Serpdeck pays for itself in about 9 days compared to AccuRanker, and every month after that is pure savings.
Grab the packaged installer / hosted deploy on Whop: https://whop.com/onetime-suite
Source in this repo is MIT-licensed — self-host it for free forever. The Whop listing is for people who'd rather pay for the packaged installer and updates than run git clone.
MIT — see LICENSE.
