Apple Maps API endpoint
Returns one Apple Maps place by its place ID: name, type, category taxonomy, coordinates, formatted and structured address, phone numbers, website, rating and review count, price level, weekly opening hours, amenities (payment, accessibility, parking, and similar yes/no attributes), photos, review snippets (text, rating, time, and source link, without reviewer identity), the business-claim link, and the IDs of Apple Guides that include the place. Accepts either the external place ID (starts with I, the place-id= value in a maps.apple.com/place URL) or the numeric ID from a search result.
/apple-maps/placeReturns one Apple Maps place's full detail by its place ID.
Query parameters:
place_id (required) — Apple place ID. Accepts either the external form starting with I (e.g. I594FECA0B369D14A, the place-id= value in a maps.apple.com/place URL and /apple-maps/search's place_id) or the numeric ID from /apple-maps/search's id field (also the auid= value in shared Apple Maps links).lang (optional) — display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US.country (optional) — two-letter ISO 3166-1 code selecting Apple's regional catalog, e.g. US, JP. Defaults to US.An unknown or malformed ID returns a 404.
type is the place kind: BUSINESS, AOI, ADDRESS, STREET, or another Apple entity type. hours_type is NORMAL, SPECIAL, TEMPORARY_CLOSURE, or PERMANENT_CLOSURE. hours[] lists one entry per weekday per opening interval, in the place's local time.
Review snippets carry the review text, rating, time, and a link to the source review; reviewer identity is not included. Ratings, reviews, and amenities are the ones Apple Maps itself displays (sourced from Apple's review partners). Photos are capped at 20.
Depending on the kind of place, the detail also carries: timezone (IANA), neighborhoods[], summary_line (Apple's one-line "category · neighborhood" summary), about, editorial[] (third-party descriptions such as the MICHELIN Guide's text, each with source, text, url), accolades[] (source, text, vendor, e.g. MICHELIN Guide "Three Stars"), links[] (type such as menu, reserve, order, tickets, gift_card, website; title, url, source), cover_photo_url, facts[] (type, title, value, unit, e.g. EV port counts, elevation, area), closed_since (permanent closures), service_hours[] (per-service hours such as a pub's kitchen: name, hours_type, hours[]), parent_place (id, name), container_place_id, related_place_ids[], ev_charging (available, total, status, plugs[] with connector, connector_type, speed, power_kw, available, total, status), transit (same shape as /apple-maps/transit-departures), trailheads[] (id, name, category, latitude, longitude, photo_url), venue (id, name, levels[] with id, ordinal, name, short_name), and venue_directory[] (name, subcategories[]). Fields a place has no data for are omitted.
Response includes everything /apple-maps/search returns per place (id, place_id, url, name, type, category, categories[], latitude, longitude, address, address_info, phone, alt_phones[], website, rating, rating_max, rating_count, price_level, price_max, price_symbol, hours_type, hours[], photo_url) plus amenities[] (id, name, present), photos[] (id, url, width, height, category), reviews[] (id, text, rating, rating_max, time, source_url), claim_url, and guide_ids[] (Apple Guides that include the place). Fields Apple has no value for are omitted.
| Field | Filled in, of 19 checked | Values in the sample |
|---|---|---|
| id | 19 | |
| url | 19 | ir.4sqi.net and 2 other hosts |
| width | 19 | |
| height | 19 | |
| category | 19 | Food & Drink (10), Atmosphere (9) |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| place_id | string | Yes | Apple place ID: external form (I594FECA0B369D14A) or numeric id from a search result | I594FECA0B369D14A | |
| lang | string | No | en-US | Display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US. | en-US |
| country | string | No | US | Two-letter ISO 3166-1 country code selecting Apple's regional catalog. Defaults to US. | US |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/apple-maps/place?place_id=I594FECA0B369D14A&lang=en&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"id": "6435622567484707146",
"place_id": "I594FECA0B369D14A",
"url": "https://maps.apple.com/place?place-id=I594FECA0B369D14A",
"name": "Sightglass Coffee",
"type": "BUSINESS",
"category": "Coffee Roastery",
"categories": [
{
"id": "dining",
"name": "Dining",
"level": 1
},
{
"id": "coffee_roastery",
"name": "Coffee Roastery",
"level": 2
}
],
"latitude": 37.776974,
"longitude": -122.408529,
"address": "270 7th St, San Francisco, CA 94103, United States",
"address_info": {
"street": "270 7th St",
"neighborhood": "SOMA",
"city": "San Francisco",
"state": "California",
"state_code": "CA",
"postal_code": "94103",
"country": "United States",
"country_code": "US"
},
"phone": "+14154631673",
"website": "https://sightglasscoffee.com/blogs/shops/soma-district",
"rating": 4,
"rating_max": 5,
"rating_count": 2228,
"price_level": 2,
"price_max": 4,
"price_symbol": "$",
"hours_type": "NORMAL",
"hours": [
{
"day": "monday",
"open": "06:30",
"close": "17:00"
}
],
"photo_url": "https://is1-ssl.mzstatic.com/image/thumb/bF51kpjYtm4-K_WMlD8Wkw/320x320bb.jpeg",
"amenities": [
{
"id": "crossbusiness.payments.applepay",
"name": "Accepts Apple Pay",
"present": true
},
{
"id": "crossbusiness.accessibility.wheelchair",
"name": "Wheelchair Accessible",
"present": true
}
],
"photos": [
{
"id": "oUtvXhZ0boFM3u5jRFl8sg",
"url": "https://is1-ssl.mzstatic.com/image/thumb/KXluIk81w86BEqUz5RPW3Q/320x320bb.jpg",
"width": 308,
"height": 308,
"category": "Food & Drink"
}
],
"reviews": [
{
"id": "jRsCcB7IE9UHivNsOieTZg",
"text": "Stopped in for morning coffee before a hike and this is a great neighborhood shop with plenty of space and not too much noise.",
"rating": 4,
"rating_max": 5,
"time": "2026-08-15T18:12:54Z",
"source_url": "http://yelp.com/apple_maps_action?id=VD527WwvrhE3Nhzf5vaMNw&component=review&cid=jRsCcB7IE9UHivNsOieTZg&action=view&language=en-US"
}
],
"claim_url": "https://business.apple.com/?claimId=6435622567484707146",
"guide_ids": [
"13100041759208417726"
]
}
}Request schema
No body schema
Response schema
#/definitions/applemaps.placeResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | applemaps.PlaceResponse | No | ||||
| data.about | string | No | ||||
| data.accolades | array | No | ||||
| data.accolades[].source | string | No | ||||
| data.accolades[].text | string | No | ||||
| data.accolades[].vendor | string | No | ||||
| data.address | string | No | ||||
| data.address_info | applemaps.Address | No | ||||
| data.address_info.city | string | No | ||||
| data.address_info.country | string | No | ||||
| data.address_info.country_code | string | No | ||||
| data.address_info.county | string | No | ||||
| data.address_info.neighborhood | string | No | ||||
| data.address_info.postal_code | string | No | ||||
| data.address_info.state | string | No | ||||
| data.address_info.state_code | string | No | ||||
| data.address_info.street | string | No | ||||
| data.alt_phones | array | No | ||||
| data.amenities | array | No | ||||
| data.amenities[].id | string | No | ||||
| data.amenities[].name | string | No | ||||
| data.amenities[].present | boolean | No | ||||
| data.categories | array | No | ||||
| data.categories[].id | string | No | ||||
| data.categories[].level | integer | No | ||||
| data.categories[].name | string | No | ||||
| data.category | string | No | ||||
| data.claim_url | string | No | ||||
| data.closed_since | string | No | ||||
| data.container_place_id | string | No | ||||
| data.cover_photo_url | string | No | ||||
| data.editorial | array | No | ||||
| data.editorial[].source | string | No | ||||
| data.editorial[].text | string | No | ||||
| data.editorial[].url | string | No | ||||
| data.ev_charging | applemaps.EVCharging | No | ||||
| data.ev_charging.available | integer | No | ||||
| data.ev_charging.plugs | array | No | ||||
| data.ev_charging.plugs[].available | integer | No | ||||
| data.ev_charging.plugs[].connector | string | No | ||||
| data.ev_charging.plugs[].connector_type | string | No | ||||
| data.ev_charging.plugs[].power_kw | number | No | ||||
| data.ev_charging.plugs[].speed | string | No | ||||
| data.ev_charging.plugs[].status | string | No | ||||
| data.ev_charging.plugs[].total | integer | No | ||||
| data.ev_charging.status | string | No | ||||
| data.ev_charging.total | integer | No | ||||
| data.facts | array | No | ||||
| data.facts[].title | string | No | ||||
| data.facts[].type | string | No | ||||
| data.facts[].unit | string | No | ||||
| data.facts[].value | number | No | ||||
| data.guide_ids | array | No | ||||
| data.hours | array | No | ||||
| data.hours[].close | string | No | ||||
| data.hours[].day | string | No | ||||
| data.hours[].open | string | No | ||||
| data.hours_type | string | No | ||||
| data.id | string | No | ||||
| data.latitude | number | No | ||||
| data.links | array | No | ||||
| data.links[].source | string | No | ||||
| data.links[].title | string | No | ||||
| data.links[].type | string | No | ||||
| data.links[].url | string | No | ||||
| data.longitude | number | No | ||||
| data.name | string | No | ||||
| data.neighborhoods | array | No | ||||
| data.parent_place | applemaps.PlaceRef | No | ||||
| data.parent_place.id | string | No | ||||
| data.parent_place.name | string | No | ||||
| data.phone | string | No | ||||
| data.photo_url | string | No | ||||
| data.photos | array | No | ||||
| data.photos[].category | string | No | ||||
| data.photos[].height | integer | No | ||||
| data.photos[].id | string | No | ||||
| data.photos[].url | string | No | ||||
| data.photos[].width | integer | No | ||||
| data.place_id | string | No | ||||
| data.price_level | integer | No | ||||
| data.price_max | integer | No | ||||
| data.price_symbol | string | No | ||||
| data.rating | number | No | ||||
| data.rating_count | integer | No | ||||
| data.rating_max | integer | No | ||||
| data.related_place_ids | array | No | ||||
| data.reviews | array | No | ||||
| data.reviews[].id | string | No | ||||
| data.reviews[].rating | number | No | ||||
| data.reviews[].rating_max | integer | No | ||||
| data.reviews[].source_url | string | No | ||||
| data.reviews[].text | string | No | ||||
| data.reviews[].time | string | No | ||||
| data.service_hours | array | No | ||||
| data.service_hours[].hours | array | No | ||||
| data.service_hours[].hours[].close | string | No | ||||
| data.service_hours[].hours[].day | string | No | ||||
| data.service_hours[].hours[].open | string | No | ||||
| data.service_hours[].hours_type | string | No | ||||
| data.service_hours[].name | string | No | ||||
| data.summary_line | string | No | ||||
| data.timezone | string | No | ||||
| data.trailheads | array | No | ||||
| data.trailheads[].category | string | No | ||||
| data.trailheads[].id | string | No | ||||
| data.trailheads[].latitude | number | No | ||||
| data.trailheads[].longitude | number | No | ||||
| data.trailheads[].name | string | No | ||||
| data.trailheads[].photo_url | string | No | ||||
| data.transit | applemaps.TransitInfo | No | ||||
| data.transit.departures | array | No | ||||
| data.transit.departures[].direction | string | No | ||||
| data.transit.departures[].headsign | string | No | ||||
| data.transit.departures[].line | string | No | ||||
| data.transit.departures[].line_id | string | No | ||||
| data.transit.departures[].live | string | No | ||||
| data.transit.departures[].origin | string | No | ||||
| data.transit.departures[].scheduled | string | No | ||||
| data.transit.departures[].status | string | No | ||||
| data.transit.departures[].stop_id | string | No | ||||
| data.transit.lines | array | No | ||||
| data.transit.lines[].color | string | No | ||||
| data.transit.lines[].id | string | No | ||||
| data.transit.lines[].name | string | No | ||||
| data.transit.lines[].shield | string | No | ||||
| data.transit.lines[].system | string | No | ||||
| data.transit.lines[].type | integer | No | ||||
| data.transit.stop_name | string | No | ||||
| data.transit.systems | array | No | ||||
| data.transit.systems[].id | string | No | ||||
| data.transit.systems[].name | string | No | ||||
| data.transit.ttl_seconds | integer | No | ||||
| data.type | string | No | ||||
| data.url | string | No | ||||
| data.venue | applemaps.Venue | No | ||||
| data.venue.id | string | No | ||||
| data.venue.levels | array | No | ||||
| data.venue.levels[].id | string | No | ||||
| data.venue.levels[].name | string | No | ||||
| data.venue.levels[].ordinal | integer | No | ||||
| data.venue.levels[].short_name | string | No | ||||
| data.venue.name | string | No | ||||
| data.venue_directory | array | No | ||||
| data.venue_directory[].key | string | No | ||||
| data.venue_directory[].name | string | No | ||||
| data.venue_directory[].subcategories | array | No | ||||
| data.venue_directory[].subcategories[].key | string | No | ||||
| data.venue_directory[].subcategories[].name | string | No | ||||
| data.website | string | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/apple-maps/place?place_id=I594FECA0B369D14A&lang=en&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"