Apple Maps Business Data Scraper
Pricing
from $4.00 / 1,000 place scrapeds
Apple Maps Business Data Scraper
Scrape public Apple Maps businesses by keyword and location or place URL. Returns name, phone, website, address, and coordinates. Optional website email enrich. Do not use for Google Maps — see google-maps-leads-scraper. Charged $0.004 per place.
Pricing
from $4.00 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape public Apple Maps businesses by keyword and location, Apple Maps search URLs, or place links. Each dataset row is one place with name, phone, website, address, and GPS coordinates from Apple’s MapKit HTTP search — optionally enriched with a public email found on the business website. Run it from Apify Console, the Apify API, or Apify MCP with no Apple login.
Built for local lead lists, territory research, and CRM enrichment when your workflow starts from Apple Maps place search. MapKit search returns NAP + coordinates (and category/timezone when Apple exposes them). Ratings, review counts, and opening hours stay out of this SKU’s contract so every row matches fields Apple actually returns in public search.
Best fit
Use this Actor when you need Apple Maps places for a category in a city, or you already have maps.apple.com place/search URLs and want a flat, billable NAP dataset for MCP, CRM, or spreadsheet workflows.
When you need Google Maps ratings, reviews, or lead scoring instead, continue with Local Business Lead Generator — Google Maps. Keep Apple Maps URLs on this Actor and Google Maps workflows on the Google Maps sibling.
Practical scenario
A field-marketing lead needs coffee shops in San Francisco for a weekend pop-up list. They run the Console prefill (coffee shops, San Francisco, CA, maxResults: 5). The dataset returns five Apple Maps places with phone, website, address, and coordinates. On a second run they turn on enrichEmails only for venues that already have websites, and pay the separate email event only when a public mailto or contact-page address is found.
Quick start input
{"searchQuery": "coffee shops","location": "San Francisco, CA","maxResults": 5,"enrichEmails": false,"adaptiveGrid": true,"language": "en-US","countryCode": "US"}
Input reference
| Field | Type | What it controls |
|---|---|---|
searchQuery | string | Apple Maps keyword/category (prefill: coffee shops) |
searchQueries | array | Extra keywords merged with searchQuery |
location | string | City/region text (prefill: San Francisco, CA) |
latitude / longitude | number | Optional map center |
placeUrls | array | Apple Maps place URLs |
searchUrls | array | Apple Maps search share URLs |
maxResults | integer | Cap 1–500 (default 20, prefill 5) |
enrichEmails | boolean | Optional public-website email enrich (default false) |
requireWebsite / requirePhone | boolean | Keep only places with website/phone |
adaptiveGrid | boolean | Expand nearby grid cells when centered (default true) |
language | string | Locale (default en-US) |
countryCode | string | Country hint (default US) |
proxyConfiguration | object | Optional Apify proxy |
Empty input with no query or URLs finishes INVALID_INPUT with zero place charges.
What data you receive
One dataset item is one Apple Maps place. Download the dataset as JSON, HTML, CSV, or Excel.
| Field | Meaning |
|---|---|
placeId / muid | Apple identifiers when present |
name | Business name |
category | POI category when available |
phone | Public phone from MapKit |
website | Website URL from MapKit |
email / emailSourceUrl | Optional public email + page URL |
address, street, city, state, postalCode, country, countryCode | Address parts |
latitude, longitude | Coordinates |
timezone | When Apple exposes it |
appleMapsUrl | Place link |
searchQuery, searchLocation | Provenance of the search |
source | Route label (e.g. mapkit-search) |
scrapedAt | ISO-8601 collection time |
{"placeId": "I7EXAMPLE","name": "Example Coffee Co.","category": "Cafe","phone": "+1 415-555-0100","website": "https://example-coffee.example","email": null,"address": "1 Market St, San Francisco, CA 94105, United States","city": "San Francisco","state": "CA","postalCode": "94105","countryCode": "US","latitude": 37.7936,"longitude": -122.3950,"appleMapsUrl": "https://maps.apple.com/place?place-id=I7EXAMPLE","searchQuery": "coffee shops","searchLocation": "San Francisco, CA","source": "mapkit-search","scrapedAt": "2026-09-15T12:00:00.000Z"}
OUTPUT and RUN_SUMMARY in the default key-value store hold outcome, itemsPushed, and chargedEventCounts.
Pricing
This Actor uses Pay per event plus platform usage. Event prices below are the launch defaults; treat the live Pricing tab on the Actor page as the current source of truth, because platform usage (compute and proxy) is billed to the caller in addition to named events.
| Event | Price |
|---|---|
apify-actor-start | $0.00005 |
place-scraped (primary) | $0.004 per saved place |
email-enriched | $0.006 per found public email |
Empty searches and filtered duplicates skip the place-scraped event. Worked example: maxResults: 5 on one city search ≈ $0.00005 start + 5 × $0.004 = about $0.02005 in named events, plus platform usage. With enrichEmails on, add $0.006 only for each place where a public email is found.
Best results
Start with searchQuery + location (or coordinates) and maxResults at 5–20 while validating a new market. Turn on requirePhone or requireWebsite when your CRM needs contactable rows. Use adaptiveGrid when a single center returns a thin first page and you want nearby cells filled in. Enable enrichEmails only after you have websites worth crawling, so you pay the email event for useful hits. Place URLs and search share URLs work well for refresh jobs when you already know the Apple Maps links.
How it works
The Actor uses Apple MapKit over HTTP (no browser, no Apple ID). It searches by keyword/location or resolves place/search URLs, normalizes NAP + coordinates, dedupes by place id / MUID / geo+name, applies optional filters, and optionally fetches public website HTML for emails. Every run writes OUTPUT and RUN_SUMMARY with an honest outcome (COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, or CONFIG_ERROR).
Use through the API
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/apple-maps-business-scraper').call({searchQuery: 'dentists',location: 'Austin, TX',maxResults: 10,enrichEmails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use with AI agents through Apify MCP
Find 10 coffee shops in San Francisco, CA on Apple Maps. Return name, phone, website, address, latitude, longitude, appleMapsUrl, and scrapedAt. Read the dataset plus OUTPUT for outcome and provenance, then confirm cost on the Pricing tab.
Connect via https://mcp.apify.com. Cost signal: about $0.004 per saved place plus platform usage; email enrich is a separate $0.006 event. Confirm current event prices on the Actor Pricing tab before large runs. Scope stays public MapKit NAP fields; ratings and hours belong on other Actors when you need them.
Outcomes
| Outcome | Meaning |
|---|---|
COMPLETE | At least one place saved. |
PARTIAL | Some places saved; others empty or hit a charge cap. |
VALID_EMPTY | Search or place resolved with zero matching public places. |
INVALID_INPUT | No usable query, location, or Apple Maps URLs. |
UPSTREAM_FAILED | Upstream MapKit transport returned no useful places. |
Legal & responsible use
Use this Actor for public Apple Maps / MapKit business listing data you are authorized to process under applicable laws and site terms. Respect privacy rules (including GDPR/CCPA where applicable) and marketing contact rules for outreach. Keep use cases to legitimate research, lead generation, and analysis. Apple and Apple Maps are trademarks of Apple Inc. This independent Actor is not affiliated with, associated with, or endorsed by Apple Inc.
Builder's note
I found that MapKit search needs a short-lived token bootstrap before api.apple-mapkit.com accepts place and geocode calls. I designed the path as HTTP-only (token → bootstrap → search/geocode/place) after live probes against city keyword searches and place URLs, and empty place-id lookups finish as VALID_EMPTY so unknown IDs stay honest and unbilled. Optional email enrich stays a separate charged event so NAP-only runs stay cheap.