Google Maps as JSON.
Local listings, structured.
Local business listings from Google Maps: name, address, category, rating, reviews, phone, website, hours, GPS coordinates, place_id and CID, parsed and typed. Build local-pack monitoring, lead lists, competitor maps, store-locator data.
See Google Maps on the SERP API page →
{ } ← click "Run maps search" ▍
{
"maps_results": [
{
"position": 1,
"title": "Bennu Coffee on Congress",
"category": "Cafe",
"rating": 4.5,
"reviews": 1610,
"price": "$1-10",
"address": "515 S Congress Ave, Austin, TX 78704",
"phone": "(512) 448-3919",
"website": "http://www.bennucoffee.com/",
"opening_hours": "Open 24 hours",
"gps_coordinates": {
"latitude": 30.256083,
"longitude": -97.74623
},
"place_id": "ChIJ7agecQG1RIYRmhih01aU_-A",
"cid": "16212840284195723418"
},
{
"position": 2,
"title": "Epoch Coffee",
"category": "Coffee shop",
"rating": 4.5,
"reviews": 2540,
"address": "221 W N Loop Blvd, Austin, TX 78751",
"phone": "(512) 454-3762",
"website": "http://www.epochcoffee.com/",
"cid": "140078896924485689"
}
]
}
{ } ← click "Run maps search" ▍
{
"maps_results": [
{
"position": 1,
"title": "Vesuvio Pizzeria",
"category": "Italian restaurant",
"rating": 4.7,
"reviews": 612,
"address": "Brampton, ON",
"phone": "(905) 555-0142",
"cid": "1322681635158113553"
},
{
"position": 2,
"title": "La Bella Strada",
"category": "Italian restaurant",
"rating": 4.6,
"reviews": 489,
"address": "Mississauga Rd, Brampton, ON"
},
{
"position": 3,
"title": "Trattoria Da Vinci",
"category": "Italian restaurant",
"rating": 4.5,
"reviews": 351,
"address": "Queen St E, Brampton, ON"
}
]
}
{ } ← click "Run maps search" ▍
{
"maps_results": [
{
"position": 1,
"title": "Austin Plumbing Co.",
"category": "Plumber",
"rating": 4.8,
"reviews": 1247,
"address": "500 Congress Ave, Austin, TX",
"opening_hours": "Open 24 hours"
},
{
"position": 2,
"title": "Reliable Pipes",
"category": "Plumber",
"rating": 4.7,
"reviews": 802,
"address": "South Lamar Blvd, Austin, TX"
},
{
"position": 3,
"title": "Texas Plumbing Pros",
"category": "Plumber",
"rating": 4.6,
"reviews": 588,
"address": "Burnet Rd, Austin, TX"
}
]
}
Typed local results, ready to ship.
What Google shows for each place: name, address, contact details, hours, ratings, category, coordinates and the persistent IDs for cross-day diffing.
Three workflows. One key.
Track local-pack rank for every keyword and town.
Run map searches on your own schedule, with the town in location. Diff the maps_results array to see when your business moves up or down. CID is stable so you can track even when the name on the pin changes.
Build clean local-business lists by category and town.
Query any niche in any town. Get name, address, phone, website, category and rating back as typed JSON, ready to enrich or hand off to outbound. No scraping fragility.
See who's stealing local visibility.
Snapshot the results daily across your service areas. Detect new entrants, watch review counts grow, spot rating shifts before they show up in your reports.
However your stack is wired.
curl -G "https://api.ujeebu.com/serp" \
-H "ApiKey: YOUR_KEY" \
--data-urlencode "search_type=maps" \
--data-urlencode "search=coffee shops" \
--data-urlencode "location=Austin, TX" \
-d lang=en
from ujeebu_python import UjeebuClient
ujeebu = UjeebuClient(api_key="YOUR_KEY")
response = ujeebu.serp(params={
"search_type": "maps",
"search": "coffee shops",
"location": "Austin, TX",
})
for m in response.json()["maps_results"]:
print(m["position"], m["title"], m.get("rating"), m.get("phone"), m["address"])
import { UjeebuClient } from "@ujeebu-org/ujeebu-sdk";
const client = new UjeebuClient("YOUR_KEY");
const res = await client.serp({
search_type: "maps",
search: "coffee shops",
location: "Austin, TX",
});
const { maps_results } = res.data;
params := url.Values{}
params.Set("search_type", "maps")
params.Set("search", "coffee shops")
params.Set("location", "Austin, TX")
req, _ := http.NewRequest("GET", "https://api.ujeebu.com/serp?"+params.Encode(), nil)
req.Header.Set("ApiKey", "YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
What you stop worrying about.
Live map results. Never cached.
Every request fetches Google Maps in real time. The same query in two cities returns two different sets, as a local user sees them.
Local results by place.
Set location to a place name such as "Austin, TX", or a country code with the town in the query. The results come back as Google shows them to a searcher there.
Stable CID for tracking.
Google's CID stays the same when the rank or the listing name changes. Use it, or place_id, as the join key for cross-day local-rank tracking.
Pay only for what works.
Blocked requests, timeouts and server errors are not billed. Only completed searches use credits.
Blocked requests, timeouts and server errors cost zero. 5,000 credits free, no card. One credit pool across every endpoint. The same key works in production.
Pay per success. Start free.
Each search is 5 credits. Blocked requests, timeouts and server errors don't count. Same plans cover every Ujeebu endpoint, one credit pool.
Before you sign up.
How precise is the geo-targeting?▼
What is CID and why does it matter?▼
Do I get the phone number?▼
Can I get opening hours?▼
How does this compare to Places API?▼
Can I top up credits?▼
5,000 free credits. Live map results in 60 seconds.
No credit card. No sales call. Just an API key and your first maps pull.
