# Apple Maps Places Scraper (`fetch_cat/apple-maps-places-scraper`) Actor

Extract Apple Maps places, businesses, POIs, contacts, addresses, coordinates, ratings, websites, and local lead data from searches or URLs.

- **URL**: https://apify.com/fetch_cat/apple-maps-places-scraper.md
- **Developed by:** [Fetch Cat](https://apify.com/fetch_cat) (community)
- **Categories:** Lead generation, Travel, SEO tools
- **Features:** Limited permissions
- **Stats:** 11 total users, 4 monthly users, 84.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 item extracteds

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

Export public Apple Maps places from search queries or place URLs, including available addresses, coordinates, phone numbers, websites and rating summaries. Build local business lists or enrich a POI database. Fields vary by place and results are not an exhaustive directory.

### Quick start

1. Enter a search query and a location, or paste a public Apple Maps URL.
2. Set a small `maxResults` limit and start the Actor.
3. Open the dataset and export JSON, CSV or Excel.

```json
{
  "queries": ["coffee shops"],
  "location": "San Francisco, CA",
  "startUrls": [],
  "maxResults": 5
}
```

Use explicit coordinates to choose the search center. This does not guarantee an exact boundary or exhaustive neighborhood coverage. An unresolved text location falls back to San Francisco with a warning. Ratings and review counts are summaries, not review text.

Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.

https://youtu.be/1OW8gOqlZbY?t=25

### Ready-to-run examples

Choose a public example to see its settings before starting a run:

- [Compare Apple Maps cafes and bakeries in Boston](https://apify.com/fetch_cat/apple-maps-places-scraper/examples/apple-maps-multiple-categories-boston)
- [Scrape grocery stores near downtown LA coordinates](https://apify.com/fetch_cat/apple-maps-places-scraper/examples/apple-maps-grocery-stores-downtown-la-coordinates)
- [Find Blue Bottle Coffee locations on Apple Maps](https://apify.com/fetch_cat/apple-maps-places-scraper/examples/apple-maps-known-place-details)

### What you get

Each dataset row describes a public place, with available place identifiers, addresses, coordinates, phone numbers, websites and rating summaries. Keep the Apple Maps link for reference and join identifiers to your own location records. Unavailable fields can be null, and rating summaries do not include review text.

### Who is it for?

- **Sales and local operations teams:** collect available business names, phone numbers, websites and addresses for a prospecting spreadsheet.
- **Retail researchers:** collect category results around chosen coordinates and compare the exported locations in your own territory analysis.
- **POI data teams:** match available public place identifiers and coordinates to an existing location database.

This Actor retrieves public place data without an Apple account. It does not collect email addresses, full reviews or private account history, and does not detect changes between runs.

### Input settings

Provide at least one nonempty `queries` entry or a supported `startUrls` URL. Both can be supplied.  URLs are processed first, followed by queries under one shared result limit.

| Setting | JSON key | Meaning |
| --- | --- | --- |
| Search queries | `queries` | Categories or business names. The form prefills `coffee shops`. |
| Location | `location` | City, area or landmark. The form prefills San Francisco. |
| Coordinates | `lat`, `lng` | Supply both. Coordinates override `location`. |
| Place or search URLs | `startUrls` | Public `maps.apple.com` links. The form prefills an example URL. |
| Maximum places | `maxResults` | Shared cap, 1–1,000. Form default 20. Send an explicit API bound. |
| Language | `language` | Label locale. Default `en-US`. |
| Country code | `countryCode` | Search context. Default `US`. |
| Include photos | `includePhotos` | Include up to ten public photo URLs when available. Default `false`. |
| Maximum run time | `maxRunSeconds` | Optional 60–270 second work budget. See field help. |

Prefills are form examples, not API inputs. When no center is supplied, the runtime uses San Francisco. The runtime fallback for omitted `maxResults` is 50. The schema/form default is 20. This Actor uses direct connections and has no supported proxy setting.

#### Example inputs

Use the Quick start input as a small first run. Adjust the fields described above for your own data.

### Output data

Each row describes a place. The following is a synthetic shape-only excerpt, not a verified business listing:

```json
{
  "name": "Example place",
  "category": null,
  "address": null,
  "latitude": null,
  "longitude": null,
  "phone": null,
  "website": null,
  "rating": null,
  "reviewCount": null,
  "photos": null,
  "sourceQuery": "coffee shops",
  "sourceUrl": null,
  "scrapedAt": "2026-10-24T00:00:00.000Z"
}
```

| Fields | Meaning |
| --- | --- |
| `name`, `category` | Place name and available category. |
| `muid`, `resultProviderId`, `appleMapsUrl` | Place identifier, provider identifier and Apple Maps link. |
| `address`, `streetAddress`, `city`, `region`, `country`, `postalCode` | Available address components. |
| `latitude`, `longitude` | Available numeric coordinates. |
| `phone`, `website` | Public contact fields, when supplied. |
| `hours` | Available display strings for weekly hours, or null. |
| `rating`, `reviewCount`, `price` | Source rating score, rating count and price description. No review text or guaranteed rating scale. |
| `photos` | Up to ten image URLs when requested and available, otherwise null. |
| `sourceQuery`, `sourceUrl` | The query or URL that produced the row. |
| `scrapedAt` | Collection time in UTC. |

Unavailable values can be null. Arrays and source coverage vary. Results retain discovery order, not a guaranteed distance, popularity or rating sort. Repeated place identifiers are saved once per run. A `RUN_SUMMARY` key-value record reports saved and charged places, per-input outcomes, completed and failed inputs, warnings, and whether results are partial. Completed detail batches are saved before more search work starts.

#### Download your results

Open your run's dataset, choose **Export** and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.

See [Apify's download and export guide](https://docs.apify.com/storage/dataset#apify-console) for the available formats and field options.

### Pricing

This Actor uses pay-per-event pricing. `start` is charged once after initial input validation.  `item` is charged for each saved place.

A valid search with no matches, or a run that later fails, can still incur the start charge.

There are no separate error/status dataset rows to charge as places.

Use `maxResults` to bound saved places and begin with a small input.

See the [live Pricing tab](https://apify.com/fetch_cat/apple-maps-places-scraper/pricing) for current rates and applicable charges.

### Practical workflows

#### Build a local business spreadsheet

Search one category around a chosen location with `maxResults` set to 20. Export the dataset and review `name`, `address`, `phone`, `website` and `appleMapsUrl`. Treat missing contact fields as unavailable and verify the source links before outreach.

#### Enrich a place database

Supply known public place URLs, then match available `muid` or `appleMapsUrl` values to your existing records. Keep the source identifier and collection time alongside any updates. Matching records, merging fields and detecting changes between runs are steps in your own workflow.

### Tips for best results

- **Control the search center.** Supply both `lat` and `lng` when a text location would be ambiguous. Check `RUN_SUMMARY` for location warnings.
- **Clear unused prefills.** When you want only URL lookups or only query searches, remove unwanted example values from the other input list.
- **Use a bounded first pass.** Try one category with `maxResults` set to 5, then inspect the returned place identities and optional fields before increasing the limit.
- **Choose the export format for the fields.** JSON preserves nested hours and photo URLs. A spreadsheet works well for the place names, addresses and public contacts.
- **Keep provenance for later joins.** Retain `muid`, `appleMapsUrl`, `sourceQuery` and `scrapedAt` when available. A later run can return a different set or order.

### Limits and caveats

Available records and fields depend on your input and the source. Review the returned data before using it in another system. A successful run does not guarantee that every requested record or optional field was available.

Apple Maps may return fewer places than requested.

Coverage, order and available fields vary by country, query and location.

A confirmed no-match query succeeds with an empty dataset. Successful address or street results without a reusable public place identifier are also recorded as empty outcomes, with `address_without_reusable_place_id` in `RUN_SUMMARY`; no place identifier is invented. Duplicate-only inputs can complete without adding rows.

Requests are paced at least two seconds apart, including retries, to reduce sustained upstream load. Larger input batches may reach the shared work deadline; use smaller batches when you need every input completed. Complete place data already supplied by search is reused instead of making unnecessary detail lookups.

An unresolved URL or unusable detail response is recorded as an input failure. Other inputs can still produce results.

If an ordinary work deadline is reached after useful places have been saved, the run succeeds with partial results and a `deadline` completion reason. `PENDING_WORK` describes the unfinished inputs, discovered references and remaining search viewports. It is diagnostic information, not automatic continuation. A charge limit stops further work without raising the budget.

A deadline before any useful output, or HTML/503/malformed responses with no successfully completed input, still fails. Confirmed empty responses can succeed without place rows. Essential dataset, billing or outcome-storage errors always fail, even when earlier places were saved.

### Automation and integrations

#### Save your settings for next time

Once you have an input that works for you, [save it as an Apify task](https://docs.apify.com/actors/running/tasks). This keeps your settings together so you can use them again without filling in the form from scratch.

#### Run on a schedule

Need fresh results regularly? You can [schedule the Actor or a saved task](https://docs.apify.com/actors/running/schedules) to run at a time that suits you.

Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.

#### Send results to your other tools

Use **n8n, Make or Zapier** to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the [Apify integration guides](https://docs.apify.com/integrations) for your chosen tool.

For a custom connection, an [Apify webhook](https://docs.apify.com/integrations/webhooks) can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.

### API usage

Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.

The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its `defaultDatasetId` to fetch the results.

For setup instructions, see Apify's [JavaScript client guide](https://docs.apify.com/api/client/js), [Python client guide](https://docs.apify.com/api/client/python) and [Actor runs API reference](https://docs.apify.com/api/v2/acts-runs-post).

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~apple-maps-places-scraper/runs' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  --data @- <<'JSON'
{
  "queries": [
    "coffee shops"
  ],
  "location": "San Francisco, CA",
  "startUrls": [],
  "maxResults": 5
}
JSON
```

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/apple-maps-places-scraper').call({
  "queries": [
    "coffee shops"
  ],
  "location": "San Francisco, CA",
  "startUrls": [],
  "maxResults": 5
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/apple-maps-places-scraper').call(run_input={'queries': ['coffee shops'], 'location': 'San Francisco, CA', 'startUrls': [], 'maxResults': 5})
print(client.dataset(run['defaultDatasetId']).list_items().items)
```

#### API and integrations notes

**cURL** — starts an asynchronous run. Use the returned run's `defaultDatasetId` to retrieve items after completion.

### MCP and AI agents

You can ask your AI assistant to collect data with **Apple Maps Places Scraper** and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.

Connect your assistant through the [Apify MCP server](https://mcp.apify.com/). MCP gives your assistant a way to find this scraper, run it and read the results. Follow the [official setup and sign-in guide](https://docs.apify.com/mcp) for your app.

#### Easier setup with an Apify plugin

If you use a supported coding assistant, the [official Apify plugin](https://docs.apify.com/agents/plugins) can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.

#### Use Apify AI in Console

Prefer to keep everything in Apify? Open [Apify AI in Console](https://docs.apify.com/account/apify-ai) and ask it to find Fetch Cat's **Apple Maps Places Scraper**. You can describe the data you want and ask questions about the results.

Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.

#### Choose your assistant

- **Claude and Claude Code (Anthropic):** [Apify setup guide](https://docs.apify.com/integrations/claude).
- **ChatGPT and Codex (OpenAI):** [Apify setup guides](https://docs.apify.com/integrations/openai).
- **Grok Bot (xAI):** [Apify plugin guide](https://docs.apify.com/integrations/grok-bot).
- **Gemini CLI (Google):** [MCP server setup guide](https://geminicli.com/docs/tools/mcp-server/). Use the server URL below with the HTTP configuration supported by Gemini CLI.

#### Connect just this scraper

To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/apple-maps-places-scraper"
    }
  }
}
```

Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.

#### Use Apify's general server

Already connected to the general Apify MCP server at `https://mcp.apify.com`? You can use it to find this scraper without adding another server. Ask your assistant to use **Apple Maps Places Scraper** by Fetch Cat, or give it the identifier `fetch_cat/apple-maps-places-scraper`.

Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.

#### Example requests

Give your assistant the inputs it needs along with a request like one of these:

- “Use Fetch Cat’s Apple Maps Places Scraper to collect up to 10 coffee shops around Boston, Massachusetts. Show available addresses, websites and Apple Maps links, and flag missing contact fields.”
- “Retrieve these three public Apple Maps place URLs with Fetch Cat’s Apple Maps Places Scraper, using a shared limit of 3. Keep available place identifiers and collection times so I can match them to my own database.”
- “Search for up to 5 grocery stores around these latitude and longitude coordinates with Fetch Cat’s Apple Maps Places Scraper. Put the available names, addresses and source links in a table, and report run-summary warnings.”

Normal Apify charges apply. Check the [live Pricing tab](https://apify.com/fetch_cat/apple-maps-places-scraper/pricing) before asking your assistant to run a larger batch.

### Pay with x402

If your AI agent has a funded wallet, it can pay for Apify usage through [x402](https://docs.apify.com/integrations/x402). This experimental option lets an agent use Apify without a conventional account.

[Apify AGI](https://agi.apify.com/) provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.

Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.

Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.

#### Other ways for agents to pay

Apify also supports **MPP** for prepaid access through AGI and **Skyfire** for eligible Actors. If your agent already uses one of these, see the [agentic payment guide](https://docs.apify.com/agents/payments) to choose the right setup.

### FAQ

#### How do I search a precise neighborhood?

Supply both `lat` and `lng`, use a specific category, and set `countryCode` to the target market. Coordinates override text location. When using the form for only one mode, clear unwanted prefilled queries or URLs.

#### Can I use this as an Apple Maps places API?

You can call this run-based Actor through the Apify API. It is an unofficial public-data scraper, not Apple's official API, and offers no guarantee of exhaustive coverage.

#### Why are phone numbers, photos or ratings missing?

Apple Maps exposes different fields for different place types. `includePhotos` requests available photo URLs but cannot make missing photos appear. Ratings are source scores, not normalized to a universal scale.

#### Why did I receive fewer places or no places?

Try a more specific location or a broader category and inspect `RUN_SUMMARY` warnings. No-match searches differ from failed lookups. Already-saved results may remain available if later work fails.

### Related Actors

- [Bing Maps Places Scraper](https://apify.com/fetch_cat/bing-maps-places-scraper) — Research places from another map source.
- [Google Maps Places Scraper](https://apify.com/fetch_cat/google-maps-places-scraper) — Collect Google Maps place information.
- [Airbnb Listings Scraper](https://apify.com/fetch_cat/airbnb-listings-scraper) — Research accommodation listings.
- [Airbnb Reviews Scraper](https://apify.com/fetch_cat/airbnb-reviews-scraper) — Collect public Airbnb guest-review text and available ratings for accommodation review research.
- [Agoda Reviews Scraper](https://apify.com/fetch_cat/agoda-reviews-scraper) — Collect available Agoda hotel guest-review text, ratings and traveler details.

### Support and feedback

For custom additions or integrations, email <hello@fetchcat.dev>.

Found an error or have a feature request? [Open an issue](https://apify.com/fetch_cat/apple-maps-places-scraper/issues) with the run URL, a non-sensitive input example and what you expected.

Need help sharing it? See [Apify’s guide to sharing a run when reporting an issue](https://docs.apify.com/account/collaboration/general-resource-access#automatically-sharing-runs-via-actor-issues). Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.

Tried this scraper? We'd love to hear how it worked for you. [Leave a review](https://apify.com/fetch_cat/apple-maps-places-scraper/reviews) to help others choose the right tool and help us improve it. Your feedback means a lot to us.

Made with care for curious people, AI agents and the possibilities in data. ♥

# Changelog

This Actor's version history is a separate document: https://apify.com/fetch_cat/apple-maps-places-scraper/changelog.md

# Actor input Schema

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

Search categories or business names. Provide at least one nonempty query or a supported startUrls URL; neither alternative is globally required. The form prefill is an example, not an API input. If both are supplied, URLs are processed first under the shared maxResults cap.

## `location` (type: `string`):

City, area or landmark used as the center unless both lat and lng are provided. Omitted or unresolved locations use San Francisco; unresolved text locations produce a warning. Use coordinates when the area must be exact.

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

Public maps.apple.com place or search links. Provide URLs or at least one nonempty query. Links with a place identifier are looked up directly; name/address links are resolved through search. Unsupported or unresolved links may fail individually. Clear the form's example when using query-only input.

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

Shared maximum saved places across all URLs and queries, from 1 to 1000. URLs are processed first; repeated place identifiers are saved once. Fewer results may be available. Schema/form default is 20; the runtime fallback for omitted raw API input is 50, so send an explicit limit.

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

Apple Maps language/locale for labels and addresses.

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

Two-letter country code used by Apple Maps for search context.

## `lat` (type: `number`):

Optional numeric latitude for the search center. Use with longitude for more precise searches.

## `lng` (type: `number`):

Optional numeric longitude for the search center. Use with latitude for more precise searches.

## `includePhotos` (type: `boolean`):

Include up to ten public photo URLs per place when Apple Maps supplies them. Default false; unavailable or unrequested photos are null. This does not download image files or guarantee photo coverage.

## `maxRunSeconds` (type: `integer`):

Optional 60–270 second budget with 30 seconds reserved for shutdown. When omitted, the work deadline is 30 seconds before the platform timeout when available, otherwise 270 seconds from startup. Requests may stop with a failed run when time is exhausted. Saved results can remain available; warnings are written to RUN_SUMMARY when possible. No pending-input checkpoint, automatic recovery or continuation is provided.

## Actor input object example

```json
{
  "queries": [
    "coffee shops"
  ],
  "location": "San Francisco, CA",
  "startUrls": [
    {
      "url": "https://maps.apple.com/?address=55%20S%20Van%20Ness%20Ave%2C%20San%20Francisco%2C%20CA%2094103%2C%20United%20States&name=Blue%20Bottle%20Coffee"
    }
  ],
  "maxResults": 20,
  "language": "en-US",
  "countryCode": "US",
  "includePhotos": false
}
```

# Actor output Schema

## `overview` (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"
    ],
    "location": "San Francisco, CA",
    "startUrls": [
        {
            "url": "https://maps.apple.com/?address=55%20S%20Van%20Ness%20Ave%2C%20San%20Francisco%2C%20CA%2094103%2C%20United%20States&name=Blue%20Bottle%20Coffee"
        }
    ],
    "maxResults": 20,
    "language": "en-US",
    "countryCode": "US",
    "includePhotos": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/apple-maps-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"],
    "location": "San Francisco, CA",
    "startUrls": [{ "url": "https://maps.apple.com/?address=55%20S%20Van%20Ness%20Ave%2C%20San%20Francisco%2C%20CA%2094103%2C%20United%20States&name=Blue%20Bottle%20Coffee" }],
    "maxResults": 20,
    "language": "en-US",
    "countryCode": "US",
    "includePhotos": False,
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/apple-maps-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"
  ],
  "location": "San Francisco, CA",
  "startUrls": [
    {
      "url": "https://maps.apple.com/?address=55%20S%20Van%20Ness%20Ave%2C%20San%20Francisco%2C%20CA%2094103%2C%20United%20States&name=Blue%20Bottle%20Coffee"
    }
  ],
  "maxResults": 20,
  "language": "en-US",
  "countryCode": "US",
  "includePhotos": false
}' |
apify call fetch_cat/apple-maps-places-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetch_cat/apple-maps-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/yOJ6gaamIBSmdBdGf/builds/GHK59YGyLNDxHeNMr/openapi.json
