The open source rank tracker API you actually want: a production REST endpoint that tracks SERP keyword positions, monitors competitor displacement, fires rank change alerts, and measures citation velocity — with no infrastructure to run, no proxy rotation to manage, and no CAPTCHA headaches. $0.002 per call — lower than SerpWatch's public per-check rate. 5,000 free credits (24-hour trial), no credit card.
Most rank tracking tools are built for marketing dashboards, not developers. Subscription costs start at $29–$224+/month, seat fees compound quickly, and getting raw data out for your own pipelines requires CSV exports or undocumented APIs. Open source alternatives exist, but they require you to stand up servers, rotate proxies, handle CAPTCHA challenges, and maintain the scraper as search engines update their pages.
PixelAPI's geomind-rank-tracker is the middle path: a fully managed, pay-per-call REST API that gives you clean JSON rank data with no infrastructure overhead. It behaves like open source in the ways that matter for developers — transparent pricing, REST-first design, no lock-in, works in any language — while handling the messy reliability layer so you don't have to.
Sign up, copy your key from the dashboard, and call the competitor displacement endpoint with your target keyword. You get back a structured JSON list of domains, their current SERP positions, position deltas, and estimated organic traffic. No SDK required — a plain HTTP GET is enough to start.
# Track keyword positions — open source rank tracker API
curl "https://api.pixelapi.dev/v1/geomind/competitor/displacement?keyword=seo+rank+tracker" \
-H "Authorization: Bearer YOUR_API_KEY"
# Response:
# {
# "keyword": "seo rank tracker",
# "scanned_at": "2026-10-09T01:00:00Z",
# "competitors": [
# {"domain": "semrush.com", "position": 1, "change": 0, "estimated_traffic": 42500},
# {"domain": "ahrefs.com", "position": 2, "change": 1, "estimated_traffic": 38200},
# {"domain": "moz.com", "position": 3, "change": -1, "estimated_traffic": 29100}
# ],
# "total_competitors": 5,
# "displacement_alerts": 2
# }
# Get active rank change alerts
curl "https://api.pixelapi.dev/v1/geomind/alerts" \
-H "Authorization: Bearer YOUR_API_KEY"
# Save a rank scan snapshot
curl -X POST "https://api.pixelapi.dev/v1/geomind/scan/save" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"mysite.com","keyword":"seo rank tracker","score":82,"grade":"A"}'
pip install pixelapi
---
from pixelapi import PixelAPI
client = PixelAPI(api_key="YOUR_API_KEY")
# Track SERP keyword positions
result = client.geomind.competitor_displacement(keyword="seo rank tracker")
for c in result["competitors"]:
print(c["domain"], c["position"], c["change"])
# Get rank change alerts (drop, rise, competitor_new, sentiment_spike)
alerts = client.geomind.alerts()
drops = [a for a in alerts["alerts"] if a["type"] == "rank_drop" and a["severity"] == "high"]
print(f"{len(drops)} high-severity rank drop alerts")
# Save and retrieve rank scan history
client.geomind.scan_save(url="mysite.com", keyword="seo rank tracker", score=82, grade="A")
history = client.geomind.scan_history()
print(history["scans"])
npm install pixelapi
---
import { PixelAPI } from "pixelapi";
const client = new PixelAPI({ apiKey: process.env.PIXELAPI_KEY });
// Track keyword positions
const result = await client.geomind.competitorDisplacement({ keyword: "seo rank tracker" });
result.competitors.forEach(c =>
console.log(`${c.domain}: #${c.position} (${c.change >= 0 ? "+" : ""}${c.change})`)
);
// Poll alerts and fire Slack notification on rank drop
const alerts = await client.geomind.alerts();
const drops = alerts.alerts.filter(a => a.type === "rank_drop" && a.severity === "high");
if (drops.length > 0) notifySlack(drops);
// Check citation velocity for trending keywords
const vel = await client.geomind.citationVelocity({ keyword: "seo rank tracker" });
console.log(`24h citations: ${vel.velocity_24h}, acceleration: ${vel.acceleration}`);
composer require pixelapi/pixelapi
---
<?php
use PixelAPI\Client;
$client = new Client(getenv("PIXELAPI_KEY"));
// Track keyword positions
$result = $client->geomind->competitorDisplacement(["keyword" => "seo rank tracker"]);
foreach ($result["competitors"] as $c) {
echo "{$c['domain']} — position {$c['position']} (delta: {$c['change']})\n";
}
// Get citation velocity data
$velocity = $client->geomind->citationVelocity(["keyword" => "seo rank tracker"]);
echo "Citations in last 24h: {$velocity['velocity_24h']}\n";
echo "7-day acceleration: {$velocity['acceleration']}\n";
// Retrieve rank scan history for client reports
$history = $client->geomind->scanHistory();
foreach ($history["scans"] as $scan) {
echo "{$scan['keyword']}: {$scan['grade']} ({$scan['score']}/100) @ {$scan['timestamp']}\n";
}
gem install pixelapi
---
require "pixelapi"
client = PixelAPI::Client.new(api_key: ENV["PIXELAPI_KEY"])
# Track keyword positions
result = client.geomind.competitor_displacement(keyword: "seo rank tracker")
result["competitors"].each do |c|
puts "#{c['domain']}: ##{c['position']} (change: #{c['change']})"
end
# Save a rank scan snapshot for historical tracking
client.geomind.scan_save(
url: "mysite.com",
keyword: "seo rank tracker",
score: 82,
grade: "A"
)
# Get keyword sentiment (bullish/bearish/neutral)
sentiment = client.geomind.sentiment(keyword: "seo rank tracker")
puts "Sentiment: #{sentiment['overall']} (score: #{sentiment['score']})"
go get github.com/pixelapi/pixelapi-go
---
import (
"fmt"
pixelapi "github.com/pixelapi/pixelapi-go"
)
client := pixelapi.New("YOUR_API_KEY")
// Track keyword positions
result, err := client.Geomind.CompetitorDisplacement("seo rank tracker")
if err != nil { panic(err) }
for _, c := range result.Competitors {
fmt.Printf("%s: position %d (change %+d)\n", c.Domain, c.Position, c.Change)
}
// Get active rank alerts
alerts, err := client.Geomind.Alerts()
if err != nil { panic(err) }
fmt.Printf("%d active alerts (%d total)\n", alerts.ActiveAlerts, alerts.TotalAlerts)
// Get citation velocity for trending keyword detection
vel, err := client.Geomind.CitationVelocity("seo rank tracker")
if err != nil { panic(err) }
fmt.Printf("24h velocity: %d, 7d trend: %v\n", vel.Velocity24h, vel.Trend7d)
Open source self-hosted rank trackers have real costs: server compute, proxy subscriptions, bandwidth, and engineering time to maintain scrapers. Here is how PixelAPI's pay-per-call pricing compares to self-hosting and to commercial subscription tools:
| Provider | Pricing model | Per-check cost | Infrastructure required | Free tier |
|---|---|---|---|---|
| PixelAPI geomind-rank-tracker | Pay per API call | $0.002 / call | None — REST API | 5,000 credits (24-hour trial), no card |
| SerpWatch | Subscription (checks/month) | ~$0.0039/check (annual Starter: $29/mo ÷ 7,500 checks) | None (SaaS) | 14-day money-back guarantee |
| AccuRanker | Subscription (keywords tracked) | See accuranker.com/pricing | None (SaaS) | No public free tier |
| SEMrush API | Add-on to subscription plan | See developer.semrush.com | None (SaaS) | Limited free API rows on paid plan |
| Ahrefs API | Subscription add-on | See docs.ahrefs.com | None (SaaS) | See ahrefs.com/pricing |
| Self-hosted open source (e.g. SerpScraper) | Server + proxy cost | $0.005–$0.02+ when cloud + proxy costs are counted | VPS, proxy service, maintenance required | Free software license — not free to run |
Pricing verified from each rival's public pricing page October 2026. SerpWatch per-check rate calculated from annual Starter plan ($29/month ÷ 7,500 checks = $0.0039/check). AccuRanker, SEMrush, and Ahrefs API costs require a subscription or sales contact and do not publish a simple per-call rate. PixelAPI's price is set at exactly half of SerpWatch's public per-check rate per our standing pricing rule.
Every endpoint returns clean JSON. Here are the response structures for each geomind-rank-tracker endpoint:
GET /v1/geomind/competitor/displacement?keyword=...
Returns competitors array: domain, position (1–100), position change delta vs prior scan, and estimated organic traffic. Also includes total_competitors, displacement_alerts, and scan timestamp.
GET /v1/geomind/alerts
Returns total_alerts, active_alerts, and an alerts array. Alert types: rank_drop, rank_rise, competitor_new, sentiment_spike, citation_surge. Each alert includes severity (low/medium/high), keyword, message, and ISO timestamp.
GET /v1/geomind/scan/history — returns total_scans and a scans array: id, url, keyword, numeric score, letter grade (A+/A/B+/B/C), and ISO timestamp.POST /v1/geomind/scan/save — persist your own rank measurement with url, keyword, score, and grade. Returns the assigned scan_id.
GET /v1/geomind/citation/velocity?keyword=...
Returns total_citations, velocity windows (velocity_24h, velocity_7d, velocity_30d), a 7-day trend array, acceleration score, and top_citing_sources with first-seen dates.
GET /v1/geomind/sentiment?keyword=...
Returns overall rating (bullish/bearish/neutral), 0–1 score, per-source breakdowns (news, social, blogs), a 7-day trend_7d array, and top_sentiments with source headlines.
GET /v1/geomind/agent/protocol
Returns the agent's capabilities list (geo_scan, competitor_analysis, sentiment_tracking, citation_tracking, alert_management, keyword_discovery), status, and a full endpoints map — useful for orchestration pipelines that discover available operations at runtime.
These are the most common patterns developers build with the geomind-rank-tracker API. Each is a self-contained script you can run in any language — no dependencies beyond an HTTP client.
Schedule a daily cron that calls /competitor/displacement for your target keywords and writes positions to a time-series store (Postgres, InfluxDB, Google Sheets) for trend charts.
Poll /alerts every hour; filter for type=rank_drop and severity=high; push Slack or PagerDuty notifications when a key page drops more than 3 positions.
Compare competitor positions across a keyword set to find gaps where rivals rank #1–#3 but your domain is outside the top 10 — then prioritize those pages for content updates.
Pair /citation/velocity with /sentiment: keywords with high 24h velocity and a bullish score are trending — invest in fresh content before competitors do.
Use /scan/save to store weekly client rank snapshots and /scan/history to pull them into branded PDF reports — no dedicated reporting database required.
Stream rank data into Google Sheets or Looker Studio via a lightweight scheduled function — one API key, no per-seat licensing, unlimited keywords.
Track product-category keywords at scale — pull displacement data for 1,000+ keywords per day without per-seat dashboard costs typical of subscription tools.
Cross-reference citation velocity acceleration with page publish dates: pages with high citation velocity but old content dates are prime candidates for a refresh.
Use /agent/protocol to enumerate capabilities and orchestrate multi-step workflows from a Python or Node script — no dashboard interaction required.
The geomind-rank-tracker API integrates with any tool that can make an HTTP request. Common patterns:
Use the PixelAPI HTTP action in Zapier or Make to schedule keyword rank checks and push results into Google Sheets, Airtable, Notion, or your CRM — no custom code needed.
A 30-line Apps Script function calling the displacement endpoint populates a sheet with daily position history. Free, shareable with clients instantly, no extra tooling.
Write rank data to BigQuery via a daily Cloud Function, then connect Looker Studio for live position charts. Full history with no per-seat dashboard fees.
A 20-line Lambda polls /alerts and posts rank-drop notifications to your #seo Slack channel, including keyword, old position, new position, and severity.
Add a rank-check workflow that runs on push to content branches — fail the deploy if target keywords drop below a threshold, surfacing SEO regressions before they go live.
Fetch multi-keyword position data into a pandas DataFrame for ad-hoc analysis, traffic correlation experiments, or cohort-based content A/B tests in notebooks.
Pay per API call, not a $117–$417+/month subscription. No seat limits. Free trial with 5,000 credits — no sales call, no credit card. Full JSON rank data from day one without a full SEMrush enterprise contract.
Same structured keyword rank data via REST. Transparent $0.002/call pricing vs an opaque API add-on cost. Suitable for developers who need programmatic access without a full Ahrefs subscription plan.
$0.002/call vs $0.0039/check minimum (SerpWatch annual Starter). No monthly minimum — pay only for calls made. Ideal for burst usage or sporadic rank checks that don't justify a monthly seat fee.
AccuRanker requires a minimum plan starting at ~$224/month. PixelAPI has no monthly minimum — 1,000 rank checks costs $2.00. See pixelapi.dev/pricing for full plan comparison.
Rate limits by plan: 20 requests/minute on the free trial, 60 on Starter, 120 on Pro, and 300 on Scale. Exceeding the limit returns HTTP 429 with a Retry-After header. Recommended: exponential backoff starting at 2 seconds, doubling on each retry up to 30 seconds. The Python and Node SDKs handle this automatically.
# Python SDK auto-retries 429 with backoff from pixelapi import PixelAPI client = PixelAPI(api_key="...", max_retries=4) # Retries on 429 automatically — no manual retry loop needed result = client.geomind.competitor_displacement(keyword="seo rank tracker")
Common error responses:
| HTTP status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing or invalid API key in the Authorization header |
| 402 | trial_ended_subscribe | Free trial credits exhausted — upgrade to a paid plan at pixelapi.dev/pricing |
| 422 | validation_error | Missing required query parameter (e.g. keyword is required for /displacement and /sentiment) |
| 429 | rate_limit_exceeded | Too many requests — back off and retry after the Retry-After header value (seconds) |
| 500 | server_error | Transient error — retry with exponential backoff; contact support if it persists |
An open source rank tracker API is a programmable interface for checking SERP keyword positions. Some developers self-host open-source scraper projects; others use a managed REST API like PixelAPI's geomind-rank-tracker at $0.002/call — no infrastructure, no maintenance, just call the endpoint and get structured JSON back.
Yes. New accounts get 5,000 free credits during a 24-hour trial — enough for 2,500 rank checks — with no credit card required. After the trial, calls cost $0.002 each, lower than SerpWatch's public per-check rate of $0.0039 (October 2026 pricing).
Self-hosted open source rank trackers require server provisioning, proxy rotation, CAPTCHA handling, ongoing maintenance, and SERP rate-limit management. PixelAPI handles all of that for you. At $0.002/call, 10,000 daily checks costs $20/month — often cheaper than the cloud compute and proxy costs of self-hosting once your engineering time is factored in.
Six endpoints: GET /v1/geomind/competitor/displacement (SERP positions + traffic), GET /v1/geomind/alerts (rank change alerts), GET /v1/geomind/scan/history and POST /v1/geomind/scan/save (rank snapshot history), GET /v1/geomind/citation/velocity (trend velocity), GET /v1/geomind/sentiment (keyword sentiment), and GET /v1/geomind/agent/protocol (capability discovery for orchestration pipelines).
The /v1/geomind/competitor/displacement endpoint returns the queried keyword, scan timestamp, and a competitors array. Each entry has domain, position (integer 1–100), change delta (positive = rose, negative = dropped), and estimated_traffic. Top-level fields include total_competitors and displacement_alerts count.
GET /v1/geomind/alerts returns all active alerts for your tracked keywords. Alert types: rank_drop, rank_rise, competitor_new (a new domain entering the top 5), sentiment_spike, and citation_surge. Each alert carries type, severity (low/medium/high), keyword, a human-readable message, and an ISO timestamp.
Yes. POST /v1/geomind/scan/save with JSON body {"url":"mysite.com","keyword":"seo rank tracker","score":82,"grade":"A"} persists a rank snapshot and returns a scan_id. Retrieve all saved scans via GET /v1/geomind/scan/history, which returns a list sorted by most recent timestamp. Useful for weekly client rank reports without a separate database.
Yes — pip install pixelapi. Official SDKs also available for Node.js (npm install pixelapi), PHP (Composer), Ruby (Gem), Go (go get), and Java/Kotlin. All SDKs handle authentication, 429 retry with exponential backoff, and response deserialization automatically.
20 requests/minute on the free trial, 60 on Starter, 120 on Pro, and 300 on Scale. Exceeding the limit returns HTTP 429 with a Retry-After header. Higher limits for large-scale rank monitoring pipelines — email support@pixelapi.dev with your expected call volume.
SEMrush and Ahrefs charge $117–$417+/month in subscription fees plus API add-on costs. PixelAPI charges $0.002 per call — no monthly minimum. For developers who need programmatic access to rank data without a full enterprise subscription, PixelAPI is significantly cheaper for burst or moderate usage. See the full comparison at PixelAPI vs SEMrush and PixelAPI vs Ahrefs.
Yes. PixelAPI is a registered Indian business. We issue GST invoices — 18% IGST for international clients, CGST/SGST for domestic. Invoice download is built into the dashboard at pixelapi.dev/app.