# Google Maps Scraper - Every Place, Not Just the Top 250 (`zen-studio/google-maps-scraper`) Actor

Extract every place from Google Maps with 40+ fields: ratings, phone, website, opening hours, popular times, amenities, photos, reviews. Full coverage past Google's 250-per-view cap, hundreds of places per minute. $4.99 per 1,000 places.

- **URL**: https://apify.com/zen-studio/google-maps-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Lead generation, SEO tools, Travel
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.29 / 1,000 places

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Maps Scraper | Contacts, Reviews, Photos & Popular Times (2026)

![Google Maps Scraper](https://iili.io/CdnHOnp.png)

<blockquote style="border-left:4px solid #4C945E;background:#F0FDF4;padding:12px 16px">
<span style="font-size:16px;font-weight:700;color:#1C1917">40+ fields on every place — not just the top 250 Google shows you</span> <span style="font-size:15px;color:#57534E"> — full address, phone, opening hours, hour-by-hour popular times, amenities, reservation links, photos, and reviews, at hundreds of places per minute. The richest Google Maps output on Apify.</span>
</blockquote>

<table>
<tr>
<td colspan="5" style="padding:10px 14px;background:#4C945E;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Zen Studio Maps Suite</span>
<span style="color:#E8F5E9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Places, reviews, and routes across every major map provider</span>
</td>
</tr>
<tr>
<td style="padding:12px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:20%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vBUd2ObzJUemitHHP-IYaavrd0t8-google-maps-directions-api-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/google-maps-scraper" style="color:#4C945E;text-decoration:none;font-weight:700;font-size:13px">Google Maps</a><br>
<span style="color:#4C945E;font-size:12px;font-weight:600">&#10148; You are here</span>
</td>
<td style="padding:12px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:20%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-y6Jak0F6vxdZew3b2-HljeTJZkhm-google-maps-directions-api-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/google-maps-directions-api" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Directions</a><br>
<span style="color:#78716C;font-size:12px">Routes, ETA, steps</span>
</td>
<td style="padding:12px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:20%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/apple-maps-scraper-pro" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Apple Maps</a><br>
<span style="color:#78716C;font-size:12px">Phones, ratings, hours</span>
</td>
<td style="padding:12px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:20%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-fRSgBvgbsRB4o7t30-UkaIbH1Yhq-yandex-maps-scraper-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/yandex-maps-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Yandex Maps</a><br>
<span style="color:#78716C;font-size:12px">Leads, reviews, API</span>
</td>
<td style="padding:12px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:20%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NBmcHCtkUEhA0DNP3-SrXbUedsVm-2gis-scraper-api-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/2gis-places-scraper-api" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">2GIS Places</a><br>
<span style="color:#78716C;font-size:12px">Phones, emails, reviews</span>
</td>
</tr>
</table>

### Key Features

- **40+ fields per place** — every result is auto-enriched with the full detail page. No toggles, no opt-ins.
- **Goes past the 250-per-view ceiling** — get every restaurant in Manhattan, not just the top 200 you'd see in the Maps UI.
- **Fast at scale** — hundreds of places per minute; a dense 1,500-place city finishes in minutes.
- **Hour-by-hour popular times** — 7 days × 24 hours of busyness data per place. Few scrapers capture this.
- **Free tier** — 100 lifetime results to evaluate. No credit card required.

#### Copy to your AI assistant

````

zen-studio/google-maps-scraper on Apify. Google Maps search with 40+ fields per place including hour-by-hour popular times, amenities, and reservation links. Call ApifyClient("TOKEN").actor("zen-studio/google-maps-scraper").call(run\_input={...}), then client.dataset(run\["defaultDatasetId"]).list\_items().items. Provide searchStringsArray+locationQuery, OR startUrls, OR placeIds. Full spec: GET https://api.apify.com/v2/acts/zen-studio~google-maps-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations

````

### How to Scrape Google Maps Data

#### Basic — search a city

```json
{
  "searchStringsArray": ["restaurants"],
  "locationQuery": "Astoria, NY",
  "maxCrawledPlacesPerSearch": 50
}
````

#### Every place in a dense city — go past the 250-per-view ceiling

```json
{
  "searchStringsArray": ["restaurants"],
  "locationQuery": "Manhattan, NY",
  "maxCrawledPlacesPerSearch": 1500
}
```

#### Scrape specific places by URL or ID — no search needed

```json
{
  "placeIds": ["ChIJlxDiXJxZwokRp4HHbeYqXXU"],
  "startUrls": [
    {"url": "https://www.google.com/maps/place/Veselka/..."}
  ],
  "maxReviews": 20,
  "maxImages": 10
}
```

#### Bulk lead-gen — trim heavy fields to keep your export small

```json
{
  "searchStringsArray": ["dentist"],
  "locationQuery": "Chicago, IL",
  "maxCrawledPlacesPerSearch": 500,
  "websiteFilter": "with_website",
  "excludeFields": [
    "popularTimes",
    "amenities",
    "relatedPlaces",
    "reviewTeasers"
  ]
}
```

### What Data Can You Extract from Google Maps?

Every place includes:

- **Identity** — name, place ID, hex ID, feature ID, Google Maps URL, verified owner
- **Address** — full address, street, locality, country, Plus Code (compound + global)
- **Geo** — latitude, longitude, neighborhood, city label, country code, timezone, region hierarchy (continent → district)
- **Contact** — phone, website, menu URL
- **Categories** — human-readable list, primary category, machine-readable GCID slugs, entity type
- **Ratings & price** — rating, reviews count, price range, price label
- **Hours** — full opening hours (Mon–Sun), hour-by-hour popular times (busyness 0–100, wait labels)
- **Rich content** — description, meta description, typical visit length, amenities (14 sections)
- **Photos** — hero photo with native size + total photo count, photo tab catalog (All / Latest / Menu / Vibe / dish tabs), Street View thumbnail
- **Reviews** — featured snippets, review keyword pills with sentiment counts, optional full reviews (review ID, rating, date, text, language, source, photos, author)
- **Discovery** — "people also search for" related places, immersive 360° media, walking-time travel markers (15 / 30 min landmarks)
- **Reservations** — booking links, partner provider blocks (Resy, OpenTable, etc.)
- **Photos / videos** (optional add-on) — photo URL, photo ID, width, height, upload date, source, tab tags; video MP4 + HLS + DASH streams
- **Vertical-specific** — hotel editorial + amenities + check-in policies; fuel prices for gas stations; directory of sub-tenants for malls / plazas

#### Output Example

```json
{
  "name": "Veselka",
  "address": "Veselka, 144 2nd Ave, New York, NY 10003",
  "addressFormatted": "144 2nd Ave, New York, NY 10003",
  "addressComponents": {
    "street": "144 2nd Ave",
    "locality": "New York, NY 10003",
    "country": null
  },
  "placeId": "ChIJlxDiXJxZwokRp4HHbeYqXXU",
  "hexId": "0x89c2599c5ce21097:0x755d2ae66dc781a7",
  "ftid": "/m/080lxnb",
  "rating": 4.6,
  "reviewsCount": 7750,
  "priceRange": "$20–30",
  "priceLabel": "$20 to $30",
  "latitude": 40.729015499999996,
  "longitude": -73.9871139,
  "plusCode": {
    "compound": "P2H7+J5 New York",
    "global": "87G8P2H7+J5"
  },
  "phone": "(212) 228-9682",
  "website": "https://www.veselka.com/",
  "categories": [
    "Ukrainian restaurant",
    "Breakfast restaurant",
    "Diner",
    "... +6 more"
  ],
  "primaryCategory": {
    "id": 8,
    "slug": "restaurants"
  },
  "categoryGcids": [
    {
      "gcid": "ukrainian_restaurant",
      "label": "Ukrainian"
    },
    "... +8 more"
  ],
  "entityType": "restaurant",
  "shortDescription": "Neighborhood diner serving Ukrainian food",
  "neighborhood": "Manhattan",
  "cityLabel": "New York, NY",
  "countryCode": "US",
  "timezone": "America/New_York",
  "openingHours": {
    "Tuesday": "9 AM–12 AM",
    "Wednesday": "9 AM–12 AM",
    "Thursday": "9 AM–12 AM",
    "Friday": "Open 24 hours",
    "Saturday": "Open 24 hours",
    "Sunday": "12 AM–11 PM",
    "Monday": "9 AM–12 AM"
  },
  "popularTimes": [
    {
      "day": "Monday",
      "hours": [
        {
          "hour": 6,
          "busyness": 0,
          "label": "",
          "waitLabel": null,
          "hourLabel": "6 AM"
        },
        "... +17 more hours"
      ]
    },
    "... +6 more days"
  ],
  "reviewTeasers": [
    {
      "text": "Great food, be patient for the service, friendly staff and manhattan prices.",
      "authorProfile": "https://www.google.com/maps/contrib/113747744811747445251?hl=en-US",
      "authorPhoto": "https://lh3.googleusercontent.com/a-/ALV-UjXwTAyNn0cWu2...0-k-cc-rp-mo",
      "rating": 2,
      "reviewId": null
    },
    "... +2 more"
  ],
  "bookingLinks": [
    "https://resy.com/cities/new-york-ny/venues/veselka-east...o7osBw%3D%3D"
  ],
  "bookingPartners": [
    {
      "type": "Reserve a table",
      "provider": "Resy",
      "providerDomain": "resy.com",
      "providerLogo": "https://lh3.googleusercontent.com/xfq6Nz4LO_41wDTfcL4N0...bPCLTVx5YhyQ",
      "url": "https://resy.com/cities/new-york-ny/venues/veselka-east...o7osBw%3D%3D"
    },
    "... +1 more"
  ],
  "relatedPlaces": [
    {
      "name": "Ukrainian East Village Restaurant",
      "hexId": "0x0:0x368f0888d6eac978",
      "rating": 4.3,
      "reviewsCount": 867,
      "latitude": 40.728891499999996,
      "longitude": -73.9870955,
      "categories": [
        "Ukrainian",
        "Family-friendly"
      ]
    },
    "... +4 more"
  ],
  "streetViewThumb": "https://lh3.googleusercontent.com/-560plyIzZdo/AAAAAAAA...nd/photo.jpg",
  "googleMapsUrl": "https://www.google.com/maps/preview/place/Veselka,+144+...2ae66dc781a7",
  "permanentlyClosed": false,
  "_source": "place_detail",
  "_query": "Veselka",
  "_searchLocation": "East Village, Manhattan Community Board 3, Manhattan, New York County, New York, 10003, United States",
  "menuUrl": "https://veselka.com/blogs/menu-list/main-location-specials",
  "description": "Borscht and pierogi are menu highlights at this lively Ukrainian eatery with a rustic vibe and murals on the walls.        ",
  "metaDescription": "EST. 1954\nFor seventy years, customers have crowded into Veselka, a cozy Ukrainian coffee shop in New York City's East Village, to enjoy pie...",
  "popularSpendTime": "People typically spend 45 min to 2 hr here",
  "amenities": {
    "Service options": [
      "Outdoor seating",
      "Delivery",
      "Onsite services",
      "Takeout",
      "Dine-in"
    ],
    "Highlights": [
      "Fast service",
      "Great beer selection",
      "Great coffee",
      "Great dessert",
      "Serves local specialty"
    ],
    "... +12 more sections": "..."
  },
  "reviewPills": [
    {
      "label": "pierogis",
      "topicId": "AA1Y4fAHawc",
      "count": 1105,
      "secondaryCount": 413,
      "positiveCount": 756,
      "neutralCount": 51,
      "negativeCount": 15,
      "fusedTopicId": "ZnVzZWRfdG9waWNfaWQ6QUExWTRmQUhhd2M="
    },
    "... +9 more"
  ],
  "verifiedOwner": {
    "name": "Veselka (Owner)",
    "ownerId": "101183567786896189438"
  },
  "regionHierarchy": [
    {
      "name": "Americas",
      "weight": 0.75
    },
    "... +13 more"
  ],
  "heroPhoto": {
    "url": "https://lh3.googleusercontent.com/gps-cs-s/APNQkAHz8kIM...0-ro-0-fo100",
    "photoId": "CIHM0ogKEICAgICEhd6u3AE",
    "nativeWidth": 5472,
    "nativeHeight": 2736,
    "caption": null,
    "photoCount": 7054
  },
  "photoTabs": [
    {
      "name": "All",
      "token": "CgIgAQ==",
      "previewPhotoCount": 1,
      "previewPhotos": [
        "https://lh3.googleusercontent.com/gps-cs-s/APNQkAFIXM6Z...97-h298-k-no"
      ]
    },
    "... +15 more"
  ],
  "travelTimeMarkers": [
    {
      "durationSeconds": 900,
      "label": "15 min",
      "latitude": 40.729131599999995,
      "longitude": -73.98729519999999
    },
    "... +8 more"
  ],
  "immersiveView": [
    {
      "url": "https://lh3.googleusercontent.com/iv/ADz_H0rYNOMvIqGB_g...zc=w406-h200",
      "type": "immersive_view"
    }
  ],
  "reviews": [
    {
      "reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2pWQ1gyUkNaRlJNTkVoNmFqZzNSR2xCVGkxcVkxRRAB",
      "rating": 5,
      "date": "13 hours ago",
      "publishedAtMicros": 1779752635529611,
      "editedAtMicros": null,
      "text": null,
      "language": null,
      "source": "Google",
      "photos": null,
      "author": "A VarZamCa",
      "authorPhoto": "https://lh3.googleusercontent.com/a-/ALV-UjVeTBBVX6JSmn...o-ba12-br100",
      "authorProfile": "https://www.google.com/maps/contrib/1164356328752887798...eviews?hl=en",
      "reviewUrl": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!...%7C%7C?hl=en"
    },
    "... +1 more"
  ],
  "images": [
    {
      "url": "https://lh3.googleusercontent.com/gps-cs-s/APNQkAHz8kIM...0-ro-0-fo100",
      "mediaType": "image",
      "source": "embedded",
      "tags": []
    },
    "... +1 more"
  ]
}
```

### Advanced Usage

#### Search a structured area instead of free text

```json
{
  "searchStringsArray": ["bakeries"],
  "city": "Brooklyn",
  "state": "NY",
  "postalCode": "",
  "countryCode": "us"
}
```

Combine `city` + `state` for US/AU/IN/BR/MX/DE. Use `postalCode` + `countryCode` alone (never with `city` — they conflict in the geocoder).

#### Custom polygon — only this neighborhood

```json
{
  "searchStringsArray": ["pizza"],
  "customGeolocation": {
    "type": "Polygon",
    "coordinates": [[
      [-73.99, 40.72],
      [-73.96, 40.72],
      [-73.96, 40.74],
      [-73.99, 40.74],
      [-73.99, 40.72]
    ]]
  }
}
```

Coordinate order is `[longitude, latitude]`. `customGeolocation` overrides every other location field.

#### Filtered hospitality dataset with reviews and photos

```json
{
  "searchStringsArray": ["hotel"],
  "locationQuery": "Miami Beach, FL",
  "maxCrawledPlacesPerSearch": 200,
  "placeMinimumStars": "4.0",
  "openNow": false,
  "maxReviews": 30,
  "reviewsSort": "newest",
  "reviewsFilterString": "breakfast",
  "maxImages": 20
}
```

`reviewsFilterString` over-fetches and filters by substring (case-insensitive). Useful when you want the 30 most recent reviews mentioning a specific term.

#### Narrow by category and price

```json
{
  "searchStringsArray": ["restaurants"],
  "locationQuery": "New York, NY",
  "categoryFilterWord": "chinese_restaurant",
  "priceMin": 20,
  "priceMax": 60
}
```

`categoryFilterWord` takes a Google category slug. Common ones: `chinese_restaurant`, `coffee_shop`, `hotel`, `plumber`, `dentist`. Full list of 4,400+ slugs: [category reference](https://files.catbox.moe/qsc727.json). `priceMin`/`priceMax` set a per-person dining band in the country's local currency (restaurants only).

#### Multilingual run

```json
{
  "searchStringsArray": ["Café"],
  "locationQuery": "Paris, France",
  "language": "fr",
  "countryCode": "fr",
  "maxCrawledPlacesPerSearch": 100
}
```

`language` affects category labels and review text preferences. `countryCode` biases search results geographically.

### Pricing — Pay Per Event (PPE)

**$4.99 per 1,000 places** (every place is auto-enriched with the full detail page — no separate enrichment fee). Subscription plans get a lower per-place rate.

| Event | Per call | Per 1,000 |
|-------|----------|-----------|
| Place scraped (40+ fields) | $0.00499 | $4.99 |
| Review scraped | $0.00050 | $0.50 |
| Photo / video scraped | $0.00050 | $0.50 |

**Free tier:** 100 lifetime results, 10 results per run. No credit card required.

### FAQ

**How many places can I extract per run?**
Up to your `maxCrawledPlacesPerSearch` cap per search term. The actor reliably returns 1,500+ places in dense cities (validated on Manhattan restaurants); sparse areas return the natural supply ceiling.

**How do you get past Google's 250-per-view ceiling?**
For dense queries (every restaurant in Manhattan, every dentist in LA), the actor sweeps the search area systematically and deduplicates by place ID. You always get unique places, never the same place twice.

**Is the data fresh?**
Every run hits Google Maps directly. No cached snapshots. Opening hours, reviews, photos — all live at run time.

**My search returned the wrong Starbucks. How do I target a specific one?**
Google has many places sharing a name. Use `placeIds` or a full Google Maps URL when you need a specific location. Free-text searches return whatever Google ranks first for that name + area.

**Can I scrape reviews without scraping places first?**
Use `placeIds` or `startUrls` with `maxReviews` > 0. The actor will fetch only those places (no search) and pull their reviews.

**What languages and countries are supported?**
15 display languages (English, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Japanese, Chinese (Simplified/Traditional), Korean, Arabic, Turkish, Russian) and 249 ISO country codes for geo-biasing.

**What's the free tier?**
100 lifetime results across all your runs, 10 results per run. No credit card required. Upgrade to a paid Apify plan to unlock unbounded runs.

**Can I run this on a schedule?**
Yes — Apify schedules let you run this actor hourly, daily, or on cron. Pipe results into your own database via webhooks or pull from the dataset API.

### More Zen Studio scrapers for maps & local data

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-y6Jak0F6vxdZew3b2-HljeTJZkhm-google-maps-directions-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Google Maps**
  - [Google Maps Directions & Routes API](https://apify.com/zen-studio/google-maps-directions-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Apple Maps**
  - [Apple Maps Scraper](https://apify.com/zen-studio/apple-maps-scraper-pro)
  - [Apple Maps Directions & Route API](https://apify.com/zen-studio/apple-maps-directions-route-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-fRSgBvgbsRB4o7t30-UkaIbH1Yhq-yandex-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Yandex Maps Яндекс Карты**
  - [Yandex Maps Scraper](https://apify.com/zen-studio/yandex-maps-scraper)
  - [Yandex Maps Reviews Scraper](https://apify.com/zen-studio/yandex-maps-reviews-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NBmcHCtkUEhA0DNP3-SrXbUedsVm-2gis-scraper-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **2GIS 2ГИС**
  - [2GIS Places Scraper](https://apify.com/zen-studio/2gis-places-scraper-api)
  - [2GIS Reviews Scraper](https://apify.com/zen-studio/2gis-reviews-scraper)

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available data. Users must comply with Google Maps terms of service and data protection regulations (GDPR, CCPA).

***

*The richest Google Maps scraper on Apify — every place auto-enriched with 40+ fields, hour-by-hour popular times, amenities, and reservation links, hundreds per minute. Goes past Google's 250-per-view ceiling.*

# Actor input Schema

## `searchStringsArray` (type: `array`):

What you'd type into the Google Maps search bar. One term per line, e.g. <code>restaurants</code> or <code>family dentist</code>.

## `locationQuery` (type: `string`):

Where to search. Type it like you would in Google Maps: <code>Astoria, NY</code>, <code>Berlin Germany</code>, <code>90210</code>, or a full street address. Required together with <b>Search terms</b>, unless you use the structured or custom-area fields below.

## `maxCrawledPlacesPerSearch` (type: `integer`):

How many places you want per search term. The actor systematically scans the location until it reaches this number or runs out of results. Smaller numbers finish faster.

## `city` (type: `string`):

City name only (no state or country — those have their own fields). Use instead of <b>Location</b> when you want a structured query.

## `state` (type: `string`):

State or region. Pairs well with <b>City</b> in countries that use states (US, AU, IN, BR, MX, DE).

## `county` (type: `string`):

County (US), regional district (CA), département (FR), or local equivalent.

## `postalCode` (type: `string`):

Postal/ZIP code. Combine with <b>Country code</b> only — never with <b>City</b> (they conflict).

## `customGeolocation` (type: `object`):

GeoJSON Point or Polygon defining the exact area to search. Coordinate order is <code>\[longitude, latitude]</code>. When set, this overrides all other location fields.

## `startUrls` (type: `array`):

Skip the search step and scrape these places directly. Accepts <code>/maps/place/...</code>, <code>/maps?cid=...</code>, and shortened URLs.

## `placeIds` (type: `array`):

Google Maps place IDs like <code>ChIJN1t\_tDeuEmsRUsoyG83frY4</code>. The <code>place\_id:</code> prefix is accepted but optional.

## `categoryFilterWord` (type: `string`):

Restrict results to one Google place category, given as its slug — e.g. <code>chinese\_restaurant</code>, <code>hotel</code>, <code>plumber</code>, <code>coffee\_shop</code>, <code>dentist</code>. Leave blank to include everything your search term returns.<br><br>Advanced: full list of 4,400+ category slugs → <a href="https://files.catbox.moe/qsc727.json" target="_blank">category reference</a>. The category must actually appear in your results to narrow them (e.g. <code>restaurants</code> + <code>chinese\_restaurant</code>).

## `placeMinimumStars` (type: `string`):

Drop places below this average rating. Leave blank to include unrated places too.

## `priceMin` (type: `integer`):

Lowest typical dining price per person to include, in the local currency of your selected <b>Country</b> (e.g. <code>20</code> for $20 / €20). Leave at 0 for no lower limit. Only affects restaurant-type places.

## `priceMax` (type: `integer`):

Highest typical dining price per person to include, in the local currency of your selected <b>Country</b> (e.g. <code>60</code> for $60 / €60). Leave at 0 to turn the price filter <b>off</b>. Only affects restaurant-type places.

## `openNow` (type: `boolean`):

Restrict to places that are currently open (in their local time).

## `skipClosedPlaces` (type: `boolean`):

Drop places marked permanently closed by Google.

## `websiteFilter` (type: `string`):

Keep places with a website, without one, or both.

## `searchMatching` (type: `string`):

How strictly the place name has to match your search term. <b>Anything Google returns</b> is the default and matches the usual Google Maps behavior.

## `maxReviews` (type: `integer`):

<code>0</code> = no reviews. Set to a large number (e.g. <code>99999</code>) to fetch all available. Each review is billed at $0.50/1k.

## `reviewsSort` (type: `string`):

Sort order applied when fetching reviews. <b>Newest first</b> is most useful for monitoring; <b>Most relevant</b> matches the Google UI default.

## `reviewsFilterString` (type: `string`):

Keep only reviews whose text contains this substring (case-insensitive). Leave blank to keep all. Useful for over-fetching, then narrowing.

## `reviewsOrigin` (type: `string`):

Whether to include reviews from partner sources (Tripadvisor, Booking, etc.) or restrict to Google-native reviews only.

## `maxImages` (type: `integer`):

<code>0</code> = no photos. Each photo includes its tabs (All, Latest, Menu, Vibe, plus dish tabs), upload date, and source. Typical popular places have 100–200 photos available.

## `maxVideos` (type: `integer`):

<code>0</code> = no videos. Each video includes the poster image plus HLS, DASH, and best-quality MP4 stream URLs.

## `excludeFields` (type: `array`):

Tick any fields you don't need — they get dropped from every place row to keep your dataset small. None are required for the actor to work; defaults include everything.

## `language` (type: `string`):

Display language used when fetching results. Affects category labels and review text language preference.

## `countryCode` (type: `string`):

Country used to bias search results geographically. The first 19 entries are common defaults; the rest are alphabetical.

## Actor input object example

```json
{
  "searchStringsArray": [
    "restaurants"
  ],
  "locationQuery": "Astoria, NY",
  "maxCrawledPlacesPerSearch": 50,
  "city": "",
  "state": "",
  "county": "",
  "postalCode": "",
  "startUrls": [],
  "placeIds": [],
  "categoryFilterWord": "",
  "placeMinimumStars": "",
  "priceMin": 0,
  "priceMax": 0,
  "openNow": false,
  "skipClosedPlaces": false,
  "websiteFilter": "all",
  "searchMatching": "all",
  "maxReviews": 0,
  "reviewsSort": "newest",
  "reviewsFilterString": "",
  "reviewsOrigin": "all",
  "maxImages": 0,
  "maxVideos": 0,
  "excludeFields": [],
  "language": "en",
  "countryCode": "us"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchStringsArray": [
        "restaurants"
    ],
    "locationQuery": "Astoria, NY",
    "maxCrawledPlacesPerSearch": 50,
    "startUrls": [],
    "placeIds": [],
    "maxReviews": 0,
    "maxImages": 0,
    "maxVideos": 0,
    "excludeFields": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/google-maps-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchStringsArray": ["restaurants"],
    "locationQuery": "Astoria, NY",
    "maxCrawledPlacesPerSearch": 50,
    "startUrls": [],
    "placeIds": [],
    "maxReviews": 0,
    "maxImages": 0,
    "maxVideos": 0,
    "excludeFields": [],
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/google-maps-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchStringsArray": [
    "restaurants"
  ],
  "locationQuery": "Astoria, NY",
  "maxCrawledPlacesPerSearch": 50,
  "startUrls": [],
  "placeIds": [],
  "maxReviews": 0,
  "maxImages": 0,
  "maxVideos": 0,
  "excludeFields": []
}' |
apify call zen-studio/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zen-studio/google-maps-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps Scraper - Every Place, Not Just the Top 250",
        "description": "Extract every place from Google Maps with 40+ fields: ratings, phone, website, opening hours, popular times, amenities, photos, reviews. Full coverage past Google's 250-per-view cap, hundreds of places per minute. $4.99 per 1,000 places.",
        "version": "0.0",
        "x-build-id": "6xsx0hHgNkxSsyG0I"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zen-studio~google-maps-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zen-studio-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/zen-studio~google-maps-scraper/runs": {
            "post": {
                "operationId": "runs-sync-zen-studio-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/zen-studio~google-maps-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-zen-studio-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchStringsArray": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "What you'd type into the Google Maps search bar. One term per line, e.g. <code>restaurants</code> or <code>family dentist</code>.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationQuery": {
                        "title": "Location — city, neighborhood, address, or ZIP",
                        "type": "string",
                        "description": "Where to search. Type it like you would in Google Maps: <code>Astoria, NY</code>, <code>Berlin Germany</code>, <code>90210</code>, or a full street address. Required together with <b>Search terms</b>, unless you use the structured or custom-area fields below."
                    },
                    "maxCrawledPlacesPerSearch": {
                        "title": "Max places per search term",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many places you want per search term. The actor systematically scans the location until it reaches this number or runs out of results. Smaller numbers finish faster.",
                        "default": 50
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City name only (no state or country — those have their own fields). Use instead of <b>Location</b> when you want a structured query.",
                        "default": ""
                    },
                    "state": {
                        "title": "State / Region",
                        "type": "string",
                        "description": "State or region. Pairs well with <b>City</b> in countries that use states (US, AU, IN, BR, MX, DE).",
                        "default": ""
                    },
                    "county": {
                        "title": "County / District / Département",
                        "type": "string",
                        "description": "County (US), regional district (CA), département (FR), or local equivalent.",
                        "default": ""
                    },
                    "postalCode": {
                        "title": "Postal code",
                        "type": "string",
                        "description": "Postal/ZIP code. Combine with <b>Country code</b> only — never with <b>City</b> (they conflict).",
                        "default": ""
                    },
                    "customGeolocation": {
                        "title": "Custom search area (GeoJSON)",
                        "type": "object",
                        "description": "GeoJSON Point or Polygon defining the exact area to search. Coordinate order is <code>[longitude, latitude]</code>. When set, this overrides all other location fields."
                    },
                    "startUrls": {
                        "title": "Google Maps URLs",
                        "type": "array",
                        "description": "Skip the search step and scrape these places directly. Accepts <code>/maps/place/...</code>, <code>/maps?cid=...</code>, and shortened URLs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "placeIds": {
                        "title": "Place IDs",
                        "type": "array",
                        "description": "Google Maps place IDs like <code>ChIJN1t_tDeuEmsRUsoyG83frY4</code>. The <code>place_id:</code> prefix is accepted but optional.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categoryFilterWord": {
                        "title": "Category filter",
                        "type": "string",
                        "description": "Restrict results to one Google place category, given as its slug — e.g. <code>chinese_restaurant</code>, <code>hotel</code>, <code>plumber</code>, <code>coffee_shop</code>, <code>dentist</code>. Leave blank to include everything your search term returns.<br><br>Advanced: full list of 4,400+ category slugs → <a href=\"https://files.catbox.moe/qsc727.json\" target=\"_blank\">category reference</a>. The category must actually appear in your results to narrow them (e.g. <code>restaurants</code> + <code>chinese_restaurant</code>).",
                        "default": ""
                    },
                    "placeMinimumStars": {
                        "title": "Minimum rating",
                        "enum": [
                            "",
                            "2.0",
                            "2.5",
                            "3.0",
                            "3.5",
                            "4.0",
                            "4.5"
                        ],
                        "type": "string",
                        "description": "Drop places below this average rating. Leave blank to include unrated places too.",
                        "default": ""
                    },
                    "priceMin": {
                        "title": "Min price per person (restaurants)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Lowest typical dining price per person to include, in the local currency of your selected <b>Country</b> (e.g. <code>20</code> for $20 / €20). Leave at 0 for no lower limit. Only affects restaurant-type places.",
                        "default": 0
                    },
                    "priceMax": {
                        "title": "Max price per person (restaurants)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Highest typical dining price per person to include, in the local currency of your selected <b>Country</b> (e.g. <code>60</code> for $60 / €60). Leave at 0 to turn the price filter <b>off</b>. Only affects restaurant-type places.",
                        "default": 0
                    },
                    "openNow": {
                        "title": "Open now only",
                        "type": "boolean",
                        "description": "Restrict to places that are currently open (in their local time).",
                        "default": false
                    },
                    "skipClosedPlaces": {
                        "title": "Skip permanently closed",
                        "type": "boolean",
                        "description": "Drop places marked permanently closed by Google.",
                        "default": false
                    },
                    "websiteFilter": {
                        "title": "Website filter",
                        "enum": [
                            "all",
                            "with_website",
                            "without_website"
                        ],
                        "type": "string",
                        "description": "Keep places with a website, without one, or both.",
                        "default": "all"
                    },
                    "searchMatching": {
                        "title": "Name match strictness",
                        "enum": [
                            "all",
                            "only_includes",
                            "only_exact"
                        ],
                        "type": "string",
                        "description": "How strictly the place name has to match your search term. <b>Anything Google returns</b> is the default and matches the usual Google Maps behavior.",
                        "default": "all"
                    },
                    "maxReviews": {
                        "title": "Reviews per place",
                        "minimum": 0,
                        "type": "integer",
                        "description": "<code>0</code> = no reviews. Set to a large number (e.g. <code>99999</code>) to fetch all available. Each review is billed at $0.50/1k.",
                        "default": 0
                    },
                    "reviewsSort": {
                        "title": "Reviews sort",
                        "enum": [
                            "newest",
                            "mostRelevant",
                            "highestRanking",
                            "lowestRanking"
                        ],
                        "type": "string",
                        "description": "Sort order applied when fetching reviews. <b>Newest first</b> is most useful for monitoring; <b>Most relevant</b> matches the Google UI default.",
                        "default": "newest"
                    },
                    "reviewsFilterString": {
                        "title": "Filter reviews by keyword",
                        "type": "string",
                        "description": "Keep only reviews whose text contains this substring (case-insensitive). Leave blank to keep all. Useful for over-fetching, then narrowing.",
                        "default": ""
                    },
                    "reviewsOrigin": {
                        "title": "Reviews origin",
                        "enum": [
                            "all",
                            "google"
                        ],
                        "type": "string",
                        "description": "Whether to include reviews from partner sources (Tripadvisor, Booking, etc.) or restrict to Google-native reviews only.",
                        "default": "all"
                    },
                    "maxImages": {
                        "title": "Photos per place",
                        "minimum": 0,
                        "type": "integer",
                        "description": "<code>0</code> = no photos. Each photo includes its tabs (All, Latest, Menu, Vibe, plus dish tabs), upload date, and source. Typical popular places have 100–200 photos available.",
                        "default": 0
                    },
                    "maxVideos": {
                        "title": "Videos per place",
                        "minimum": 0,
                        "type": "integer",
                        "description": "<code>0</code> = no videos. Each video includes the poster image plus HLS, DASH, and best-quality MP4 stream URLs.",
                        "default": 0
                    },
                    "excludeFields": {
                        "title": "Trim heavy fields from output",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Tick any fields you don't need — they get dropped from every place row to keep your dataset small. None are required for the actor to work; defaults include everything.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "popularTimes",
                                "amenities",
                                "relatedPlaces",
                                "metaDescription",
                                "reviewTeasers",
                                "bookingPartners",
                                "immersiveView",
                                "categoryGcids"
                            ],
                            "enumTitles": [
                                "Popular times (7 days × 24 hours busyness chart) — ~10 KB/place",
                                "Amenities (14 sections × items) — ~2 KB/place",
                                "Related places (\"people also search for\") — ~3 KB/place",
                                "Meta description (long marketing text) — ~1 KB/place",
                                "Review teasers (featured snippets, author profile + photo)",
                                "Booking partners (Resy, OpenTable provider blocks with logos)",
                                "Immersive View (360° media URLs)",
                                "Category GCIDs (machine-readable category slugs — keeps the human-readable 'Categories' field)"
                            ]
                        }
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "pt",
                            "nl",
                            "pl",
                            "ja",
                            "zh-CN",
                            "zh-TW",
                            "ko",
                            "ar",
                            "tr",
                            "ru"
                        ],
                        "type": "string",
                        "description": "Display language used when fetching results. Affects category labels and review text language preference.",
                        "default": "en"
                    },
                    "countryCode": {
                        "title": "Country code",
                        "enum": [
                            "us",
                            "gb",
                            "de",
                            "fr",
                            "ca",
                            "au",
                            "in",
                            "jp",
                            "cn",
                            "br",
                            "mx",
                            "es",
                            "it",
                            "nl",
                            "pl",
                            "tr",
                            "ru",
                            "kr",
                            "sa",
                            "ad",
                            "ae",
                            "af",
                            "ag",
                            "ai",
                            "al",
                            "am",
                            "ao",
                            "aq",
                            "ar",
                            "as",
                            "at",
                            "aw",
                            "ax",
                            "az",
                            "ba",
                            "bb",
                            "bd",
                            "be",
                            "bf",
                            "bg",
                            "bh",
                            "bi",
                            "bj",
                            "bl",
                            "bm",
                            "bn",
                            "bo",
                            "bq",
                            "bs",
                            "bt",
                            "bv",
                            "bw",
                            "by",
                            "bz",
                            "cc",
                            "cd",
                            "cf",
                            "cg",
                            "ch",
                            "ci",
                            "ck",
                            "cl",
                            "cm",
                            "co",
                            "cr",
                            "cu",
                            "cv",
                            "cw",
                            "cx",
                            "cy",
                            "cz",
                            "dj",
                            "dk",
                            "dm",
                            "do",
                            "dz",
                            "ec",
                            "ee",
                            "eg",
                            "eh",
                            "er",
                            "et",
                            "fi",
                            "fj",
                            "fk",
                            "fm",
                            "fo",
                            "ga",
                            "gd",
                            "ge",
                            "gf",
                            "gg",
                            "gh",
                            "gi",
                            "gl",
                            "gm",
                            "gn",
                            "gp",
                            "gq",
                            "gr",
                            "gs",
                            "gt",
                            "gu",
                            "gw",
                            "gy",
                            "hk",
                            "hm",
                            "hn",
                            "hr",
                            "ht",
                            "hu",
                            "id",
                            "ie",
                            "il",
                            "im",
                            "io",
                            "iq",
                            "ir",
                            "is",
                            "je",
                            "jm",
                            "jo",
                            "ke",
                            "kg",
                            "kh",
                            "ki",
                            "km",
                            "kn",
                            "kp",
                            "kw",
                            "ky",
                            "kz",
                            "la",
                            "lb",
                            "lc",
                            "li",
                            "lk",
                            "lr",
                            "ls",
                            "lt",
                            "lu",
                            "lv",
                            "ly",
                            "ma",
                            "mc",
                            "md",
                            "me",
                            "mf",
                            "mg",
                            "mh",
                            "mk",
                            "ml",
                            "mm",
                            "mn",
                            "mo",
                            "mp",
                            "mq",
                            "mr",
                            "ms",
                            "mt",
                            "mu",
                            "mv",
                            "mw",
                            "my",
                            "mz",
                            "na",
                            "nc",
                            "ne",
                            "nf",
                            "ng",
                            "ni",
                            "no",
                            "np",
                            "nr",
                            "nu",
                            "nz",
                            "om",
                            "pa",
                            "pe",
                            "pf",
                            "pg",
                            "ph",
                            "pk",
                            "pm",
                            "pn",
                            "pr",
                            "ps",
                            "pt",
                            "pw",
                            "py",
                            "qa",
                            "re",
                            "ro",
                            "rs",
                            "rw",
                            "sb",
                            "sc",
                            "sd",
                            "se",
                            "sg",
                            "sh",
                            "si",
                            "sj",
                            "sk",
                            "sl",
                            "sm",
                            "sn",
                            "so",
                            "sr",
                            "ss",
                            "st",
                            "sv",
                            "sx",
                            "sy",
                            "sz",
                            "tc",
                            "td",
                            "tf",
                            "tg",
                            "th",
                            "tj",
                            "tk",
                            "tl",
                            "tm",
                            "tn",
                            "to",
                            "tt",
                            "tv",
                            "tw",
                            "tz",
                            "ua",
                            "ug",
                            "um",
                            "uy",
                            "uz",
                            "va",
                            "vc",
                            "ve",
                            "vg",
                            "vi",
                            "vn",
                            "vu",
                            "wf",
                            "ws",
                            "ye",
                            "yt",
                            "za",
                            "zm",
                            "zw"
                        ],
                        "type": "string",
                        "description": "Country used to bias search results geographically. The first 19 entries are common defaults; the rest are alphabetical.",
                        "default": "us"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
