Apple Maps Scraper avatar

Apple Maps Scraper

Pricing

from $2.89 / 1,000 places

Go to Apify Store
Apple Maps Scraper

Apple Maps Scraper

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.

Pricing

from $2.89 / 1,000 places

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

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.

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.

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 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 to track rankings, call it from the Apify API, and connect integrations like Google Sheets, Make, or Zapier

What data can you extract from Apple Maps?

GroupFields
IdentityplaceId, placeIdHex, name, localName (local-language name), placeType, categories, categoryTaxonomy (e.g. dining.bar.cocktail_bar), categoryGroup, capacity
Contactphone, phoneFormatted, altPhones, website, quickLinks (menu, reservations, ordering)
Locationaddress (full, short, street, city, state, postal code, country, neighbourhood), location (lat/lng), timezone, timezoneOffset, parentPlace, containedIn, bounds, roadAccess (entrances)
Reputationrating (source, native scale, review count, Apple category ratings, normalizedScore5), priceLevel, reviews, tips, accolades (e.g. MICHELIN stars)
Editorialdescription, editorial (write-ups with source), featuredIn (guides and what they say about the place)
Hourshours (weekly hours, 24-hour flag), openNow, serviceHours (e.g. delivery, dinner)
Mediaphotos (with category, author, source, added date), coverPhoto, brandIcon
Category-specificevCharger (connectors, power, availability), transit (lines, departures, operators, incidents), trails (trails at a trailhead with length), factoids, amenities
ProvenancesearchQuery, 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 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

ParameterTypeDefaultDescription
searchQueriesarray—Searches: { "query": "...", "location": "...", "maxResults": n }. location and maxResults are optional
placeUrlsarray—Apple Maps place links or IDs
searchUrlsarray—Apple Maps search links with query and center (and optional span)
guideUrlsarray—Apple Maps Guide links or guide IDs
maxResultsinteger50Max places per search query or search URL
sortBystringrelevancerelevance (Apple's best match), distance, or rating
includeNearbyPlacesbooleanfalseAlso collect the unranked matching places shown around the search area
countryCodestringUSRegional context, e.g. GB, FR, JP
languagestringen-USLanguage, e.g. fr-FR, de-DE, ja-JP
openNowbooleanfalseKeep only places open at run time (local time)
minRatingstring—Keep only places rated at least 3, 3.5, 4, or 4.5 out of 5
hasPhone / hasWebsitebooleanfalseKeep only places with a phone number / website
proxyConfigurationobjectnoneOptional proxy

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

Example inputs

Search three cities:

{
"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:

{
"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:

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

Highly rated dentists with a phone and website:

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

Local-language data for Japan:

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

Output example

{
"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:

{ "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):

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):

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

PlanPrice per placePrice 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.

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. Read more in Apify's guide: Is web scraping legal?

Other maps and local business scrapers

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 to run daily or weekly and 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.

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