ScrapeField
Most people who want Google Maps data want a list: every business of a kind in a place, with its address, phone, website, rating and reviews. There are three ways to get it, and the right one depends on how many places you need and how often.
1. Google’s Places API
The official route, and the right one when you show places to your own users, on a map or in an app. It is priced for that: a search is $32.00 per 1,000 calls after 5,000 free a month, one place in full $17.00 per 1,000, and a place’s reviews come at most five at a time with no way to ask for more. Our comparison with the Places API has every figure, with the day it was checked.
2. A scraper of your own
A browser you drive from code opens Google Maps, searches, scrolls the results and reads each listing. It is free to start and fine for a few hundred places. Past that, it is upkeep: Google changes the page, limits automated traffic, and shows different things to different visitors, so a scraper that worked last month needs work this month. The cost is your time, servers and the proxies it ends up needing. Building it yourself goes through what that adds up to.
3. An API that does it for you
One call, a search and a place, and the answer is the listings as JSON, named as in Google’s Places API. Blocks are handled on our side; there is nothing for you to unblock. With us, a search returns up to 20 full listings a call for 3 credits, so 1,000 places cost about $0.12 on the smallest pack and $0.07 on the largest. One place in full is 3 credits, and a place’s reviews come a page at a time, all of them.
curl -H "Authorization: Bearer $SCRAPEFIELD_KEY" \
"https://api.scrapefield.com/v1/google-maps/places?query=dentists%20in%20Austin%2C%20TX"Every place for a search, following the cursor to the last page, in TypeScript:
const base = 'https://api.scrapefield.com/v1/google-maps/places';
const headers = { Authorization: `Bearer ${process.env.SCRAPEFIELD_KEY}` };
const places = [];
let cursor: string | null = null;
do {
const q = new URLSearchParams({ query: 'dentists in Austin, TX' });
if (cursor) q.set('cursor', cursor);
const res = await fetch(`${base}?${q}`, { headers });
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
places.push(...body.data);
cursor = body.meta.next_cursor;
} while (cursor);And in Python:
import os, requests
base = "https://api.scrapefield.com/v1/google-maps/places"
headers = {"Authorization": f"Bearer {os.environ['SCRAPEFIELD_KEY']}"}
places, cursor = [], None
while True:
params = {"query": "dentists in Austin, TX"}
if cursor:
params["cursor"] = cursor
body = requests.get(base, params=params, headers=headers).json()
if "error" in body:
raise RuntimeError(body["error"]["message"])
places += body["data"]
cursor = body["meta"]["next_cursor"]
if cursor is None:
breakEach place has place_id, name, formatted_address, formatted_phone_number, website, rating, user_ratings_total, opening_hours and business_status, among others. The search reference has every field, and the playground there runs the call with no key.
Which one
Showing places to your users: the Places API. A one-off list of a few hundred: a scraper may do, if you have the afternoon. A list of thousands, or one you refresh every week: an API, because the price per 1,000 is cents and the upkeep is someone else’s. From here, the guides go further: every review of a place, a whole city, the businesses with no website, and the same list in n8n.