Google Maps is one of the richest public business databases on the internet. Every listing has a name, address, phone number, website, opening hours, ratings, and hundreds of reviews. For sales teams, marketers, and local SEO researchers, that’s an extraordinary amount of structured, actionable data.
Getting it out at scale is the hard part.
Why Google Maps scraping is technically complex
Google Maps is a fully JS-rendered application. There’s no simple HTML to parse. To extract data, you need:
- A headless browser (Chromium + Playwright or Puppeteer)
- Session management to avoid bot-detection
- Proper pagination to collect all results in a query
- Rate limiting to not get blocked
- Proxy rotation for high-volume requests
- Persistent infrastructure to run all of the above
Most businesses don’t want to maintain a Chromium farm just to extract some business locations. That’s exactly what Google Maps workers on Seek API are for.
What you can extract
A typical Google Maps request returns:
{
"name": "Blue Bottle Coffee",
"address": "300 Webster St, Oakland, CA 94607",
"phone": "+1 510-653-3394",
"website": "https://bluebottlecoffee.com",
"rating": 4.5,
"reviewCount": 842,
"category": "Coffee shop",
"hours": {
"monday": "7:00 AM – 6:00 PM",
"tuesday": "7:00 AM – 6:00 PM"
},
"coordinates": { "lat": 37.8085, "lng": -122.2664 }
}
You can query by:
- Search query + location: “coffee shops in Oakland CA”
- Category + radius: Restaurants within 5km of a coordinate
- Direct place URL: Extract a single known listing
Making the API call
curl -X POST https://api.seek-api.com/v1/workers/google-maps-extractor/jobs \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "plumbers in Austin TX",
"maxResults": 50
}'
Poll for the result:
curl https://api.seek-api.com/v1/jobs/JOB_UUID \
-H "X-Api-Key: YOUR_KEY"
You’ll get back 50 plumbing business records — name, address, phone, website, rating — ready to import into a CRM, spreadsheet, or database.
Who uses this
Sales teams use Google Maps extraction to build hyper-local lead lists. Instead of buying an expensive data vendor, they run a query by city and vertical, extract 500 businesses, and pipe the results directly into their CRM.
Local SEO agencies run regular extractions to monitor client rankings, track competitor openings, and measure review velocity across markets.
Franchise businesses track all their locations (and competitor locations) at once — catching inconsistent listings, wrong phone numbers, or missing hours before customers do.
Market researchers map the competitive landscape in a new city before opening a location.
Pricing
The Google Maps Extractor worker charges $0.006 per result. Extracting 1,000 business records costs $6. Compare that to a data vendor charging $0.08–$0.25 per record, and the math is clear.
And unlike a data vendor, you control the data freshness. You extract when you want, for the queries you care about, as often as you need.
Handling large extractions
For large jobs (5,000+ results), the async model matters. The job completes in the background — you don’t need to keep an HTTP connection open. Just check back every 10 seconds until the status is completed.
async function waitForJob(jobUuid, apiKey) {
while (true) {
const res = await fetch(`https://api.seek-api.com/v1/jobs/${jobUuid}`, {
headers: { 'X-Api-Key': apiKey }
});
const job = await res.json();
if (job.status === 'completed') return job.response_json;
if (job.status === 'failed') throw new Error(job.error);
await new Promise(r => setTimeout(r, 5000));
}
}
Start extracting business data from Google Maps in under 5 minutes — browse the marketplace to get your API key.