Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Apple Maps Scraper icon

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.

5 from 1 review on Apify 179 runs on Apify $0.0004 per place ($0.4 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchQueries, location, locations (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export 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 forWhenPrice
Place returnedCharged 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

FieldWhat it doesType
searchQueriesWhat 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
locationCity, 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
locationsOptional. 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
latitudeOptional. Search around an exact point instead of a named location.string
longitudeOptional. Search around an exact point instead of a named location.string
searchRadiusKmOnly used with latitude/longitude. Half-width of the square area to cover.integer
startUrlsPaste 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=...&center=lat,lng) are run as searches.array
languageLanguage for names, categories and descriptions, as a BCP-47 tag.string
countryCodeTwo-letter country the search should be biased towards, for example US, GB, DE. Defaults to US.string
maxItemsStop after this many places. You are charged per place returned, so this is also your budget cap.integer
maxItemsPerSearchOptional. 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:

namecategoryaddresscityphonewebsiteratingreviewCountopeningHoursTextlatitudelongitudeappleMapsUrl

Export 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 iconDeveloper & Research Tools

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.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

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.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

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.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

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.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

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

InputSearch terms with a city, state, country or point, or Apple Maps links
OutputOne row per place
Ceiling10,000 places per run
Account neededNone, 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"
}
FieldDefaultWhat it is
searchQueriesbox starts at coffee shopWhat to look for. Each term is searched across the whole area.
locationbox starts at San Francisco, CACity, neighbourhood, state or country. Ignored when you set a latitude and longitude.
locationsnoneMore towns or areas, one per line. Every term is searched in each of them, and in location too.
latitude, longitudenoneAn exact point to search around instead of a named place.
searchRadiusKm5Half-width of the square to cover, up to 200. Only used with a latitude and longitude.
startUrlsnoneApple Maps place links, or search links carrying a query and a center.
languageen-USLanguage for names, categories and descriptions.
countryCodeUSTwo-letter country the search leans towards.
maxItems50Stop after this many places, up to 10,000.
maxItemsPerSearchnoneStop each term in each location after this many places, so one big town cannot use up maxItems before the others start.
proxyConfigurationleave it aloneOptional, 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"
}
FieldWhat it is
placeId / muidThe 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 / openingHoursTextStructured ranges per day, and a one-line version for spreadsheets. hoursType says whether they are normal or something else.
rating, reviewCount, priceLevel, priceRangeSupplied to Apple by its partners. null where Apple has none, which is genuinely common.
reviewsUp to three snippets from the place card, truncated by Apple. Not the full review set.
amenitiesApple's own flags, like Free Wi-Fi and Wheelchair Accessible.
quickLinksThe action links Apple shows, such as a menu or a booking page, with whoever supplies them.
searchQuery, searchLocation, positionWhich of your terms and locations found this place, and where it sat.

🧾 Reading the output

RowHow to spot itBilled
A placeIt has a muid and no _sample or _diagnostic keyyes
The sample row_sample: true and charged: falseno
A diagnosticok: false, _diagnostic: true and an errorCodeno

Place rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark them as not real results.

CodeWhat it means
NO_LOCATIONA search term with no area to search in.
LOCATION_NOT_FOUNDApple could not resolve the place name at all.
NO_RESULTSThe search ran and found nothing.
PLACE_NOT_FOUNDA place id that Apple has no record of.
BAD_URLA link that is not an Apple Maps place or search URL.
BLOCKED, SEARCH_FAILED, BAD_RESPONSE, API_ERRORApple did not answer with usable data.
TIME_LIMITThe 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 States means the lower 48, as Apple draws it. Add Alaska and Hawaii under

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 wantUse
Places from Apple MapsThis one
Places from Google MapsGoogle Maps Scraper
Reviews for a place on Google MapsGoogle Maps Reviews Scraper
Places in Russia, Turkey and the CISYandex Maps Scraper
Businesses from 2GIS2GIS 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.