What You Get
The Ranking Data Layer for Any Tracker
Managed rank trackers hand you a dashboard. Serpent hands you the data underneath one — a clean position field on every result you can pipe into your own database, dashboard, client report, or AI agent. You own the keywords, the schedule, and the storage.
Daily Rank Tracking
Schedule the same keyword call on any interval and store each position. Build a time series of where every keyword ranks — the foundation of any rank tracker — without paying per-tracked-keyword pricing.
On-Demand SERP Checker
Need a one-off answer to "where does this keyword rank right now?" One call returns the full result set with positions — the same endpoint doubles as a SERP and rank checker API.
Competitor Monitoring
Pull the full top-100 for a keyword and watch which domains move in and out. Track competitor rankings on the exact same keywords you do, with one consistent response shape.
Country-Level Tracking
Track the same keyword across 50+ countries with the country parameter. See the rankings a searcher in the US, UK, Germany, or India actually gets — localized result sets, one code path.
Pixel-Accurate Visibility
Add pixel_position=true and each result also returns its exact y-coordinate on the page. Rank #3 below an AI Overview and four ads is a very different result than rank #3 at the top — track what users actually see.
Automated Client Reports
Feed positions straight into white-label SEO reports. Because the data is structured and yours, you can brand it, schedule it, and ship ranking reports to clients without a third-party tool in the loop.
Quick Start
Check a Ranking in One Call
Send a keyword to /api/search or /api/search/quick. Every organic result returns its position — find your domain and read its rank. No special flag required; the position field ships on every search.
# Top 100 Google results for a keyword, each with its position curl "https://apiserpent.com/api/search?q=best+running+shoes&engine=google&country=us&num=100" \ -H "X-API-Key: YOUR_API_KEY"
import requests def get_rank(keyword, domain, engine="google", country="us"): resp = requests.get( "https://apiserpent.com/api/search", headers={"X-API-Key": "YOUR_API_KEY"}, params={"q": keyword, "engine": engine, "country": country, "num": 100}, ) for r in resp.json()["results"]["organic"]: if domain in r["url"]: return r["position"] return None # not in top 100 print(get_rank("best running shoes", "yoursite.com")) # Schedule this daily and store each result to build a rank tracker
const engines = ["google", "bing", "yahoo", "ddg"]; for (const engine of engines) { const r = await fetch( `https://apiserpent.com/api/search?q=serp+api&engine=${engine}&country=us&num=50`, { headers: { "X-API-Key": "YOUR_API_KEY" } } ); const { results } = await r.json(); const hit = results.organic.find(x => x.url.includes("yoursite.com")); console.log(engine, hit ? hit.position : "not ranked"); }
{
"success": true,
"engine": "google",
"results": {
"organic": [
{
"position": 1, // 1-indexed rank — always present
"title": "…",
"url": "https://example.com",
"snippet": "…",
"pixel_position": 742 // only when pixel_position=true (paid)
},
{ "position": 2, "title": "…", "url": "…" },
{ "position": 3, "title": "…", "url": "…" }
]
},
"metadata": { "totalOrganicResults": 100 }
}
Parameters
Everything You Can Control
One endpoint, a handful of parameters. The same call works as an on-demand rank checker and as the engine behind a scheduled rank tracker.
google, bing, yahoo, or ddg. Track and compare a keyword's ranking across all four with identical code.us, gb, de, in, and 50+ more. Returns the rankings a searcher in that country sees. Country-level; city/postcode targeting is not supported.en, es, de…) to set result language. Auto-detected from country when omitted.100. Default 10.1–10. Positions stay sequential across pages.d, w, m, or y (day/week/month/year).true adds an integer pixel_position (exact y-coordinate from the top of the rendered desktop SERP) to every item. Paid tiers; desktop measurement.positiontitle, url, snippet on each result, plus metadata.totalOrganicResults for the count measured.Compare
Rank Tracking API vs. SerpApi & DataForSEO
All three return organic positions. Where Serpent differs is price, the included pixel position, and a genuine no-card free tier.
| Capability | Serpent API | SerpApi.com | DataForSEO |
|---|---|---|---|
| Position on every organic result | Yes | Yes | Yes |
| Engines | Google · Bing · Yahoo · DuckDuckGo | Google + others | Google + others |
| Up to 100 results per call | Yes | Yes | Yes |
| Country-level targeting | 50+ countries | Yes | Yes |
| Exact pixel position included | Yes — no extra cost | Partial (Google, block-level) | Live Advanced (premium) |
| Pricing model | Per call, from $0.03/10K pages | Per search, subscription | Per call |
| Free tier | 10 free calls, no card | 100/mo | Trial credits |
See the full breakdown in our SERP API pricing comparison and SerpApi alternatives guides.
FAQ
Rank Tracking API Questions
engine=google and country=us. Every result in the response carries a 1-indexed position field. Find your domain in the organic array and read its position — that's its current Google ranking. Run the same call on a schedule (daily, weekly) and store each position to track movement over time. The position field is not opt-in; it ships on every organic result by default.
position field on every search, so it works as both — a one-off rank checker and the data layer behind a continuous rank tracker.
engine=google, engine=bing, engine=yahoo, or engine=ddg. Each engine returns the same response shape with a position field on every organic result, so you can track and compare a keyword's ranking across all four engines with identical code.
country with a two-letter ISO code (country=us, country=gb, country=de, country=in, and 50+ more) to get the rankings a searcher in that country sees, and language with a two-letter code to set the result language. Targeting is country-level; city or postcode-level location targeting is not supported.
num to set the count (default 10) and pages to fetch multiple result pages (1–10). Every result, on every page, comes back with its sequential position so you can track rankings well beyond the top 10.
pixel_position=true (paid tiers) and every result also returns an integer pixel_position — the exact y-coordinate from the top of the rendered desktop SERP. Ordinal rank tells you the position number; pixel position tells you how far a user actually scrolls past AI Overviews, ads, and snippets to reach you. Measurement is desktop; mobile is on the roadmap.
Build It Yourself
Rank Tracking Guides & Tutorials
Step-by-step walkthroughs that use the position field above to build real rank trackers — in Python, no-code, and across dozens of countries.
Build a Rank Tracker from Scratch
The end-to-end walkthrough: query keywords, parse the position field, store a daily history, and chart movement over time.
Python Rank Tracker
A compact Python rank tracker you can run on a cron job — keywords in, ranked positions out, ready for your database.
No-Code Daily Tracker (n8n)
Wire up a scheduled rank tracker without writing a backend, using n8n and the rank tracking API on a daily trigger.
International Rank Tracking
Track the same keyword across 40+ countries with the country parameter and compare localized rankings side by side.
What Rank Tracking Costs
The real per-keyword math: how much it costs to track hundreds or thousands of keywords daily on a per-call SERP API.
Free Google Search API, Tested
An honest look at every free Google search tier — useful when you're prototyping a rank tracker before you scale.
Start Tracking Rankings Free
Query any keyword and read its position on Google, Bing, Yahoo, or DuckDuckGo. Per-call pricing from $0.03/10K pages, 10 free calls, no subscription.
Get an API Key