Google Maps Scraper | $1 per 1,000 places avatar

Google Maps Scraper | $1 per 1,000 places

Pricing

from $1.00 / 1,000 place scrapeds

Go to Apify Store
Google Maps Scraper | $1 per 1,000 places

Google Maps Scraper | $1 per 1,000 places

Extract Google Maps business listings — name, address, phone, website, rating, coordinates, opening hours and Place ID. No browser, no proxy needed. 190+ places per search, 500 places in under a minute. Works worldwide: tested on Latin, Cyrillic and Thai scripts.

Pricing

from $1.00 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

Mike Moros

Mike Moros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Google Maps Scraper — $1 / 1,000 places, no browser

Extract business listings from Google Maps: name, category, full address, phone, website, rating, coordinates, Place ID, opening status, district and more — 23 fields per record. Export to JSON, CSV or Excel, or pull it through the API.

No browser. No API key. No proxy needed at normal volume.

Measured performance

These are numbers from real runs, not estimates:

484 places, 2 search terms × 2 cities46 seconds
193 places, single search21 seconds
Phone number fill rate~82%
Compute cost per 1,000 placesfractions of a cent

The reason it is this cheap: it talks to the same endpoint the Google Maps front end uses, over plain HTTP. Browser-based scrapers spend minutes of CPU and residential-proxy bandwidth on work this Actor does in seconds.

Why this one

Your limit is a limit. maxItemsPerQuery and maxTotalItems are checked in code before every single push. There is no code path that produces item N+1. When the global cap is hit, the remaining searches are skipped and never billed.

You are never billed twice for the same place. Google's result pages overlap. Deduplication runs across the whole run, not per page — a page containing only places already collected is logged as "not billed" and skipped.

No junk rows. Google returns the searched region itself as an entity ("Prague, Czechia" with no category, address or rating). Those are dropped rather than billed as a business.

The cost ceiling is printed before any request is made:

Plan: 2 term(s) x 2 location(s) = 4 search(es), up to 300 each,
global cap 600 -> at most 600 billable results. The run cannot exceed this number.

Quick start

  1. Search term(s)coffee shop, dentist, shoe repair. One per line, without the city.
  2. Location(s)Prague, Czechia, Miami, FL, USA. One per line.
  3. Max results — 20 for a test, 500+ for a lead list.

Every term is searched in every location: 3 terms × 4 cities = 12 searches.

Keep the city out of the search term. A term that already names a place makes Google run the location as a second search and return fewer results.

Output

{
"name": "The Miners Coffee Old Town",
"category": "Coffee shop, Cafe, Coffee store",
"rating": 4.7,
"address": "Železná 490/14, 110 00 Staré Město, Czechia",
"phone": "+420 605 439 645",
"website": "https://www.theminers.eu/e-shop",
"latitude": 50.0863821,
"longitude": 14.4218181,
"placeId": "ChIJ3XqKYCGVC0cRYE5lAu_5hSY",
"cid": "2775899550276472416",
"neighbourhood": "Old Town",
"district": null,
"countryCode": "CZ",
"timezone": "Europe/Prague",
"openingHoursToday": ["Monday 8:30 AM–7:30 PM"],
"status": "Open · Closes 7:30 PM",
"permanentlyClosed": false,
"photoUrl": "https://lh3.googleusercontent.com/...",
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ3XqK..."
}

Works internationally out of the box — Czech and US records above came from the same run, with correct local address and phone formats.

Limitations — stated here, not discovered on your bill

  • About 190 places per single search. That is Google's ceiling, not this Actor's. To go past it, split the area into neighbourhoods or postcodes and give each as its own line in Location(s).
  • Phone numbers: roughly 82% coverage. The search endpoint does not carry a phone for every listing. Full coverage requires one extra request per place, which is a planned paid add-on rather than something hidden in the base price.
  • reviewCount is not populated. The rating comes through; the review total is not in this endpoint's response. Same add-on as above.
  • openingHoursToday is today only. The full week needs the per-place request.
  • district is best-effort. Google mixes the district into the category list; it is split back out by name pattern, so an unusual district name may stay in category.
  • Google changes its response shape periodically. Extraction is signature-based rather than index-based, so a change costs one field instead of the whole run — but it still needs occasional maintenance. That is inherent to scraping Maps.
  • Emails are not on Google Maps. They live on the business's own website. Chain a website crawler onto the website field, or wait for the contact-enrichment add-on.

This collects publicly visible business information. How you use it is your responsibility — check your obligations under GDPR/CCPA before using scraped contact data for outreach. This is not legal advice.

Publishing notes (for the Actor owner)

  • Pricing: PAY_PER_EVENT, event name result (already wired via Actor.charge), suggested $0.001/place = $1 per 1,000. Competitors at this tier charge $1–2.50; the incumbent charges $4.
  • Put the price in the title — every successful low-cost competitor does: Google Maps Scraper | $1/1k Places.
  • Fill in seoTitle and seoDescription; Store search weights them heavily.
  • Verify the default input runs successfully with no changes — that is what most first-time visitors click.