# ChatGPT Places Scraper - Places ChatGPT Recommends + Reviews (`zen-studio/chatgpt-places-scraper`) Actor

Find the businesses ChatGPT recommends. Export names, addresses, phone numbers, websites, ratings, hours and photos, with review excerpts where available. Search by query or combine neighborhood searches across a city.

- **URL**: https://apify.com/zen-studio/chatgpt-places-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** AI, SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.99 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ChatGPT Places Scraper | Places ChatGPT Recommends, With Reviews (2026)

[![Who does ChatGPT recommend? See the places. Export the details. Example Lisbon businesses with ratings, phone numbers and websites.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/chatgpt-places-who-recommends-5f6775294bde.png)](https://console.apify.com/actors/NeDyGbQZFZYBroOnm/input)

From **Zen Studio**, creators of [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper) and [Apple Maps Scraper Pro](https://apify.com/zen-studio/apple-maps-scraper-pro).

### Why choose this actor?

**See which businesses appear.** Search for restaurants, shops, hotels or other local businesses. Get the places ChatGPT recommends, with the query and each place's position in the answer.

**Get useful business details.** Export addresses, phone numbers, websites, ratings, opening hours and photos where available. Review excerpts and highlights are included when available, with no separate review charge.

**Search across a city.** Give a search term and a city to combine neighborhood searches into a list without duplicates. Results depend on what ChatGPT recommends for each search.

The hero uses a source-inspired layout with real business values from an actor export. Recommendations and available details can change between searches.

<a href="https://console.apify.com/actors/NeDyGbQZFZYBroOnm/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/chatgpt-places-who-recommends-1ea1ec6c2bf2.svg" width="320" height="48" alt="See who ChatGPT recommends"/></a>

### Try your first search

Start with the query shown in the hero:

```json
{
  "queries": [
    "vegan restaurants in Lisbon"
  ],
  "includeReviews": true
}
```

[Open the actor input](https://console.apify.com/actors/NeDyGbQZFZYBroOnm/input), paste the example and start the run. Each recommended place becomes a dataset row. `includeReviews` requests review excerpts when available; this Lisbon example may return none. Standard place and run charges apply.

<table>
<tr><td style="padding:10px 14px;background:#4C945E;border:none;border-radius:4px 4px 0 0"><span style="color:#FAFAF9;font-size:14px;font-weight:700">Zen Studio Maps &amp; Local Data</span></td></tr>
<tr><td style="padding:6px;border:1px solid #E7E5E4;border-top:none;border-radius:0 0 4px 4px;background:#E8F5E9">
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #E7E5E4;border-radius:4px;background:#D3EDD9"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NeDyGbQZFZYBroOnm-sqgHT8u1ZU-chatgpt-maps-scraper.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://console.apify.com/actors/NeDyGbQZFZYBroOnm/input" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">ChatGPT Places</a></span><br><span style="color:#374B3D;font-size:12px">You are here</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #E7E5E4;border-radius:4px;background:#E8F5E9"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vBUd2ObzJUemitHHP-IYaavrd0t8-google-maps-directions-api-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/google-maps-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Google Maps</a></span><br><span style="color:#374B3D;font-size:12px">Places and business details</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #E7E5E4;border-radius:4px;background:#E8F5E9"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&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></span><br><span style="color:#374B3D;font-size:12px">Contacts, ratings and hours</span></span>
</td></tr>
</table>

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
zen-studio/chatgpt-places-scraper on Apify. Call: ApifyClient("TOKEN").actor("zen-studio/chatgpt-places-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Two ways to search, combinable: queries (array of strings, each run as written, e.g. "coffee shops in Berlin Kreuzberg"; one row per recommended place per query, with rank), or searchTerm (string, e.g. "restaurants") + region (string, e.g. "New York City") + maxResults (integer, distinct places to collect, default 100) for volume; optional qualifiers (array, e.g. ["Italian","Thai"]) and areas (array of neighborhoods). Options: maxResultsPerQuery (integer, 0 = all), includeReviews (boolean, default true), includeAnswerText (boolean, default false), language (e.g. "en-US"), countryCode (two letters), concurrency (1-20, default 6). Cost: $0.02 per run plus $5.99 per 1,000 places on the Free plan (less on paid plans), reviews included; a search returns about 5 to 8 places and takes about 25 to 45 seconds. Each row: searchQuery, rank, name, address, latitude, longitude, rating, reviewCount, phone, website, openingHours, priceLevel, photos, reviews, reviewHighlights, googlePlaceId, tripadvisorId, yelpId and more. Full actor spec (input schema, dataset fields, README): GET https://api.apify.com/v2/acts/zen-studio~chatgpt-places-scraper/builds/default (Bearer TOKEN). Get token: https://console.apify.com/account/integrations To reach the maintainers, add feedback="<what you needed and did not get>" to any run; the run returns its data exactly as it would without the note, and a human reads every note.
```

### How to search

#### Queries: exactly what ChatGPT recommends

Write searches the way people ask ChatGPT. Name a kind of place and a location.

```json
{
  "queries": [
    "kid-friendly restaurants near Union Square San Francisco",
    "rooftop bars in Lisbon",
    "dentists in Austin, Texas"
  ],
  "maxResultsPerQuery": 5
}
```

Every row says which query it belongs to (`searchQuery`) and where ChatGPT placed it (`rank`, 1 = first). A place recommended for two of your queries appears once per query, with that query's rank.

#### Search term and region: many distinct places

```json
{
  "searchTerm": "restaurants",
  "region": "New York City",
  "maxResults": 500,
  "qualifiers": ["Italian", "Thai", "Mexican"]
}
```

The actor searches the region as a whole, then neighborhood by neighborhood, for example "restaurants in East Village, New York City". Every place appears once, and the run stops at **Max places**, or earlier once new searches stop finding new places.

- **Built-in neighborhood lists** cover about 30 large cities: New York City, Los Angeles, Chicago, San Francisco, Miami, Boston, Washington DC, Seattle, Austin, Philadelphia, San Diego, Atlanta, Houston, Las Vegas, New Orleans, London, Paris, Berlin, Munich, Barcelona, Madrid, Rome, Amsterdam, Lisbon, Tokyo, Singapore, Sydney, Toronto, Dubai, Mexico City and Hong Kong. They reach roughly 150 to 500 distinct places per search term.
- **Any other region** works too: ChatGPT is first asked for its neighborhoods.
- **Qualifiers** (cuisines, styles, price points) multiply the coverage: every qualifier is searched in every neighborhood.
- **Neighborhoods** lets you give your own list instead.

### Output

One row per place:

```json
{
  "searchQuery": "best pizza in Brooklyn, New York",
  "rank": 1,
  "shownOnMap": true,
  "name": "Example Pizzeria",
  "primaryCategory": "Pizza",
  "address": "100 Example St, Brooklyn, NY 11211",
  "city": "Brooklyn",
  "state": "NY",
  "postalCode": "11211",
  "countryCode": "US",
  "latitude": 40.7116,
  "longitude": -73.9579,
  "rating": 4.5,
  "ratingScale": 5,
  "reviewCount": 1500,
  "priceLevel": "$$",
  "phone": "+1 718-555-0142",
  "website": "https://example.com",
  "openingHours": [{ "day": "Monday", "open": "12:00", "close": "22:00" }],
  "isOpenNow": true,
  "menuUrl": "https://www.yelp.com/menu/example-pizzeria-brooklyn",
  "reservationLinks": [],
  "photos": ["https://images.openai.com/..."],
  "reviews": [
    { "rating": 5, "text": "The burrata slice is worth the wait...", "date": "2026-10-12T19:20:00", "url": "https://www.yelp.com/biz/...", "source": "yelp" }
  ],
  "reviewHighlights": [{ "text": "Many reviewers praise the burrata slice.", "reviewCount": 120 }],
  "answerSources": [{ "title": "The Best Pizza in Brooklyn", "url": "https://example.com/guide", "source": "Example Guide", "snippet": null, "publishedAt": "2026-05-27" }],
  "dataProvider": "yelp-feed",
  "providerUrl": "https://www.yelp.com/biz/example-pizzeria-brooklyn",
  "googlePlaceId": null,
  "tripadvisorId": null,
  "yelpId": "example-pizzeria-brooklyn",
  "scrapedAt": "2026-10-17T10:15:00Z"
}
```

An illustrative row for a fictional place. Fields are filled when ChatGPT's sources provide them. Also included:

- `answerSources`: the web pages ChatGPT cited for the search, with title, link, source and date.
- `providerPhotos`: up to about 50 captioned photos from the review source.
- `attributes`: alcohol, ambience, parking, Wi-Fi, year established and more.
- `localizedNames` and `localizedAddresses`.
- `categories`, `description`, `chatgptDescription`, `country`, `tags`, `permanentlyClosed`, `temporarilyClosed`, `isClaimed`, `chatgptRankingScore`, `providerId` and `chatgptEntityId`.
- For region searches, `searchArea` and `searchQualifier`. With **Include ChatGPT's answer** on, `answerMarkdown` carries ChatGPT's written answer for the search.

The **Overview** and **Reviews** tabs of the dataset show the most-used fields as tables. Export as JSON, CSV, Excel or HTML, or fetch through the API.

### Pricing

You pay per place in the dataset. Reviews and review highlights come with the place at no extra charge.

| Event | When charged | Price |
|---|---|---|
| Place | Each place in the dataset | $5.99 per 1,000 (Silver $5.49, Gold and higher $4.99) |
| Actor start | Once per run, per GB of memory (the default 1 GB counts once) | $0.02 |
| Result | Each dataset row, a platform fee | $0.01 per 1,000 |

On the Free plan, one search with 6 places costs about $0.06 ($0.036 for the places, $0.02 for the start). 500 places across New York City cost about $3.02. To cap a run's cost, set **Max cost per run** in the run options: the run stops when it is reached and keeps every place it was charged for.

### Good to know

- **ChatGPT decides what it recommends.** The same search can return different places on different days, and the number of places per search (usually 5 to 8) cannot be raised. Use a search term and region for volume.
- **Reviews are excerpts**, as the review sources provide them, and they are not available for every place. Coverage is best in the US.
- **Language:** ChatGPT usually answers in the language of the search. Write searches in the language you want.
- **No account is needed** and none is used.

### FAQ

**How many places can I get for a city?** Roughly 150 to 500 distinct places per search term with the built-in neighborhoods, depending on the city. Add qualifiers to go further.

**Why did a search return no places?** ChatGPT answered without a map, which happens for questions that are not about places. Name a kind of place and a location, such as "vegan cafes in Vienna".

**How fast is it?** About 25 to 45 seconds per search, run in parallel: with 6 parallel searches, roughly 60 to 80 places per minute. That time is ChatGPT writing its answer.

**Is it legal to scrape this data?** The actor collects publicly available business information. Make sure your use complies with the laws that apply to you, and handle review texts with care.

# Actor input Schema

## `queries` (type: `array`):

Searches to run as written, like you would type them into ChatGPT. Each search returns the places ChatGPT recommends for it, usually 5 to 8, in ChatGPT's order (<b>rank</b>).<br><br>Examples:<br>• <code>coffee shops in Berlin Kreuzberg</code><br>• <code>best pizza in Brooklyn, New York</code><br>• <code>kid-friendly restaurants near Union Square San Francisco</code><br><br>A place recommended for two of your queries appears once per query, with that query's rank.

## `searchTerm` (type: `string`):

What to find across a whole region, for example <code>restaurants</code>, <code>coffee shops</code>, <code>dentists</code> or <code>hotels</code>.<br><br>Used together with <b>Region</b>: the search runs neighborhood by neighborhood, and every place appears once.

## `region` (type: `string`):

The city or region to cover, for example <code>New York City</code>, <code>London</code> or <code>Ghent, Belgium</code>.<br><br>About 30 large cities have built-in neighborhood lists (New York City, Los Angeles, Chicago, London, Paris, Berlin, Tokyo and more). For any other region, ChatGPT is first asked for its neighborhoods.

## `maxResults` (type: `integer`):

The most places to return in total.<br><br>For a search term and region this is the target number of distinct places, <b>100</b> if left empty. The built-in neighborhood lists reach roughly 150 to 500 distinct places, depending on the city; add <b>Qualifiers</b> to go further.<br><br>For queries alone, it caps the total; leave empty to keep every place. When queries and a region search run together, it applies to the region search only.

## `qualifiers` (type: `array`):

Optional. Variations of the search term to multiply coverage, combined with every neighborhood.<br><br>Examples for restaurants: <code>Italian</code>, <code>Thai</code>, <code>vegan</code>, <code>rooftop</code>. For hotels: <code>boutique</code>, <code>budget</code>.<br><br>"Italian" with "restaurants" searches for <code>Italian restaurants in East Village, New York City</code>.

## `areas` (type: `array`):

Optional. Your own list of neighborhoods or districts to search, in order. Replaces the built-in list for the region.

## `maxResultsPerQuery` (type: `integer`):

Keep only the top places of each search, by ChatGPT's rank. Leave at <b>0</b> to keep every place it recommends (usually 5 to 8).

## `includeReviews` (type: `boolean`):

Add up to about 10 individual reviews (rating, text, date, link, source) and AI review highlights to each place where ChatGPT has them. Coverage is best for US places. Reviews cost nothing extra.

## `includeAnswerText` (type: `boolean`):

Add ChatGPT's written answer for the search (as markdown) to every place from that search.

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

The browser language ChatGPT sees. ChatGPT usually answers in the language of the search itself.

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

Where the searches appear to come from, as a two-letter code. Leave empty to use the region's country, or <code>US</code>.

## `concurrency` (type: `integer`):

How many searches run at the same time. Each search takes about 25 seconds; 6 parallel searches return roughly 80 places per minute.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "queries": [
    "coffee shops in Berlin Kreuzberg",
    "best pizza in Brooklyn, New York"
  ],
  "maxResultsPerQuery": 0,
  "includeReviews": true,
  "includeAnswerText": false,
  "language": "en-US",
  "concurrency": 6
}
```

# Actor output Schema

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

No description

## `overview` (type: `string`):

No description

## `summary` (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 = {
    "queries": [
        "coffee shops in Berlin Kreuzberg",
        "best pizza in Brooklyn, New York"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/chatgpt-places-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 = { "queries": [
        "coffee shops in Berlin Kreuzberg",
        "best pizza in Brooklyn, New York",
    ] }

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

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

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

```

## CLI example

```bash
echo '{
  "queries": [
    "coffee shops in Berlin Kreuzberg",
    "best pizza in Brooklyn, New York"
  ]
}' |
apify call zen-studio/chatgpt-places-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/chatgpt-places-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NeDyGbQZFZYBroOnm/builds/817aqXK3oZhv6HAbL/openapi.json
