Google Places Search avatar

Google Places Search

Pricing

from $1.50 / 1,000 place scrapeds

Go to Apify Store
Google Places Search

Google Places Search

Extract business and place data for any area or free-text query — names, addresses, phones, websites, opening hours, ratings, and review counts.

Pricing

from $1.50 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

Harpoon

Harpoon

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Categories

Share

Turn any area — or a plain-English sentence — into a structured list of Google Maps places: name, address, phone, website, opening hours, rating, review count, and coordinates. Clean, complete, and ready to use.

  • Reliable, complete data. One row per place with contact details, hours, ratings, and coordinates — no duplicate records.
  • Search any shape of area. A rectangle, a circle, a named region, or a custom polygon — or just describe the search in a sentence.
  • Filter before you pay. Rating, open-now, price level, and category filters are applied for you, so you don't pay to return places you'll throw away.
  • Watch it work. A live map plots each place as it's found while the run is running.
  • Any scale. A handful of places or a whole country, exported to JSON, CSV, Excel, or XML.

Built for lead generation, competitor tracking, local market analysis, and place-data enrichment.

What can Google Places Search do?

Input modeWhat it does
ai_promptDescribe what you want in one sentence; the actor works out the search terms, area, and filters for you.
search_terms (+ an area)Find every place matching each term inside an area; results are merged with no duplicates.
categoriesRestrict to Google place types (restaurant, cafe, hotel, pharmacy, gym, …).
place_idsSkip the search and fetch full details for places you already know.

Every run also gives you export to JSON / CSV / Excel / XML, API and webhook access, scheduled runs, and MCP access for AI agents.

What data can you extract?

One row per place. Grouped by what buyers usually need:

📦 Group🔎 Fields
Identityname, name_alt, place_id, group.name (category), price (food/drink only)
Contactphone.display, phone.actual, website.url, website.display
Locationfull_address, address_parts, latitude, longitude, plus_code, maps_url (opens the place in Google Maps), thumbnail_url (map preview image)
Reputationrating, reviews
Hoursopen_status, is_open, opening_hours[] (day + hours[])
Metalang
  1. Create a free Apify account.
  2. Open Google Places Search in Apify Console.
  3. Enter an area and either Search terms or a plain-language prompt.
  4. Set Max results (limit) and any filters you want.
  5. Click Save & Start. Results stream into the dataset as they're found.
  6. Download from Storage ▸ Dataset as JSON, CSV, Excel, or XML.

While the run is going, open the live map URL from the run log to watch results appear. A snapshot of the map is saved afterward under the key-value store key live-map.

Input

There are three ways to give the actor work — use one:

  • Natural language — set ai_prompt only, e.g. "Cheap hostels within 5 km of Bondi Beach in Sydney". The actor turns it into terms, an area, and filters, and figures out the location for you.
  • Search — set search_terms (and/or categories) plus exactly one area selector.
  • Direct lookup — set place_ids to skip searching entirely.

The area (provide exactly one)

FieldMeaningExample
boundsRectangle, lowLat,lowLng,highLat,highLng48.80,2.25,48.90,2.40
circlePoint + radius in km48.8566,2.3522,5
regionNamed region as country:ADMtype:shapeIDFRA:ADM1:12345
polygonGeoJSON coordinates array ([lng,lat] rings) as a JSON string[[[2.25,48.80],[2.40,48.90],[2.25,48.90],[2.25,48.80]]]

When ai_prompt names a location, its area wins and any manual area selector is ignored.

Result filters

Narrow the search with min_rating, open_now, price_levels, categories, ranking (relevance / distance), country bias, strict_type, service_area_businesses, future_openings, and language.

Post-request filters

Some conditions are checked against each place's full details rather than the search itself. post_filters maps a detail field to a condition. Both filter groups are free — you're only charged per place returned, never for filtering.

FieldsOperatorsExample
website, phone{"exists": true|false}{"website": {"exists": false}} (no website)
reviews, rating{"gt"|"gte"|"lt"|"lte": number}{"reviews": {"gte": 200}}
is_open{"eq": true|false}{"is_open": {"eq": true}}
price{"in": [...]} or {"contains": "$$"}{"price": {"in": ["MODERATE"]}}

Example input

{
"search_terms": ["coffee", "tea", "juice"],
"categories": ["cafe"],
"bounds": "40.705,-74.020,40.775,-73.930",
"min_rating": 4,
"post_filters": { "website": { "exists": true } },
"limit": 100
}

See the Input tab above for every parameter and its default.

Output

Results land in the default dataset under Storage ▸ Dataset. Browse the built-in Overview, Contact info, Location, and Full details views, or download JSON, CSV, Excel, or XML.

Full place record

{
"place_id": "ChIJ...",
"name": "Kim's Island",
"full_address": "175 Main St, Staten Island, NY 10307",
"latitude": "40.5107736",
"longitude": "-74.2482624",
"thumbnail_url": "https://tile.openstreetmap.org/19/154012/197509.png",
"maps_url": "https://www.google.com/maps/search/?api=1&query=40.5107736,-74.2482624&query_place_id=ChIJ...",
"name_alt": "",
"phone": { "display": "(718) 356-5168", "actual": "+17183565168" },
"website": { "url": "http://kimsislandsi.com/", "display": "kimsislandsi.com" },
"reviews": 91,
"rating": 4.3,
"price": "$$",
"plus_code": "XRX4+VQ Staten Island, NY",
"address_parts": ["175 Main St", "Staten Island", "NY 10307"],
"opening_hours": [
{ "day": "Monday", "hours": ["10:00–22:00"] },
{ "day": "Sunday", "hours": ["12:00–20:00"] }
],
"open_status": "OPEN",
"is_open": true,
"lang": "en",
"group": { "uri": "", "id": "0x89c3ca9c11f90c25:0x6cc8dba851799f09", "name": "Kim's Island" }
}

Field names are lowercase snake_case.

What can you do with the data?

1. Build a contactable local lead list

  1. Set search_terms (e.g. ["plumber","electrician"]) and a bounds or circle for your target area.
  2. Add post_filters: { "phone": { "exists": true }, "website": { "exists": true } } to keep only reachable businesses.
  3. Export the Contact info view to CSV and load it into your CRM.

2. Scan competitors in a district

  1. Set categories: ["restaurant"] and a bounds across the district.
  2. Filter min_rating, and set ranking: "distance" to work outward from a point.
  3. Export and compare rating and reviews grouped by group.name.

3. Enrich a list you already have

  1. Put your known Google place IDs in place_ids.
  2. Run to fetch phone, website, opening_hours, and coordinates.
  3. Join the results back onto your records by place_id.

4. Cover a whole country

  1. Use an ai_prompt like "pharmacies in Portugal", or a region selector.
  2. Set a generous limit for the area you're covering.
  3. Export — duplicates are removed automatically.

How much does Google Places Search cost?

The actor is priced per returned place (pay-per-event), plus Apify platform usage. The rate is $2.00 per 1,000 places ($0.002 each), and starting a run is free.

  • 1,000 places ≈ $2.00 in actor cost (plus a small platform fee).
  • Filtered-out or failed places are not charged.

See the Pricing tab for plan discounts.

FAQ

Do I need a Google account, cookies, or my own API key? No. No login, cookies, or account is needed, and you don't have to supply an API key — everything required to run is configured for you.

Can it get private or restricted data? No. It only returns publicly available place and business data.

How many results can I get? limit (default 60) caps the whole run across every term and category. There's no fixed platform cap, but very high limits over wide areas take longer and cost more.

What language are the results in? English by default. Set language to another code (e.g. fr, es) for different text and categories. When you use ai_prompt, the language is taken from your prompt.

Is it legal to extract this data? It returns publicly available business data only. You're responsible for how you use the results and for complying with the terms of the data source and your local laws.

Can I use it from the API, SDKs, or an AI agent? Yes — see the API tab above for JavaScript, Python, REST, and CLI examples, or connect the Apify MCP server to call it from Claude, ChatGPT, or another MCP client.

Something isn't working. Make sure exactly one area selector is set, and that you've provided terms, categories, place IDs, or a prompt. If it still fails, open an issue in the Issues tab with your input JSON.

Notes and limitations

  • Results are in English by default — set language for other languages.
  • One area selector at a timebounds, circle, region, and polygon are mutually exclusive.
  • region needs a shape ID (country:ADMtype:shapeID), not a free-text place name. Use ai_prompt or bounds/circle for plain names.
  • price is only available for food-and-drink place types, and opening_hours may be missing for some places.
  • ai_prompt is authoritative — when it works out terms, area, or filters, it overrides the manual values.

Integrations

Call the actor from your own code or an AI agent — see the API tab for JavaScript, Python, REST, and CLI. MCP clients can add harpoon/google-places-search via the Apify MCP server. Schedule runs or trigger them with webhooks from Apify Console.

Support

Found a bug or have feedback? Open an issue in the Issues tab, or email islam.tazerout@outlook.com.