Apple Maps Scraper
Scrape Apple Maps listings: name, address, coordinates, category, phone, website, opening hours, rating. No API key. $0.40 per 1,000 places.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,location,locations(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0004 per place = $0.4 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Place returned | Charged once per unique Apple Maps place returned. Duplicate listings, sample rows, diagnostics, blocked requests and empty runs are never charged. | $0.0004 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-08, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | What to look for on Apple Maps, for example "coffee shop", "dentist", "hardware store". Each term is searched across the whole area you set below. A term that names one business with its town and ZIP, like "Sightglass Coffee San Francisco CA 94103", is looked up with a single search instead. | array |
location | City, neighbourhood, state or country to search in, for example "San Francisco, CA", "Texas" or "United Kingdom". Ignored when you set latitude and longitude. A state or a country is searched square by square, and only places inside it are kept. | string |
locations | Optional. More towns or areas, one per line, for example "Austin, TX" and "Dallas, TX". Every search term is searched in each of them, and in Location too if you fill it. Handy when you want certain towns rather than a whole state. Ignored when you set latitude and longitude. | array |
latitude | Optional. Search around an exact point instead of a named location. | string |
longitude | Optional. Search around an exact point instead of a named location. | string |
searchRadiusKm | Only used with latitude/longitude. Half-width of the square area to cover. | integer |
startUrls | Paste Apple Maps links directly. Place links (https://maps.apple.com/place?place-id=...) are looked up one by one; search links (https://maps.apple.com/search?query=...¢er=lat,lng) are run as searches. | array |
language | Language for names, categories and descriptions, as a BCP-47 tag. | string |
countryCode | Two-letter country the search should be biased towards, for example US, GB, DE. Defaults to US. | string |
maxItems | Stop after this many places. You are charged per place returned, so this is also your budget cap. | integer |
maxItemsPerSearch | Optional. Stop each search term in each location after this many places, so one big town cannot use up Maximum places before the others start. Leave it empty for no limit per search. | integer |
What you get
A structured dataset — each result includes fields like:
namecategoryaddresscityphonewebsiteratingreviewCountopeningHoursTextlatitudelongitudeappleMapsUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Apple Maps Scraper: places with phone, website, hours and ratings from any city or point
Give it a search term and a city, or paste Apple Maps links, and each place comes back as a row: name, full address, coordinates, category, phone, website, opening hours, star rating, review count, price level, amenities and photos. No Apple Developer account, no key, nothing to install.
The awkward part first. One Apple Maps search returns at most 55 places, and only 25 once the map is down to the size of a city. This run gets past that by splitting your area into squares, searching each one and dropping the duplicates, which is why a coffee shop search over San Francisco can return hundreds. Where it stops depends on how many places Apple actually holds for that category in that area.
| Input | Search terms with a city, state, country or point, or Apple Maps links |
| Output | One row per place |
| Ceiling | 10,000 places per run |
| Account needed | None, and no Apple Developer key |
| Price | $0.40 per 1,000 places, flat on every plan |
🏷️ What Apple Maps Scraper does
Set a search term and an area. The area can be a name like San Francisco, CA, Texas or United States, which Apple resolves itself, or an exact latitude and longitude with a radius in kilometres around it. A term like dentist is searched across the whole area. List more towns under Several locations to search each of them.
A term that names one business with its town and ZIP, like Sightglass Coffee San Francisco CA 94103, is a lookup. Apple returns that place wherever the map is, so it takes one search instead of a grid. Location still has to be set, and United States works.
Or paste links. A place link is looked up on its own. A search link with a query and a center on it is re-run as a search over that spot.
One thing to check on every run. If Apple cannot match the place name you typed, it answers with the nearest real place it does know, and the run scrapes there. You get a warning in the log, but the rows come from the wrong town. Compare city on the rows against what you asked for, or use latitude and longitude when precision matters.
Over a town the grid widens, 2x2, then 3x3 and up, until your Maximum places or a level that finds little new. A state or country is cut into squares about 200 km across, and busy squares get searched again in quarters. Duplicates and places outside your area are never billed.
📥 What you give it
{
"searchQueries": ["coffee shop", "bakery"],
"location": "San Francisco, CA",
"maxItems": 200,
"language": "en-US",
"countryCode": "US"
}
| Field | Default | What it is |
|---|---|---|
searchQueries | box starts at coffee shop | What to look for. Each term is searched across the whole area. |
location | box starts at San Francisco, CA | City, neighbourhood, state or country. Ignored when you set a latitude and longitude. |
locations | none | More towns or areas, one per line. Every term is searched in each of them, and in location too. |
latitude, longitude | none | An exact point to search around instead of a named place. |
searchRadiusKm | 5 | Half-width of the square to cover, up to 200. Only used with a latitude and longitude. |
startUrls | none | Apple Maps place links, or search links carrying a query and a center. |
language | en-US | Language for names, categories and descriptions. |
countryCode | US | Two-letter country the search leans towards. |
maxItems | 50 | Stop after this many places, up to 10,000. |
maxItemsPerSearch | none | Stop each term in each location after this many places, so one big town cannot use up maxItems before the others start. |
proxyConfiguration | leave it alone | Optional, under Advanced. Only the proxyUrls you type in are read. |
To cover only certain towns, list them:
{
"searchQueries": ["dentist"],
"locations": ["Austin, TX", "Dallas, TX", "Houston, TX"],
"maxItemsPerSearch": 300,
"maxItems": 1000
}
📤 What you get back
A real row from a run on 14 September 2026, with the seven-day hours block and the amenity list cut short:
{
"placeId": "IF73E221A118E5CDD",
"muid": "17815714671283297501",
"name": "Blue House Café",
"category": "Cafe",
"categories": ["Dining", "Coffee Shop", "Cafe"],
"categoryId": "dining.cafe.coffee_shop",
"placeType": "BUSINESS",
"address": "302 Randolph St, San Francisco, CA 94132, United States",
"addressLines": ["302 Randolph St", "San Francisco, CA 94132", "United States"],
"street": "302 Randolph St",
"subLocality": "Ingleside Heights",
"city": "San Francisco",
"state": "California",
"stateCode": "CA",
"postalCode": "94132",
"country": "United States",
"countryCode": "US",
"latitude": 37.7144788,
"longitude": -122.4655315,
"timezone": "America/Los_Angeles",
"phone": "+14156194858",
"phoneFormatted": "+1 (415) 619-4858",
"additionalPhones": [],
"website": "https://www.bluehousecafesf.com",
"rating": 4.5,
"ratingMax": 5,
"reviewCount": 163,
"priceLevel": 1,
"priceRange": "$",
"openingHours": [{ "day": "Sunday", "dayIndex": 0, "ranges": [{ "open": "07:30", "close": "17:00" }] }],
"openingHoursText": "Sun: 07:30-17:00; Mon: 07:30-17:00; Tue: 07:30-17:00; ...",
"hoursType": "NORMAL",
"amenities": ["Accepts Apple Pay", "Wheelchair Accessible", "Free Wi-Fi", "..."],
"photos": ["https://is1-ssl.mzstatic.com/image/thumb/dl5dVd177AQJ6vTvltLExA/320x320bb.jpg"],
"reviews": [
{ "text": "My husband and I have been to Blue House Cafe twice now...", "rating": 5, "author": "Marie R.", "reviewId": "J5UXlTzVGRtYccBTOb3tDA" }
],
"description": null,
"editorialTitle": null,
"editorialText": null,
"isClaimable": true,
"quickLinks": [{ "title": "Menu", "url": "https://www.yelp.com/biz/blue-house-caf..." }],
"appleMapsUrl": "https://maps.apple.com/place?place-id=IF73E221A118E5CDD&_provider=9902",
"searchQuery": "coffee shop",
"position": 1,
"scrapedAt": "2026-09-14T05:42:05.073Z"
}
| Field | What it is |
|---|---|
placeId / muid | The id Apple puts in a shareable link, and its internal numeric id. Either can be fed back in. placeId is null on places Apple does not give a share link for. |
openingHours / openingHoursText | Structured ranges per day, and a one-line version for spreadsheets. hoursType says whether they are normal or something else. |
rating, reviewCount, priceLevel, priceRange | Supplied to Apple by its partners. null where Apple has none, which is genuinely common. |
reviews | Up to three snippets from the place card, truncated by Apple. Not the full review set. |
amenities | Apple's own flags, like Free Wi-Fi and Wheelchair Accessible. |
quickLinks | The action links Apple shows, such as a menu or a booking page, with whoever supplies them. |
searchQuery, searchLocation, position | Which of your terms and locations found this place, and where it sat. |
🧾 Reading the output
| Row | How to spot it | Billed |
|---|---|---|
| A place | It has a muid and no _sample or _diagnostic key | yes |
| The sample row | _sample: true and charged: false | no |
| A diagnostic | ok: false, _diagnostic: true and an errorCode | no |
Place rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark them as not real results.
| Code | What it means |
|---|---|
NO_LOCATION | A search term with no area to search in. |
LOCATION_NOT_FOUND | Apple could not resolve the place name at all. |
NO_RESULTS | The search ran and found nothing. |
PLACE_NOT_FOUND | A place id that Apple has no record of. |
BAD_URL | A link that is not an Apple Maps place or search URL. |
BLOCKED, SEARCH_FAILED, BAD_RESPONSE, API_ERROR | Apple did not answer with usable data. |
TIME_LIMIT | The run reached its time limit first. notSearched lists the searches it never got to (with several locations, as term @ location) and notLookedUp any place links, none of them charged. stoppedPartWay names a term it was in the middle of; what it found for that term is in the dataset. |
▶️ How to run it
1. Open Apple Maps Scraper and click Try for free. 2. Type what you want into Search terms and where into Location. 3. For an exact spot, fill Latitude, Longitude and Search radius (km) instead. 4. Set Maximum places. Start around 25 to see what the rows look like. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.40 per 1,000 places. Flat on every Apify plan, with no volume tiers.
One billed row per place delivered. Duplicates found in more than one grid square are dropped before billing, the sample row is not billed, and diagnostic rows are not billed.
💡 What people use it for
- Prospect lists: name, address, phone, website, category and hours are the columns people build
them from.
- Mapping how dense a category is across a city, using the coordinates on every row.
- Checking whether your own listings carry the right hours, phone and website on Apple's map.
- Comparing a shortlist of locations on rating, review count and price level in one pass.
🚧 What it does not do
- No full reviews. You get the rating, the count, and up to three snippets. It is not a
review export.
- No email addresses. Apple Maps does not carry them, and nothing here invents one.
- Ratings and price levels come from Apple's partners. Where Apple has none, those fields are
null. That is Apple's coverage, not a miss.
- A location Apple cannot match becomes the nearest one it can, and the run scrapes there.
Check city on your rows.
- You can finish with fewer places than you asked for. The run's own counter also takes in
region-level hits that never reach your dataset, so it can stop early.
- No directions, transit, traffic, Look Around or satellite imagery.
- A rare term may not reach every corner of a country. Once the squares the run tries come back
nearly empty, it only carries on where places turned up.
- A place Apple files under the next state or country is left out, even one right on the border.
United Statesmeans the lower 48, as Apple draws it. AddAlaskaandHawaiiunder
Several locations if you need them.
- A very long list can run out of time. The run stops just before its limit, keeps what it found
and lists the rest in a TIME_LIMIT row.
🧭 Which maps scraper do you need?
| If you want | Use |
|---|---|
| Places from Apple Maps | This one |
| Places from Google Maps | Google Maps Scraper |
| Reviews for a place on Google Maps | Google Maps Reviews Scraper |
| Places in Russia, Turkey and the CIS | Yandex Maps Scraper |
| Businesses from 2GIS | 2GIS Places Scraper |
❓ Questions people ask
Do I need an Apple Developer account? No. Apple's own MapKit and Maps Server APIs want a paid account and a signed token. This reads the public Apple Maps site and hands you JSON or CSV.
How do I cover a whole city, state or country? Set Location to it and raise Maximum places. With a small maximum, a state or country run stops after its first squares: the middle, then a spread across the area.
Can I look up one specific business? Yes. Type its name, town and ZIP as a search term, like Sightglass Coffee San Francisco CA 94103, or paste its Apple Maps share link into Apple Maps URLs.
Does it work outside the United States? Yes. Set countryCode and language to match, for example DE and de-DE.
Is this legal? These are public business listings. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search term and location you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.