Skip to main content
Google Maps

Google Maps Scraper API
places, contacts and reviews

Send a Maps search or place link and get every business back as data: name, category, address, phone, website, opening hours, rating and the star breakdown. A place link adds up to 60 reviews.

You sendwww.google.com/maps/search/coffee+shops/@30.2672,-97.7431,13z
20 places1 credit
You get back (real run, trimmed)
{
"type": "search",
"query": "coffee shops",
"resultCount": 20,
"places": [
{
"position": 1,
"title": "Café Crème - Downtown",
"category": "Coffee shop",
"address": "710 W Cesar Chavez St, Austin, TX 78701",
"phone": "(512) 730-0377",
"website": "https://cafecremeaustin.com/locations/downtown",
"rating": 4.7,
"reviewsCount": 342,
"openState": "Open · Closes 9 PM"
},
"… 19 more"
]
}
20

places per search page, each with every list field

60

reviews per place, with the reviewer's rating and text

1 credit

per page, for a search or a place with its reviews

$0

for a page that can't be delivered

Every link you get from Maps

Copy the link from your browser. Spidra works out what kind of page it is.

Searches

One page of results: 20 places in Google's order, each with address, phone, website, hours and rating.

google.com/maps/search/coffee+shops/@30.26,-97.74,13z

Places

The full record of one business, with the owner, photos count, rating distribution and review topics.

google.com/maps/place/Katz's+Delicatessen/...

Reviews

Every place link includes up to 60 reviews, most relevant first, with owner replies.

google.com/maps/place/data=!4m2!3m1!1s0x89c2...

CID and place ID links

Links by customer ID or place ID resolve to the same full place record.

maps.google.com/?cid=3545819340560108778

Share links

Short maps.app.goo.gl links from the share button are followed and read.

maps.app.goo.gl/...

Hours you can compute with

Opening hours as 24-hour times in the place's own time zone, plus whether it is open right now.

"periods": [{ "open": "07:00", "close": "21:00" }]

One call, every field

Point the scrape call at a Google Maps link. With JSON output and no prompt, the data comes back as it is, for 1 credit and no AI cost.

Ask for markdown instead and you get the readable page as text. The structured data still comes back, in its own structuredData field next to the markdown.

import { SpidraClient } from "spidra";
 
const spidra = new SpidraClient({
apiKey: process.env.SPIDRA_API_KEY,
});
 
const result = await spidra.scrape({
urls: [{ url: "https://www.google.com/maps/search/coffee+shops/@30.2672,-97.7431,13z" }],
output: "json",
});
 
const data = result.content;
for (const p of data.places) console.log(p.title, p.phone, p.rating);
What you get for each place
Identity
Name, category and all categories, place ID, CID, data ID and knowledge graph ID, and a stable Google Maps link
Address
The full address, its parts (street, neighborhood, city, postal code, state, country code), plus code and coordinates
Contact
Phone as shown and in international format, website and its domain
Hours
Each day's hours as 24-hour periods, the time zone, whether it is open now and the open state Google shows
Ratings
Average rating, review count, the 1 to 5 star breakdown, review topics with mention counts and short review snippets
Status
Business status (operational, temporarily or permanently closed), claimed or not, and the owner
Extras
Description, highlight, photo count and photos, thumbnail and accessibility attributes
Reviews
Up to 60 per place: rating, date, text, language, reviewer name and profile, photos and the owner's reply

What comes back

Real responses from Spidra, trimmed for length. Nothing here is mocked up.

Request
https://www.google.com/maps/search/coffee+shops/@30.2672,-97.7431,13z

A Maps search link with a viewport. One page is 20 places, each with every field Maps shows in the list.

Response (real run, October 18, 2026, trimmed)
{
"type": "search",
"query": "coffee shops",
"location": {
"lat": 30.2672,
"lng": -97.7431,
"zoom": 13
},
"resultCount": 20,
"places": [
{
"position": 1,
"title": "Café Crème - Downtown",
"placeId": "ChIJ0QbsjcW1RIYRJxQSKO9kl8A",
"category": "Coffee shop",
"address": "710 W Cesar Chavez St, Austin, TX 78701",
"addressComponents": {
"neighborhood": "Seaholm District",
"street": "710 W Cesar Chavez St",
"city": "Austin",
"postalCode": "78701",
"state": "Texas",
"countryCode": "US"
},
"location": {
"lat": 30.2661527,
"lng": -97.7513939
},
"phone": "(512) 730-0377",
"website": "https://cafecremeaustin.com/locations/downtown",
"rating": 4.7,
"reviewsCount": 342,
"businessStatus": "OPERATIONAL",
"openNow": true,
"openState": "Open · Closes 9 PM",
"hours": {
"timeZone": "America/Chicago",
"days": [
{
"day": "Sunday",
"date": "2026-10-18",
"display": "7 AM–9 PM",
"closed": false,
"open24Hours": false,
"periods": [
{
"open": "07:00",
"close": "21:00"
}
]
}
]
}
},
"… 19 more"
]
}

Hours a program can read

Most Maps scrapers hand you hours as a sentence like "7 AM to 9 PM" and leave you to parse it. Spidra returns each day as 24-hour open and close times, in the place's own time zone, with closed days and 24-hour days marked.

It also works out whether the place is open now, in its local time, so you don't have to know where it is to filter by it.

Café Crème, Austin (real run, trimmed)
"timeZone": "America/Chicago",
"openNow": true,
"hours": {
"days": [{
"day": "Sunday",
"display": "7 AM–9 PM",
"closed": false,
"open24Hours": false,
"periods": [{ "open": "07:00", "close": "21:00" }]
}]
}

Missing on Google is not the same as failed

When a field is empty, you need to know why. Every place comes with a fieldStatus map that says, for each field, whether Google has it, doesn't have it, or doesn't show it to visitors who aren't signed in.

So a place without a website reads as absent, not as a scraping error, and you can trust an empty column.

Katz's Delicatessen (real run, trimmed)
"fieldStatus": {
"website": "present",
"hotel": "absent",
"ownerDescription": "absent",
"popularTimes": "unavailableAnonymous",
"priceLevel": "unavailableAnonymous",
"menuLink": "unavailableAnonymous"
}

Local results, from the right place

Google ranks and words results by where the searcher is. Spidra reads Maps from a residential connection in the country you choose with proxyCountry, so a search in Berlin comes back the way a person in Germany sees it.

Coordinates in the link set the area searched. Zoom in to get the 20 places in a smaller area, and use several links to cover a city.

Ask for the columns you want

Describe the answer as a prompt, a JSON schema or both, and it comes back in that shape. The AI reads a compact copy of the data Spidra already read, not the whole page.

Request
const result = await spidra.scrape({
urls: [{ url: "https://www.google.com/maps/search/dentists/@40.7128,-74.0060,13z" }],
prompt: "List each dentist with name, phone, website, rating and review count.",
schema: {
type: "object",
properties: {
dentists: {
type: "array",
items: {
type: "object",
properties: {
name: {
type: "string"
},
phone: {
type: "string"
},
website: {
type: "string"
},
rating: {
type: "number"
},
reviews: {
type: "integer"
}
}
}
}
}
},
});
What came back (real run)
{
"dentists": [
{
"name": "Wall Street Dental Spa - Financial District",
"phone": "(212) 514-5514",
"website": "https://wallstdentalspanyc.com/",
"rating": 4.8,
"reviews": 1477
},
{
"name": "209 NYC Dental",
"phone": "(212) 355-2290",
"website": "https://www.209nycdental.com/",
"rating": 4.9,
"reviews": 1931
},
{
"name": "Soho Smile - Cosmetic Dentist NYC",
"phone": "(212) 334-7330",
"website": "https://www.sohosmile.com/",
"rating": 4.9,
"reviews": 211
},
"… 17 more"
]
}

This request cost 7 credits on October 18, 2026: 1 for the page plus the AI tokens. For the data as it is, use JSON output with no prompt for 1 credit.

What teams build with it

Maps data feeds sales, research and local marketing.

How Spidra compares

Google Maps has many scrapers, and some are cheaper per review at volume. Here is how they differ.

Apify (Compass)SerpApiOutscraperSpidra
1,000 places$4.00 down to $1.50, more for details and contacts$25 down to $1.96 per 1,000 searches of 20$3, then $1 per 1,00050 credits (20 per page): $0.19 down to $0.10
Reviews$0.60 down to $0.30 per 1,000Separate reviews engine, per searchPer review, by volumeUp to 60 per place, included in the 1 credit
HoursText per dayText per dayText per day24-hour periods, time zone, open now
Empty fieldsEmptyMissing keyEmptyMarked present, absent or not shown to visitors
OutputFixed fieldsFixed fieldsFixed fieldsFixed fields, or your own schema or prompt
Beyond MapsThousands of other actorsSearch enginesGoogle data productsAny website, crawl, search, PDFs, MCP

Choose Apify or Outscraper if

You need thousands of places from one query with built-in paging and contact enrichment, or full review exports beyond the first 60.

Choose Spidra if

You want clean, typed records you can use as they come, local results from the right country, and Maps plus any other website through one API.

Competitor prices are as published on their own pages on October 15, 2026 and may have changed. Spidra prices use 1 credit per page on each plan. Sources: Apify, SerpApi, Outscraper.

What to know before you build

We would rather you hear the limits from us than find them in production.

  • One page per request: a search link returns the first 20 places. For more, split the area into smaller views (zoom in) and send one link per view.
  • A place link returns up to 60 reviews, most relevant first. Full review exports beyond that aren't available yet.
  • Google doesn't show some details to visitors who aren't signed in: popular times, menus, reservation links, price level, most attributes and the full photo gallery. They come back marked unavailableAnonymous, never guessed.
  • Reviews include the reviewer's public name and profile link, as Google shows them. Handle personal data according to the privacy laws that apply to you.

What it costs

1 credit per page. Pages that can't be delivered are free. Work out your monthly volume below.

Monthly credits
6,000
Fits the Builder plan ($79/mo)

Example: 200 search pages a day is 4,000 places, about 6,000 credits a month. Plain JSON output uses no AI tokens.

PlanPriceGoogle Maps pages a month
Free$0up to 300 (one time)
Starter$19/moup to 5,000
BuilderPopular$79/moup to 25,000
Pro$249/moup to 125,000

Credits are shared across everything Spidra does, so the same plan covers Google Maps and any other site.

Related scrapers

Same API key, same credits. See every scraper.

FAQ

Questions, answered

Google Maps

The Places API is official and reliable, but it is billed per field group, returns at most 5 reviews per place, and has its own terms on storing data. Spidra reads the public Maps pages, so you get up to 60 reviews, the star breakdown and the review topics in one call for 1 credit.

Send a Google Maps link and see what comes back.

Get 300 free credits, no card, and run your first Maps search from the dashboard or the API.

Spidra is not affiliated with, endorsed by, or sponsored by Google. Google Maps is a trademark of Google LLC. Check Google's terms of service and the laws that apply to you before you collect data, and use the data responsibly.