Apple Maps Business Data Scraper avatar

Apple Maps Business Data Scraper

Pricing

from $4.00 / 1,000 place scrapeds

Go to Apify Store
Apple Maps Business Data Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

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

FieldTypeWhat it controls
searchQuerystringApple Maps keyword/category (prefill: coffee shops)
searchQueriesarrayExtra keywords merged with searchQuery
locationstringCity/region text (prefill: San Francisco, CA)
latitude / longitudenumberOptional map center
placeUrlsarrayApple Maps place URLs
searchUrlsarrayApple Maps search share URLs
maxResultsintegerCap 1–500 (default 20, prefill 5)
enrichEmailsbooleanOptional public-website email enrich (default false)
requireWebsite / requirePhonebooleanKeep only places with website/phone
adaptiveGridbooleanExpand nearby grid cells when centered (default true)
languagestringLocale (default en-US)
countryCodestringCountry hint (default US)
proxyConfigurationobjectOptional 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.

FieldMeaning
placeId / muidApple identifiers when present
nameBusiness name
categoryPOI category when available
phonePublic phone from MapKit
websiteWebsite URL from MapKit
email / emailSourceUrlOptional public email + page URL
address, street, city, state, postalCode, country, countryCodeAddress parts
latitude, longitudeCoordinates
timezoneWhen Apple exposes it
appleMapsUrlPlace link
searchQuery, searchLocationProvenance of the search
sourceRoute label (e.g. mapkit-search)
scrapedAtISO-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.

EventPrice
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

OutcomeMeaning
COMPLETEAt least one place saved.
PARTIALSome places saved; others empty or hit a charge cap.
VALID_EMPTYSearch or place resolved with zero matching public places.
INVALID_INPUTNo usable query, location, or Apple Maps URLs.
UPSTREAM_FAILEDUpstream MapKit transport returned no useful places.

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.