# Google Maps Scraper data API: fields, sample output and cost per 1,000 rows

Scrape Google Maps business listings by search and place: name, category, address, coordinates, rating, review count, phone, website, opening hours, place ID and Maps link.

This is the reference for the Actor `v0iddo/google-maps-scraper`: what is in every output row, what the input takes, and what a run costs. Values below come from a real run of the Actor.

## At a glance

| | |
| --- | --- |
| Actor | `v0iddo/google-maps-scraper` |
| Store page | [Google Maps Scraper](https://apify.com/v0iddo/google-maps-scraper) |
| Output | one row per result, as JSON, CSV, Excel or HTML |
| Fields per row | 22 (13 text, 5 number, 2 URL, 2 list) |
| Cap on results | `maxItems` in the input |
| Price | $1.50 per 1,000 results |

## Output fields

Each result is one row with these fields (fields that name people are left out):

| Field | Type | Meaning | Sample value |
| --- | --- | --- | --- |
| `name` | text | Name | Refinery High End Coffee |
| `category` | text | Category | Coffee shop |
| `address` | text | Address | Albrechtstraße 11B, 10117 Berlin, Germany |
| `city` | text | City | Berlin |
| `rating` | number | Rating | 4.6 |
| `reviewsCount` | number | Reviews | 1221 |
| `phone` | text | Phone |  |
| `website` | URL | Website | http://refinerycoffee.de/ |
| `latitude` | number | Latitude | 52.5213117 |
| `longitude` | number | Longitude | 13.3849173 |
| `placeId` | text | Place ID | ChIJ9UK3L8JRqEcRidYSi6cycYo |
| `url` | URL | Maps URL | https://www.google.com/maps/place/?q=place_id:ChIJ9UK3L8JRqEcRidYSi... |
| `searchQuery` | text |  | coffee shop in Berlin |
| `position` | number |  | 1 |
| `categories` | list |  | ["Coffee shop"] |
| `street` | text |  | Albrechtstraße 11B |
| `postalCode` | text |  | 10117 |
| `countryCode` | text |  | DE |
| `neighborhood` | text |  | Mitte |
| `openingHours` | list |  | [{"day": "Monday", "hours": "8 AM-6 PM"}, {"day": "Tuesday", "hours... |
| `featureId` | text |  | 0x47a851c22fb742f5:0x8a7132a78b12d689 |
| `cid` | text |  | 9975810344776554121 |

## One record

```json
{
  "searchQuery": "coffee shop in Berlin",
  "position": 1,
  "name": "Refinery High End Coffee",
  "category": "Coffee shop",
  "categories": [
    "Coffee shop"
  ],
  "address": "Albrechtstraße 11B, 10117 Berlin, Germany",
  "street": "Albrechtstraße 11B",
  "city": "Berlin",
  "postalCode": "10117",
  "countryCode": "DE",
  "neighborhood": "Mitte",
  "latitude": 52.5213117,
  "longitude": 13.3849173,
  "rating": 4.6,
  "reviewsCount": 1221,
  "website": "http://refinerycoffee.de/",
  "openingHours": [
    {
      "day": "Monday",
      "hours": "8 AM-6 PM"
    },
    {
      "day": "Tuesday",
      "hours": "8 AM-6 PM"
    },
    {
      "day": "Wednesday",
      "hours": "8 AM-6 PM"
    }
  ],
  "placeId": "ChIJ9UK3L8JRqEcRidYSi6cycYo",
  "featureId": "0x47a851c22fb742f5:0x8a7132a78b12d689",
  "cid": "9975810344776554121",
  "url": "https://www.google.com/maps/place/?q=place_id:ChIJ9UK3L8JRqEcRidYSi6cycYo"
}
```

## Input parameters

| Parameter | Type | Required | Default | What it does |
| --- | --- | --- | --- | --- |
| `searchQueries` | array | no | ["coffee shop"] | What to look for on Google Maps, one per line, for example: coffee shop, plumber, dentist. |
| `location` | string | no |  | Optional city, area or address added to every query as 'query in location', for example Berlin or Austin, TX. |
| `startUrls` | array | no |  | Optional Google Maps search links, for example https://www.google.com/maps/search/coffee+in+berlin. |
| `language` | string | no | en | Language of the Google Maps page: category names, days and hours. |
| `maxPlacesPerSearch` | integer | no | 0 | Stop each search after this many places (0 = as many as Google Maps lists, usually 100 to 200). |
| `maxItems` | integer | no | 100 | The run stops after this many result rows. |

## Cost per 1,000 rows

$1.50 per 1,000 results. You pay per result row. There is no separate charge per run. Higher Apify plans pay less per result, down to $1.05 per 1,000.

| Results | Cost at the listed price | Cost at the lowest plan price |
| --- | --- | --- |
| 100 | $0.15 | $0.10 |
| 1,000 | $1.50 | $1.05 |
| 10,000 | $15.00 | $10.50 |
| 100,000 | $150.00 | $105.00 |

The figures are the listed price times the number of results. The `maxItems` limit and the maximum cost setting in the run options both stop a run before it spends more than you planned.

## Get the rows as CSV over HTTP

One request starts a run, waits for it and returns the dataset. The `format` parameter picks the file type and `fields` picks the columns. Replace the token with the one from Apify Console, Settings, Integrations.

```bash
curl -X POST "https://api.apify.com/v2/acts/v0iddo~google-maps-scraper/run-sync-get-dataset-items?format=csv&fields=name,category,address" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["coffee shop"], "location": "Berlin", "language": "en", "maxItems": 20}'
```

## Good to know

- Reads the public Google Maps search pages the way a visitor's browser does, with no login and no Google account. robots.txt of www.google.com allows these pages and the actor obeys it.
- Google lists about 100 to 200 places for one search; for more, add queries or split by area ('dentist in Camden', 'dentist in Soho').
- Phone and website are what the listing shows publicly for the business; many listings show no phone or website and have null there. No reviews or reviewer names are collected.
- If Google shows a consent page, a CAPTCHA or an 'unusual traffic' page, the run stops and says so; the actor does not try to get around it. Run it again later.

## Links

- Actor on the Apify Store: [Google Maps Scraper](https://apify.com/v0iddo/google-maps-scraper)
- Guide with the Python and JavaScript code: [https://voidd0.github.io/google-maps-scraper/](https://voidd0.github.io/google-maps-scraper/)

