Rank tracking API
Rank tracking API for Google and Bing.
Build a Google and Bing rank tracker with live SERP data, location and device controls, organic positions, and SERP features. Connect your scheduler and storage.
Search data for rank checkers and recurring reports
Local SEO and agencies
SERP feature visibility
From keyword list to historical observation
- Define a keyword list with the target domain or URL and the engines to check.
- Persist the complete search context. Google supports country, interface and result language, named location or coordinates, and device. Bing uses country, interface-language hints, coordinates, and device.
- Schedule jobs in your application. Choose a cadence that fits the reporting need and distribute requests within your package's rate limit.
- Read
data.content.results, match the target hostname, and keep its returned rank and position fields. Filter organic results when reporting organic rankings. - Follow documented pagination only when more depth is needed. Use Google's
startcontrol or Bing's returnednext_page_token; each successful page consumes a credit. - Save the UTC observation time, request ID, query, engine, targeting, page context, matched URL, rank, and SERP features. Generate deltas and alerts from comparable observations.
Extract a domain position from a Google response
import os
from datetime import datetime, timezone
from urllib.parse import urlparse
import requests
target = "example.com"
parameters = {
"query": "example product",
"gl": "us",
"hl": "en-US",
"location": "Austin,Texas,United States",
"device": "mobile",
}
response = requests.post(
"https://api.prismcrawl.com/v1/google/search",
headers={"x-api-key": os.environ["PRISMCRAWL_API_KEY"]},
json=parameters,
timeout=30,
)
response.raise_for_status()
payload = response.json()
if not payload.get("success"):
raise RuntimeError("Search did not succeed")
content = payload["data"]["content"]
matches = []
for result in content.get("results", []):
host = (urlparse(result["url"]).hostname or "").lower()
if result["type"] == "organic" and (
host == target or host.endswith("." + target)
):
matches.append(result)
best = min(matches, key=lambda item: item["rank"], default=None)
print({
"observed_at": datetime.now(timezone.utc).isoformat(),
"request_id": payload["request_id"],
"engine": "google",
"parameters": parameters,
"status": "found" if best else "not_found_on_checked_page",
"rank": best["rank"] if best else None,
"position": best.get("position") if best else None,
"url": best["url"] if best else None,
"serp_features": content.get("serp_features", []),
})Scale collection without mixing ranking contexts
- Use a queue with bounded concurrency and capped backoff for transient errors
- Keep API failures separate from successful searches with no matching domain
- Store page context instead of assuming every SERP contains ten organic listings
- Deduplicate identical scheduled checks while preserving separate locations and devices
- Budget keywords × engines × locations × devices × checks × pages
- Retain your own observations for long-term charts and exports
Rank tracking API costs and integration
One-time credit purchases start at $5, with no subscription. Rates range from $0.30 to $0.15 per 1,000 successful searches; the lowest rate requires a $1000 purchase. Credits are valid for 90 days. See the SERP API pricing breakdown for package sizes, rate limits, and usage examples.
Model recurring volume in the cost calculator, test a query in the playground, and inspect fields in the API reference. The rank tracker tutorial explains the surrounding application, while the SEO workflow guide connects observations to page decisions.
Frequently asked questions
Is PrismCrawl a hosted rank tracker?
PrismCrawl provides the live search API data. Your application manages keyword lists, scheduled checks, historical storage, alerts, and client reports.
Can I track Google and Bing rankings?
Yes. Use the Google Search and Bing Search endpoints with consistent engine-specific targeting. Store the engine and search context with each observation so rankings remain comparable.
What if my domain does not appear?
Record that it was not found within the pages you checked. Keep that state separate from an API failure and from a known numeric rank. Pagination availability and search results can change between checks.
Does request history replace my ranking database?
No. Standard request metadata is retained for 90 days and JSON/source HTML for 30 days. Save observations in your own database for longer trends. With zero_trace enabled, result artifacts are not retained and request history is limited to audit and billing fields.
Is a SERP position the same as Search Console average position?
No. An API check observes a search in a chosen context at a particular time. Search Console aggregates impressions across users and contexts. Use both sources with those differences in mind.
Make your first live search today.
Create an account, get 100 free credits, and test live Google or Bing results. No credit card or subscription required.