# Apple Maps Scraper (`parsebird/apple-maps-scraper`) Actor

Scrape Apple Maps places by search, URL, or guide: name, address, phone, website, categories, ratings, hours, photos, amenities, reviews, and coordinates. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/apple-maps-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.89 / 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

### Apple Maps Scraper

Scrape **Apple Maps places** by search query and location, place URL, search URL, or Apple Maps Guide — name, address, phone, website, categories, ratings, opening hours, photos, amenities, reviews, and coordinates for every place. Export to JSON, CSV, or Excel, or use the API.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search any city in any country and language, sort by best match, distance, or rating, filter by rating, open now, phone, or website, and get 60+ fields per place — including EV charger connectors, transit departures, trail lengths, Michelin and guide write-ups.
</td>
</tr></table>

<br>

##### Copy to your AI assistant

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

```
Use the Apify Actor "parsebird/apple-maps-scraper" to scrape places from Apple Maps. Call it with the ApifyClient: from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/apple-maps-scraper").call(run_input={"searchQueries": [{"query": "coffee shops", "location": "Manhattan, New York"}], "maxResults": 20}); items = client.dataset(run["defaultDatasetId"]).list_items().items. Inputs (at least one of the first four is required): searchQueries (array of {query, location, maxResults?}), placeUrls (array of Apple Maps place links: place?place-id=..., place?auid=..., ?q=Name&address=..., maps.apple/p/... share links), searchUrls (array of maps.apple.com/search?query=...&center=lat,lng&span=..), guideUrls (array of maps.apple.com/guides?curated=ID links or guide IDs), maxResults (integer, default 50, per search), sortBy ("relevance" | "distance" | "rating"), includeNearbyPlaces (boolean), countryCode (default "US"), language (default "en-US"), openNow, hasPhone, hasWebsite (booleans), minRating ("3" | "3.5" | "4" | "4.5"), proxyConfiguration (optional). Output fields per place include placeId, placeIdHex, name, localName, placeType, phone, phoneFormatted, website, categories, categoryTaxonomy, address (full and structured), location (lat, lng), timezone, rating (provider, score, maxScore, reviewCount, categoryRatings, normalizedScore5), priceLevel, reviews, tips, editorial, accolades, featuredIn (guides), hours, openNow, serviceHours, amenities, evCharger, transit, trails, photos, coverPhoto, quickLinks, claimUrl, appleUrl, and provenance (searchQuery, searchLocation, matchedLocation, searchRank, sourceUrl, sourceGuide, scrapedAt). Full API docs: https://apify.com/parsebird/apple-maps-scraper/api — get a token at https://console.apify.com/settings/integrations
```

### What is Apple Maps Scraper?

[Apple Maps](https://maps.apple.com/) is the default map on every iPhone, iPad, and Mac, with business listings enriched by partners such as Yelp, Tripadvisor, Foursquare, Tabelog, PlugShare, and the MICHELIN Guide, plus Apple's own ratings. **Apple Maps Scraper** turns those listings into structured data you can download or pull through an API.

The easiest way to try it: add a search such as `coffee shops` in `Manhattan, New York` and click **Start**. It works as an **Apple Maps API alternative** that needs no Apple Developer account or API keys.

### What can Apple Maps Scraper do?

- 🔍 **Search by query and location** — "dentist" in "Shibuya, Tokyo", "EV charging station" in "Berlin, Germany"; locations are matched by Apple Maps (cities, neighbourhoods, postcodes, landmarks)
- 🔗 **Scrape place URLs** — `place?place-id=…`, `place?auid=…`, address links with a business name, and `maps.apple/p/…` share links
- 🗺️ **Replay search URLs** — paste a `maps.apple.com/search?…` link and keep its query, center, and span
- 📚 **Scrape Apple Maps Guides** — every place in a curated guide, with the guide's title, publisher, and what it says about each place
- ↕️ **Sort like the app** — best match, nearest first, or highest rated
- ➕ **Include nearby places** — also collect the matching places Apple shows around the search area (up to ~20 more per search)
- 🧹 **Filters** — open now, minimum rating, has phone, has website; filtered-out places are not saved or billed
- 🌍 **Any country and language** — country code and language change which places are returned and how names, categories, and addresses read
- ⏱️ **Scheduling, API, and integrations** — run on a [schedule](https://docs.apify.com/platform/schedules) to track rankings, call it from the [Apify API](https://docs.apify.com/api/v2), and connect [integrations](https://apify.com/integrations) like Google Sheets, Make, or Zapier

### What data can you extract from Apple Maps?

| Group | Fields |
|-------|--------|
| Identity | `placeId`, `placeIdHex`, `name`, `localName` (local-language name), `placeType`, `categories`, `categoryTaxonomy` (e.g. `dining.bar.cocktail_bar`), `categoryGroup`, `capacity` |
| Contact | `phone`, `phoneFormatted`, `altPhones`, `website`, `quickLinks` (menu, reservations, ordering) |
| Location | `address` (full, short, street, city, state, postal code, country, neighbourhood), `location` (lat/lng), `timezone`, `timezoneOffset`, `parentPlace`, `containedIn`, `bounds`, `roadAccess` (entrances) |
| Reputation | `rating` (source, native scale, review count, Apple category ratings, `normalizedScore5`), `priceLevel`, `reviews`, `tips`, `accolades` (e.g. MICHELIN stars) |
| Editorial | `description`, `editorial` (write-ups with source), `featuredIn` (guides and what they say about the place) |
| Hours | `hours` (weekly hours, 24-hour flag), `openNow`, `serviceHours` (e.g. delivery, dinner) |
| Media | `photos` (with category, author, source, added date), `coverPhoto`, `brandIcon` |
| Category-specific | `evCharger` (connectors, power, availability), `transit` (lines, departures, operators, incidents), `trails` (trails at a trailhead with length), `factoids`, `amenities` |
| Provenance | `searchQuery`, `searchLocation`, `matchedLocation`, `searchRank`, `sourceUrl`, `sourceGuide`, `scrapedAt` |

Fields are filled when Apple Maps publishes them for the place, otherwise they are `null` or empty.

### How to scrape Apple Maps

1. Open [Apple Maps Scraper](https://apify.com/parsebird/apple-maps-scraper) in Apify Console and click **Try for free** (an Apify account is required).
2. Add one or more **Search queries** (`query` + `location`), or paste **Place URLs**, **Search URLs**, or **Guide URLs**.
3. Optionally set the **Country code** and **Language** for the market you are scraping, a **Sort by** order, and **Filters**.
4. Set **Max results per search** and click **Start**.
5. Download the places from the **Output** tab in JSON, CSV, Excel, HTML, or XML, or read them through the API.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | array | — | Searches: `{ "query": "...", "location": "...", "maxResults": n }`. `location` and `maxResults` are optional |
| `placeUrls` | array | — | Apple Maps place links or IDs |
| `searchUrls` | array | — | Apple Maps search links with `query` and `center` (and optional `span`) |
| `guideUrls` | array | — | Apple Maps Guide links or guide IDs |
| `maxResults` | integer | `50` | Max places per search query or search URL |
| `sortBy` | string | `relevance` | `relevance` (Apple's best match), `distance`, or `rating` |
| `includeNearbyPlaces` | boolean | `false` | Also collect the unranked matching places shown around the search area |
| `countryCode` | string | `US` | Regional context, e.g. `GB`, `FR`, `JP` |
| `language` | string | `en-US` | Language, e.g. `fr-FR`, `de-DE`, `ja-JP` |
| `openNow` | boolean | `false` | Keep only places open at run time (local time) |
| `minRating` | string | — | Keep only places rated at least `3`, `3.5`, `4`, or `4.5` out of 5 |
| `hasPhone` / `hasWebsite` | boolean | `false` | Keep only places with a phone number / website |
| `proxyConfiguration` | object | none | Optional proxy |

At least one of `searchQueries`, `placeUrls`, `searchUrls`, or `guideUrls` is required. Results are deduplicated across all inputs.

#### Example inputs

Search three cities:

```json
{
  "searchQueries": [
    { "query": "coffee shops", "location": "Manhattan, New York" },
    { "query": "dentist", "location": "Shibuya, Tokyo" },
    { "query": "EV charging station", "location": "Berlin, Germany" }
  ],
  "maxResults": 50
}
```

Scrape specific places:

```json
{
  "placeUrls": [
    "https://maps.apple.com/place?place-id=I918CB7E77B4C7910",
    "https://maps.apple.com/place?auid=11204647164469319519",
    "https://maps.apple.com/?q=Lifeline+Urgent+Care&address=13410+Briar+Forest+Dr,+Houston,+TX+77077"
  ]
}
```

Every place in an Apple Maps Guide:

```json
{
  "guideUrls": ["https://maps.apple.com/guides?curated=1694850223688040849"]
}
```

Highly rated dentists with a phone and website:

```json
{
  "searchQueries": [{ "query": "dentist", "location": "Brooklyn, New York" }],
  "maxResults": 100,
  "hasPhone": true,
  "hasWebsite": true,
  "minRating": "4.5"
}
```

Local-language data for Japan:

```json
{
  "searchQueries": [{ "query": "ramen", "location": "Shinjuku, Tokyo" }],
  "countryCode": "JP",
  "language": "ja-JP"
}
```

### Output example

```json
{
  "placeId": "11204647164469319519",
  "placeIdHex": "I9B7EE73B37C8175F",
  "name": "The French Laundry",
  "placeType": "BUSINESS",
  "phone": "+17079442380",
  "phoneFormatted": "+1 (707) 944-2380",
  "altPhones": ["+17079477182"],
  "website": "https://www.thomaskeller.com/tfl",
  "categories": ["French Cuisine", "Restaurant", "Bar", "European Cuisine", "Fine Dining Restaurant", "American Cuisine", "Wine Bar", "Signature Restaurant", "New American Cuisine"],
  "categoryTaxonomy": "dining.restaurant.european_cuisine.french_cuisine",
  "categoryGroup": "fooddrinks",
  "displayCategory": "French Cuisine",
  "address": {
    "full": "6640 Washington St, Yountville, CA  94599, United States",
    "street": "6640 Washington St",
    "city": "Yountville",
    "subAdministrativeArea": "Napa County",
    "state": "California",
    "stateCode": "CA",
    "postalCode": "94599",
    "country": "United States",
    "countryCode": "US"
  },
  "parentPlace": { "placeId": "6254911099258597695", "name": "Yountville, CA" },
  "location": { "lat": 38.4044062, "lng": -122.364977 },
  "timezone": "America/Los_Angeles",
  "rating": {
    "provider": "Apple",
    "ratingType": "APPLE_RATING",
    "score": 85,
    "maxScore": 100,
    "reviewCount": 55,
    "categoryRatings": [
      { "category": "Atmosphere", "score": 86, "maxScore": 100, "reviewCount": 51 },
      { "category": "Customer Service", "score": 86, "maxScore": 100, "reviewCount": 49 },
      { "category": "Food & Drink", "score": 86, "maxScore": 100, "reviewCount": 49 }
    ],
    "normalizedScore5": 4.25
  },
  "editorial": [
    {
      "provider": "MICHELIN Guide",
      "title": "Michelin",
      "text": "Thomas Keller’s legendary destination still doesn’t miss a beat. …",
      "url": "https://guide.michelin.com/r/122806"
    }
  ],
  "accolades": [{ "provider": "MICHELIN Guide", "text": "Three Stars" }],
  "featuredIn": [
    {
      "guideId": "5313904882904543969",
      "title": "The Toughest Reservations In The US",
      "publisher": "The Infatuation",
      "placeDescription": "The Yountville fine dining institution is as synonymous with Wine Country as the actual wine. …",
      "placeCount": 17,
      "updatedAt": "2025-06-05T17:29:39+00:00"
    }
  ],
  "hours": {
    "weekly": [{ "days": ["SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"], "open": "16:00", "close": "20:00" }],
    "open24Hours": false,
    "hoursType": "NORMAL"
  },
  "openNow": false,
  "amenities": [
    { "name": "Accepts Apple Pay", "amenityId": "crossbusiness.payments.applepay", "available": true, "source": null },
    { "name": "Wheelchair Accessible", "amenityId": "crossbusiness.accessibility_features.wheelchair_accessible", "available": true, "source": "com.apple.abr" }
  ],
  "photos": [
    {
      "url": "https://is1-ssl.mzstatic.com/image/thumb/amsUuRMbE80gPTF2kuKCjw/1000x1000bb.jpg",
      "width": 1000,
      "height": 1000,
      "category": "Food & Drink",
      "author": "David Escalante/The French Laundry",
      "provider": "MICHELIN Guide",
      "addedAt": "2026-08-20T14:01:31+00:00"
    }
  ],
  "quickLinks": [
    { "title": "Menu", "url": "https://www.yelp.com/menu/the-french-laundry-yountville-7?…", "appStoreId": "284910350" },
    { "title": "Reserve", "url": "https://guide.michelin.com/r/122806", "appStoreId": "1541129177" }
  ],
  "claimUrl": "https://business.apple.com/?claimId=11204647164469319519",
  "appleUrl": "https://maps.apple.com/place?auid=11204647164469319519",
  "searchQuery": "The French Laundry",
  "searchLocation": "Yountville, CA",
  "matchedLocation": "Yountville",
  "searchRank": 1,
  "sourceGuide": null,
  "scrapedAt": "2026-10-11T07:57:38.881Z"
}
```

Other kinds of places carry their own detail. A few real examples:

```json
{ "name": "Kura Sushi Global flagship store Ginza", "localName": "くら寿司 グローバル旗艦店 銀座", "localNameLocale": "ja",
  "rating": { "provider": "Tabelog", "ratingType": "USER_RATING", "score": 3.12, "maxScore": 5, "reviewCount": 163 } }

{ "name": "Vattenfall InCharge",
  "evCharger": { "connectors": [{ "connectorType": "CONNECTOR_TYPE_MENNEKES", "connectorName": "Mennekes", "chargingSpeed": "Slow", "powerWatts": 11000, "total": 10, "status": "NO_STATUS" }], "available": 0, "total": 10 } }

{ "name": "Bear Lake Trailhead",
  "trails": [{ "placeId": "387857515193945776", "name": "Bear Lake Loop Trail", "categories": ["Trail"], "length": { "value": 1.05632, "unit": "UNIT_TYPE_KILOMETERS" } }] }

{ "name": "Alexanderplatz Bhf", "localName": "Alexanderplatz Bahnhof",
  "transit": { "lines": [{ "lineId": "11808568026067274535", "name": "S-Bahn Berlin S3", "shortName": "S3", "color": "0E67ABFF", "transitType": 109 }],
               "operators": ["Berliner Verkehrsbetriebe", "DB Fernverkehr AG", "DB Regio AG"] } }

{ "name": "Wembley Stadium", "capacity": 90000 }
```

### Use Apple Maps Scraper through the API

**Python** ([apify-client](https://docs.apify.com/api/client/python/)):

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/apple-maps-scraper").call(run_input={
    "searchQueries": [
        {"query": "coworking space", "location": "Austin, TX"},
        {"query": "coworking space", "location": "Seattle, WA"},
    ],
    "maxResults": 50,
    "hasWebsite": True,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(place["name"], place["phoneFormatted"], place["website"], place["address"]["full"])
```

**JavaScript** ([apify-client](https://docs.apify.com/api/client/js/)):

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

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/apple-maps-scraper').call({
    searchQueries: [{ query: 'coworking space', location: 'Austin, TX' }],
    maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((p) => console.log(p.name, p.rating?.normalizedScore5, p.address?.full));
```

See the [API tab](https://apify.com/parsebird/apple-maps-scraper/api) for endpoints and more examples.

### Use cases

- **Lead generation** — local businesses with phone numbers and websites in any city
- **Local SEO and rank tracking** — schedule the same search and track `searchRank` over time
- **Market research** — density, ratings, and price levels of a category across neighbourhoods or cities
- **Store locators and data enrichment** — coordinates, opening hours, and structured addresses for brands and chains
- **EV and mobility data** — charger connectors and power, transit lines and departures
- **Travel and hospitality** — places featured in Apple Maps Guides, Michelin distinctions, and editorial write-ups

### How it works

1. Each location is matched with Apple Maps, and the search covers an area roughly 2–10 km across around it, sized to the matched place.
2. Apple Maps ranks up to about 25 places per search. With **Include nearby places** on, the matching places shown around the area are added too.
3. For `rating` sorting, Apple's top-rated results and its best matches are combined, limited to places inside the search area, and ordered by rating (then number of ratings).
4. Place URLs and guides are looked up directly; address links are matched to the named business at that address.
5. Every place is mapped into one consistent format, filtered, deduplicated, and saved.

### How much does it cost to scrape Apple Maps?

Apple Maps Scraper uses **pay-per-event** pricing: you pay for each place saved to the dataset. Compute costs are included in the event price. Places removed by filters are not saved and not billed.

| Plan | Price per place | Price per 1,000 places |
|------|-----------------|------------------------|
| Free | $0.00399 | **$3.99** |
| Bronze | $0.00359 | **$3.59** |
| Silver | $0.00319 | **$3.19** |
| Gold | $0.00289 | **$2.89** |

For example, 25 places for each of 4 cities (100 places) cost about $0.40 on the Free plan. Apify accounts include monthly platform usage credits, and you can set a maximum spend per run — the Actor stops when the limit is reached.

### Is it legal to scrape Apple Maps?

Scraping publicly available business information — names, addresses, phone numbers, opening hours, and ratings visible to anyone on maps.apple.com — is generally legal in the US, EU, and many other jurisdictions. This Actor does not log in and only collects publicly displayed place data. Some fields, such as reviewer names in reviews and tips, can be personal data: process them lawfully (for example under GDPR or CCPA) and review [Apple's Maps terms](https://www.apple.com/legal/internet-services/maps/terms-en.html). Read more in Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other maps and local business scrapers

- [Yandex Maps Scraper](https://apify.com/parsebird/yandex-maps-scraper) — businesses, phones, and emails from Yandex Maps
- [Yandex Maps Reviews Scraper](https://apify.com/parsebird/yandex-maps-reviews-scraper) — reviews from Yandex Maps
- [OpenTable Restaurants Scraper](https://apify.com/parsebird/opentable-restaurants-scraper) — restaurant listings from OpenTable
- [TheFork Scraper](https://apify.com/parsebird/thefork-scraper) — restaurants, menus, and reviews from TheFork
- [Nextdoor Business Scraper](https://apify.com/parsebird/nextdoor-business-scraper) — local business profiles from Nextdoor

### FAQ

**Do I need an Apple ID or API key?**
No. The Actor reads public Apple Maps data. You only need an Apify account.

**How many places does one search return?**
Apple Maps ranks up to about 25 places per search. Turn on `includeNearbyPlaces` for up to ~20 more per search, run several more specific locations (e.g. neighbourhoods instead of a whole city), or use `rating` sorting, which combines two result sets.

**Why did a location match something unexpected?**
Locations are matched by Apple Maps, so each record includes `searchLocation` (what you asked for) and `matchedLocation` (what Apple matched). The log warns when they look unrelated, and locations Apple cannot match at all are skipped. More specific locations ("Soho, London" rather than "London") give better results.

**Why do ratings have different scales?**
Ratings keep their source and native scale — Apple ratings are 0–100, while partner ratings such as Yelp, Tripadvisor, or Tabelog are out of 5. `rating.normalizedScore5` converts every rating to 0–5, and `minRating` uses that value.

**What does `searchRank` mean?**
The place's position in the search results for your query, starting at 1, in the sort order you chose. It is empty for places from URLs, guides, and the nearby-places option.

**Do country and language matter?**
Yes. They change which places Apple returns, their ranking, and how names, categories, and addresses are written. Match them to the market you are scraping.

**What happens with a share link that only contains an address?**
Share links and address links are matched to the named business when a name is included. If the link has no business name, the Actor returns the address itself (`placeType: "ADDRESS"`).

**Can I schedule it?**
Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules) to run daily or weekly and [integrations](https://apify.com/integrations) to send results onward.

**Can I use it with AI agents?**
Yes. Copy the AI assistant block above into ChatGPT, Claude, or Cursor, or connect the Actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

Found a bug or need a field? Open an issue on the Actor's **Issues** tab — feedback is welcome.

# Changelog

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

# Actor input Schema

## `searchQueries` (type: `array`):

List of searches. Each entry has a 'query' (what to look for), a 'location' (where, e.g. 'Soho, London'), and an optional 'maxResults' that overrides the global limit. Each search covers roughly 1–5 km around the matched location; more specific locations give more precise results.

## `placeUrls` (type: `array`):

Apple Maps place links: place?place-id=…, place?auid=…, address links with a business name (?q=Name\&address=…), or maps.apple/p/… share links.

## `searchUrls` (type: `array`):

Apple Maps search links copied from the browser, e.g. https://maps.apple.com/search?query=coffee+shops\&center=40.71,-74.00\&span=0.05,0.05. The query, center, and span are reused.

## `guideUrls` (type: `array`):

Apple Maps Guide links (https://maps.apple.com/guides?curated=…) or guide IDs. Every place in each guide is scraped.

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

Maximum places saved per search query or search URL. Apple Maps usually ranks 20–25 places per search; turn on 'Include nearby places' to collect more.

## `sortBy` (type: `string`):

Order Apple Maps ranks each search in.

## `includeNearbyPlaces` (type: `boolean`):

Also collect the matching places Apple Maps shows as dots around the search area (not ranked, so searchRank is empty). Adds up to about 20 places per search.

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

Two-letter country code that sets Apple Maps' regional context (affects which places are returned and their ranking), e.g. US, GB, FR, JP.

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

Language for category names, addresses, and ranking, e.g. en-US, fr-FR, de-DE, ja-JP.

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

Keep only places open at run time, in the place's local time. Places without published hours are left out.

## `minRating` (type: `string`):

Keep only places rated at or above this, on a 0–5 scale (Apple's 0–100 ratings are converted). Places without a rating are left out.

## `hasPhone` (type: `boolean`):

Keep only places with a published phone number.

## `hasWebsite` (type: `boolean`):

Keep only places with a published website.

## `proxyConfiguration` (type: `object`):

Optional. Apple Maps works without a proxy.

## Actor input object example

```json
{
  "searchQueries": [
    {
      "query": "coffee shops",
      "location": "Manhattan, New York"
    }
  ],
  "maxResults": 20,
  "sortBy": "relevance",
  "includeNearbyPlaces": false,
  "countryCode": "US",
  "language": "en-US",
  "openNow": false,
  "minRating": "",
  "hasPhone": false,
  "hasWebsite": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `places` (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 = {
    "searchQueries": [
        {
            "query": "coffee shops",
            "location": "Manhattan, New York"
        }
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/apple-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 = {
    "searchQueries": [{
            "query": "coffee shops",
            "location": "Manhattan, New York",
        }],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/apple-maps-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 '{
  "searchQueries": [
    {
      "query": "coffee shops",
      "location": "Manhattan, New York"
    }
  ],
  "maxResults": 20
}' |
apify call parsebird/apple-maps-scraper --silent --output-dataset

```

## MCP server setup

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