Apple Maps Scraper - Place Details, Hours & Change Monitor avatar

Apple Maps Scraper - Place Details, Hours & Change Monitor

Pricing

from $3.60 / 1,000 place returneds

Go to Apify Store
Apple Maps Scraper - Place Details, Hours & Change Monitor

Apple Maps Scraper - Place Details, Hours & Change Monitor

For local SEO and listings teams watching their places: Apple Maps details by place URL or ID with name, address, phone, website, opening hours, rating and count, categories and closed status. About 1 s per place. Monitor returns only places whose hours, phone, rating or status changed.

Pricing

from $3.60 / 1,000 place returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Get the details of any Apple Maps place from its place URL or place ID: name, address, phone, website, opening hours, rating and number of ratings, categories, coordinates and whether it is temporarily or permanently closed. Turn on monitor mode and each run returns only the places whose hours, phone, website, address, rating, rating count, category or open/closed status changed since the last run, with the previous values.

Built for lookups one place at a time as well as for lists: the run start fee is low, so an API call for a single place stays cheap, and in monitor mode an unchanged place costs only a small check fee.

Unofficial. Reads only the public Apple Maps place pages (maps.apple.com/place?...) that Apple's robots.txt explicitly allows. No login, no Apple account, no search pages.

What you get

ColumnExample
nameBlack Fox
primaryCategory, categoriesCoffee Shop; Coffee Shop, Cafe, Restaurant, Breakfast and Brunch Restaurant
phone, phoneFormatted, altPhones+19177420133 ; +1 (917) 742-0133 ; [+12124227750]
websitehttps://www.blackfoxcoffee.com
address + street, city, district, county, state, stateCode, postalCode, country, countryCode70 Pine Street, New York, NY 10005, United States
latitude, longitude, timezone40.7064705, -74.0077107, America/New_York
openingHours{ "monday": ["07:30-17:00"], ..., "sunday": ["09:00-16:00"] } (local time; a day with [] is closed)
businessStatusoperating, temporarily-closed or permanently-closed (plus isTemporarilyClosed, isPermanentlyClosed, hoursType)
rating, ratingMaxScore, ratingOutOf5, ratingCount, ratingProvider3.9 of 5 from 334 ratings (Yelp) - or 85 of 100 from 54 ratings (Apple)
ratingCategoriesApple's per-topic ratings when shown (Atmosphere 86%, Customer Service 85%, ...)
priceLevel, priceLevelMax2 of 4
amenitiesACCEPTS_APPLE_PAY, WHEELCHAIR_ACCESSIBLE, ...
placeId, auid, placeUrl, mapsCategoryId, placeType, claimableI918CB7E77B4C7910 ...
changeType, changedFields, previousValues, previousCheckedAtwith a watch: changed, ["phone"], { "phone": "+19177420133" }
partsNotReadparts of the page Apple did not deliver this time (for example ["rating","ratingCount"]) - those columns are null and are not compared

Apple Maps shows ratings in two ways and this Actor keeps both as shown: Apple's own ratings (a percentage, ratingMaxScore 100) and ratings from a partner such as Yelp (stars, ratingMaxScore 5). ratingOutOf5 puts both on a 5-point scale.

Input

FieldWhat it does
placesApple Maps place URLs or IDs, one per line. Accepted: https://maps.apple.com/place?place-id=I918CB7E77B4C7910, https://maps.apple.com/place?auid=5283835567047557515, older links like https://maps.apple.com/?auid=...&q=..., or just the place ID / auid. Up to 1,000 per run. Empty = three example places. Short share links (maps.apple/p/...) are not read - open them and copy the full address.
onlyChangesMonitor mode. Return only places that changed (or are new to the watch). The first run returns every place as the starting point.
watchNameName of the remembered state, so different lists can be watched on their own schedules.
resetMonitoringStateForget what the watch remembered and start over.

Example - one place (the typical API call):

{ "places": ["https://maps.apple.com/place?place-id=I918CB7E77B4C7910"] }

Example - a daily change monitor for your locations:

{ "places": ["I918CB7E77B4C7910", "I9B7EE73B37C8175F", "5283835567047557515"], "onlyChanges": true, "watchName": "my-stores" }

Monitor mode: what counts as a change

Compared fields: name, phone, website, address, openingHours, businessStatus, rating, ratingCount, primaryCategory.

Not compared, because they move on their own and would be sold as fake changes every day: the "open now / closed now" state, the rolling 7-day window Apple attaches to a temporary closure, photo order and review snippets.

Every change is confirmed by reading the page a second time; only fields that show the same new value in both reads are reported. If the second read fails, the change is not reported, charged or remembered, and a free unreadable row says so; the next run checks the place again. We measured why this matters: the page of one permanently closed store came back without its rating block in 7 of 10 reads (the other 26 places we re-read 5 times each never changed).

  • A rating or rating count that was there before and is missing today is treated as not delivered today, not as removed: it is not reported and the remembered value is kept (partsNotRead says so on the row).
  • A rating that was missing when the place was first remembered and shows up later is remembered silently, not sold as a change. This also means a place that receives its very first rating is not reported until that rating changes again.
  • If Apple marks a part of the page as not delivered (each part of the page carries its own status), that part is not compared and the remembered value is kept.

How it behaves when something goes wrong

  • The place does not exist (Apple answers 404): a free not-found row. Not retried.
  • The page could not be read after asking again (twice directly, twice through a datacenter IP, then a residential IP - at most 5 residential reads per run): a free unreadable row. It is never reported as "no data". The place is not remembered, so a later run returns it.
  • A check page / CAPTCHA: this Actor does not solve or bypass it. It stops, writes a free blocked row and charges nothing.
  • Apple redirects a place somewhere this Actor does not read: a free redirected row that says where it was sent.
  • The rating block is missing: for a few places Apple sometimes sends the page without its rating (we saw it on one permanently closed store). A single lookup cannot tell that apart from a place with no ratings, so rating is null on that row; monitor mode keeps the remembered rating (see above).
  • Your maximum charge per run is reached: it stops before reading places it could not bill, says so in a free budget-reached row and does not remember them.
  • Bad input: a free bad-input row, nothing is requested.
  • A run that could not read anything and charged nothing ends with a failed status, so your integration sees it.

Pricing

Pay per event:

  • Run start - once per run that returns at least one place (in monitor mode: once per run that read and compared at least one place).
  • Place returned - per place row.
  • Place checked - monitor mode only, per place that was read and had no change (the place is not returned as a row).

Rows that explain a missing place, an unreadable page, bad input, no change or a reached limit are free. The exact prices are on the Pricing tab.

Notes and limits

  • Data is what Apple Maps shows on the public place page, in English (en-US).
  • Opening hours are the regular weekly hours in the place's local time zone, split at midnight the way Apple Maps stores them: a club open Friday 11 PM to 4 AM shows "friday": ["23:00-24:00"] and "saturday": ["00:00-04:00", ...]. Places without published hours (many hotels) have openingHours: null.
  • businessStatus is operating when Apple Maps does not mark the place as closed; temporarily-closed and permanently-closed are Apple's own closure marks.
  • Speed: about 1 second per place (measured: 300 places in 309 seconds, all read directly, none retried). A changed place is read twice. The default run timeout is 1 hour, enough for the 1,000-place maximum. The watch memory and the run's position are saved every 50 places and again when Apify signals that it is stopping or moving the run; a run that Apify moves to another server continues from the saved position instead of starting over. If a run is killed without that signal, up to 49 places returned since the last save can come back as new in the next monitor run.
  • Two schedules writing the same watchName at the same moment can overwrite each other's memory; give each schedule its own watch name.
  • This Actor does not search Apple Maps (Apple's robots.txt disallows search pages). Bring the places you want to read.

Support

Found a place that is read wrongly? Open an issue in the Issues tab with the place URL and the run ID.