Track ranks on SERP: beyond the blue links
Ranking number 1 isn't what it used to be. Learn how to accurately track your search performance across Organic, Maps, AI Overviews, and zero-click features.
For any commercial query, the Google SERP changes multiple times a day. Rank trackers watch one slice of that — your organic position. SERP monitoring covers the rest: organic, ads, AI Overview sources, People Also Ask, related searches. You decide what counts as a change worth alerting on.
4.7 on G2No credit card required.
curl -X POST https://api.cloro.dev/v1/monitor/google \
-H "Authorization: Bearer sk_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"query": "best crm software",
"country": "US",
"device": "desktop",
"include": {
"aioverview": { "markdown": true }
}
}' {
"success": true,
"result": {
"organicResults": [],
"peopleAlsoAsk": [],
"relatedSearches": [],
"ads": [],
"aioverview": {}
}
} Organic rank changes are the loudest signal but rarely the earliest. AI Overview source rotation, new sponsored advertisers, PAA question shifts, and Local Pack churn all precede organic movement by days. cloro returns every SERP element in one response so you can build the alert that fires first.
Rank trackers monitor positions. SERP monitoring watches the entire SERP — every element that can change, with timestamps you control. The use cases compound: launch detection, ad-rotation analysis, AI Overview citation drift, knowledge-panel takeover. None of these fit inside a rank-tracker dashboard.
On "crm software" hourly: Monday the AI Overview source list swaps; Tuesday a new advertiser enters `ads[]` at position 2; Wednesday three new PAA questions appear; Saturday organic positions 3–7 finally shuffle. By the time the rank tracker pings on Saturday, the SERP has been moving for five days. cloro returns the full envelope per call — leading-indicator detection is a warehouse query, not a vendor feature gate.
AI Overview renders on ~40% of commercial queries in 2026, and the cited sources turn over faster than organic positions. Watching which domains appear in those citations day over day is one of the more useful SEO signals available right now, and cloro returns the full source list (with positions) on every call.
Snapshot `ads[]` hourly across your top 50 commercial queries and you can see exactly when a competitor enters the auction, raises bids enough to move to top-of-page, or drops out for budget. That granularity is hard to get from a hosted rank tracker; cloro returns the parsed ads block on every call.
Each call returns the structured envelope (organicResults, ads, peopleAlsoAsk, relatedSearches, aioverview). Persist it however you want, diff it however you want, alert on whatever shape of change matters to your team. You are not locked into someone else's definition of "SERP change."
Persist the full SERP envelope on a cadence. Diff between adjacent runs in your warehouse. Alert on whatever change shape matters: rank deltas, AI Overview source churn, new advertisers, PAA shifts.
import requests
import json
from datetime import datetime
# Hourly SERP snapshot for a competitive-intel keyword set.
keywords = ["best crm software", "salesforce alternatives", "hubspot alternatives"]
snapshots = []
for query in keywords:
response = requests.post(
"https://api.cloro.dev/v1/monitor/google",
headers={
"Authorization": "Bearer sk_live_your_api_key_here",
"Content-Type": "application/json",
},
json={
"query": query,
"country": "US",
"device": "desktop",
"include": {"aioverview": {"markdown": True}},
},
)
result = response.json()["result"]
snapshots.append({
"ts": datetime.utcnow().isoformat(),
"query": query,
"organic": [{"pos": r["position"], "url": r["link"]} for r in result["organicResults"]],
"ads": [{"pos": a["position"], "url": a["url"], "domain": a["domain"]} for a in result.get("ads", [])],
"aioverview_sources": [s["url"] for s in (result.get("aioverview") or {}).get("sources", [])],
"paa_questions": [q["question"] for q in result["peopleAlsoAsk"]],
})
# Persist to warehouse. Diff against previous hour's snapshot.
print(json.dumps(snapshots, indent=2)) {
"success": true,
"result": {
"organicResults": [],
"ads": [],
"peopleAlsoAsk": [],
"relatedSearches": [],
"aioverview": {}
}
} Pick a plan that fits your volume. Price per credit drops as you scale.
Credit cost per request varies by provider. The figures below are for async/batch requests; sync requests add a +2 credit surcharge.
Google News uses the same pricing as Google Search.
SERP volatility is the rate at which top-10 organic positions churn between snapshots. Spikes signal Google updates, news-event retargeting, or commercial-intent re-ranking. Snapshot `/v1/monitor/google` on a cadence, persist `organicResults[]` per snapshot, and compute position-delta sums between adjacent runs in your warehouse. The volatility metric is your code, our data.
cloro doesn't store SERP history on your behalf — but the API returns the full SERP per call. Persist the `result` envelope to BigQuery / Snowflake / Postgres and query it as a time-series. SERP history becomes a SQL window function against your own warehouse, not a vendor feature gate.
Rank tracking watches one slice — your organic position over time. SERP monitoring watches every element: organic, ads, AI Overview, PAA, related searches. "Where do I rank?" vs "what is happening on this SERP?" Same `/v1/monitor/google` endpoint, different framing — see /rank-tracking/ for the rank-specific use case.
Differential by element. Sponsored ads rotate continuously — hourly is the floor for ad tracking. AI Overview sources churn daily. PAA questions shift weekly. Organic positions move on weekly+ scales (faster during ranking-update windows). All from the same API.
Alerting is your code, our response. Common patterns: organic position delta > 3 for a tracked URL; new domain in AI Overview sources; new advertiser in `ads[]`; PAA question removed/added; knowledge panel takeover. Write the logic in your warehouse, push to Slack/PagerDuty/email.
Pay-per-call: 1 credit per SERP call (+2 with AI Overview enrichment). 50 keywords × hourly × 1 country = 36k calls/month — covered 7× by the Hobby plan, or 50 keywords × hourly × 7 countries with AI Overview included.
`POST /v1/monitor/google/async` with a webhook URL. Results land at the webhook as each call completes. For 500+ keywords × hourly, async is the right pattern — sync polling burns concurrency you don't need to spend.
Ranking number 1 isn't what it used to be. Learn how to accurately track your search performance across Organic, Maps, AI Overviews, and zero-click features.
Google killed the &num=100 parameter in September 2025. Here is why your rank tracker is broken, why data costs are 10x, and how to adapt.
Stop searching like a novice. Master the hidden URL parameters like uule, gl, and udm to control location, language, and AI features.