cloro
Local Rank Tracking

Track rankings across ~100,000 locations — the same Google SERP your customers see

Local SEO is a city-level game. "Best dentist near me" returns one set of results in Austin and a different set in Brooklyn. Pass a `location` value (any of Google's ~100,000 canonical geotargets) on a `/v1/monitor/google` call and you get the SERP that city actually sees, at the same per-call price as a country-level call.

4.8 · 37 reviewsG2.com software review platform logo
Multi-location brands and local SEO agencies running city-level rank-tracking pipelines on cloro
1,000,000,000 monthly API calls

What is local rank tracking?

Local rank tracking is measuring where a business ranks in Google results scoped to aspecific city, not the country default. Google re-ranks by searcher location: "best dentist near me" returns one Local Pack and one organic list in Austin and a different set in Brooklyn. A national-average position is a fiction for local-intent queries — the ranking only exists per location.

That per-city measurement is the job of alocal rank tracker: request the SERPas if from a device in the target city — one call per keyword × location pair — and track two ranking systems at once: the organic list and the Local Pack, the map 3-pack with its own positions, ratings, and review counts. cloro is the API version of that tool: a `location` parameter on the standard SERP call, drawing on Google's ~100,000 canonical geotargets, at the same per-call price as a country-level run.

One API for the cities where your customers actually search

Pass any Google canonical location name (`City,Region,Country`) on any call and cloro renders the SERP as if the search came from a device in that location. The location list draws on Google's full geotargeting set — about 100,000 entries spanning cities, metros, regions, and countries worldwide.

Why local SEO teams build city-level tracking on cloro

Most rank-tracking products charge extra for city-level data, or push you toward a separate Google Business Profile module. On cloro it is just a parameter on the standard SERP call.

Three-way SERP comparison showing different Local Pack businesses for 'personal injury lawyer' in Houston, Brooklyn, and Phoenix

Country-level rankings hide local-pack divergence

Run "personal injury lawyer" from cloro with three different location values and the Local Pack changes completely. Houston returns Adams Law and Husain; Brooklyn returns Block O'Toole and Belluck & Fox; Phoenix returns Lerner & Rowe and Phillips. A country-default ranking collapses all three into whichever firm dominates the national long tail. With the `location` parameter set, cloro renders the SERP the way a device in that city would receive it: city-specific Local Pack, Maps Pack, and organic results.

Multi-city ranking dashboard showing per-store organic and Local Pack positions

Multi-location brands need per-store ranking visibility

An 80-location franchise needs 80 city-specific rankings, not one national approximation. Hosted trackers charge per-city upcharges. cloro is flat per-call: 80 cities × 30 keywords × daily costs the same per-call rate as a single national run.

Mobile vs desktop local SERP comparison showing different module ordering and Local Pack placement

Mobile is where local search happens

Local-intent queries skew 75%+ mobile. Mobile SERPs put the AI Overview at position 0 and the Local Pack at position 1; desktop is structurally different. Pass `device: "mobile"` per call at the same price — track what your customers actually see.

Local Pack 3-pack response with parsed business name, address, rating, and review count fields

Local Pack tracking needs the structured Maps response

The Local Pack — the 3-pack of map results above organic — is a separate ranking system. cloro returns each entry tagged by position, business name, address, rating, and review count: the metadata for Local Pack share-of-voice on any keyword × city pair.

Track 100 keywords across 50 cities in one batch

One API call per query × city × device combination. The geo parameter is the only difference from country-level tracking — same auth, same response shape, same per-call pricing.

Batch-track a keyword set across multiple cities

python
from cloro import Cloro

client = Cloro(api_key="sk_live_your_api_key_here")

# Multi-location brand: 50 locations × 20 keywords × daily.
# Use Google canonical location names: "City,Region,Country".
keywords = ["best running shoes near me", "running shoe store", "athletic footwear"]
locations = [
    "Austin,Texas,United States",
    "Brooklyn,New York,United States",
    "Phoenix,Arizona,United States",
    # ... your full location list (drawn from Google's ~100,000 geotargets)
]

results = []
for query in keywords:
    for location in locations:
        response = client.monitor.google(
            query=query,
            country="US",
            location=location,
            device="mobile",  # local intent skews mobile
        )
        data = response["result"]
        for r in data["organicResults"]:
            results.append({
                "query": query,
                "location": location,
                "position": r["position"],
                "url": r["link"],
            })

# 1 row per (query, location, ranked URL). Roll up by location for per-store reports.
print(f"{len(results)} location-tagged rows captured")

Response example

200 OKapplication/json
{
  "success": true,
  "result": {
    "organicResults": [],
    "peopleAlsoAsk": [],
    "relatedSearches": [],
    "ads": []
  }
}

Use cases

Four city-level tracking workflows local SEO teams ship on top of cloro.

Franchise ranking grid

80 locations × 30 keywords × daily — one async batch per run, one row per store per keyword, per-store visibility without per-city upcharges.

Async batcheslocation paramWarehouse
Best for: Multi-location brands

Local Pack share of voice

Diff the 3-pack per keyword × city between runs: which businesses entered or left, who moved positions, who gained reviews — the Local Pack is a separate ranking system.

Local Pack fieldsDaily diffBigQuery
Best for: Local SEO pros

White-label client reporting

Per-tenant API keys plus your own templates → agency-branded per-city ranking reports emailed weekly from your domain.

Per-tenant keysPython + JinjaScheduled email
Best for: Local SEO agencies

Market-entry SERP research

Sweep the same keyword set across candidate cities before opening a location — who owns the Local Pack, how entrenched the organic incumbents are, what the ad auction looks like.

City sweepOne-off batchNotebook
Best for: Expansion & strategy teams

Pricing that scales with you

Pick a plan that fits your volume. Price per credit drops as you scale.

Hobby
$0.40
per 1,000 credits
  • $100/mo
  • 250,000 credits
  • 20 concurrent jobs
  • Email support
Starter
$0.39
per 1,000 credits
  • $250/mo
  • 650,000 credits
  • 50 concurrent jobs
  • Email support
Most Popular
Growth
$0.37
per 1,000 credits
  • $500/mo
  • 1,350,000 credits
  • 75 concurrent jobs
  • Priority email support
Business
$0.36
per 1,000 credits
  • $1,000/mo
  • 2,800,000 credits
  • 100 concurrent jobs
  • Priority email support
Enterprise
$0.34
per 1,000 credits
/mo
  • 5,871,025 credits
  • 135 concurrent jobs
  • Priority support
Enterprise$5,000+

Increased concurrency, overages on credits and credit discounts for annual contracts.

Know more

Credit cost per request varies by provider. The figures below are for async/batch requests; sync requests add a +2 credit surcharge.

ChatGPT (full response) 7 credits
ChatGPT (web search) 5 credits
Perplexity 3 credits
Grok 4 credits
Copilot 5 credits
AI Mode 4 credits
AI Overview (incl. SERP) 5 credits
Gemini 4 credits
Google Search 3 credits +2/page
Google News 3 credits +2/page

ChatGPT full response includes query fan-out, ads, and shopping data. Google News uses the same pricing as Google Search.

Estimate your monthly cost and plan

7 credits each
5 credits each
3 credits each
4 credits each
5 credits each
4 credits each
4 credits each
3 credits / 1 page
3 credits / 1 page
Monthly requests
0
Credits needed
0
Recommended plan:

Local Rank Tracking, answered

Which locations does the API support?+

cloro accepts any Google canonical location name in the format `City,Region,Country` — for example, `"Austin,Texas,United States"` or `"Manchester,England,United Kingdom"`. The full set draws on Google's geotarget list, which contains ~100,000 entries spanning cities, metros, regions, and countries worldwide. Power users can also pass a pre-encoded `uule` string instead of a location name when they need a UULE Google has but isn't in the canonical list.

What's the difference between local rank tracking and Google Business Profile rank tracking?+

Local rank tracking measures organic + Local Pack positions for a query in a target city. GBP rank tracking measures one business listing's position across a grid of points around its location. Different products. cloro covers the first; for GBP grid-tracking, compose grid points using cloro plus your own coordinate logic.

Why does mobile-vs-desktop matter more for local?+

~75% of local-intent queries are mobile. Mobile renders the Local Pack at position 1, shoves AI Overview to position 0, and compresses organic — country-level trackers defaulting to desktop miss what most customers see. cloro's `device` parameter is per-call, same price.

How do you handle locations outside the US?+

Pass `country` (ISO 3166-1 alpha-2) plus the canonical location string — e.g., `{country: "GB", location: "Manchester,England,United Kingdom"}` for Manchester, or `{country: "JP", location: "Shibuya,Tokyo,Japan"}` for Shibuya. Anywhere in Google's geotarget list (~100,000 locations, all major countries) works the same way.

Pricing for multi-location at scale?+

Per-call: 3 credits per SERP call (n=10) regardless of geo specificity, +2 per additional results page, +2 with AI Overview enrichment. 50 cities × 20 keywords × daily = 30k calls/month = 90k credits, comfortably inside the Hobby plan's 250k. Typically ~10× cheaper than per-city upcharges in bundled trackers.

How do I diff Local Pack rankings between two days?+

Persist the `result` envelope per call (the Local Pack ships in the SERP response). Diff between adjacent runs in your warehouse: which businesses entered/left the 3-pack, which moved positions, which gained or lost reviews. No diff endpoint needed — the SERP is yours to keep.

Start tracking local Google rankings

City-level geo on every call, drawing on ~100,000 Google geotargets. The auth, response shape, and per-call price are unchanged from country-level tracking — the only difference is the `location` value you send.