DEV Community

Cover image for Market Mapping with Apple Maps Data: Extract Every Business in a City in 2026
Truffle Pig Data
Truffle Pig Data

Posted on

Market Mapping with Apple Maps Data: Extract Every Business in a City in 2026

If you want to know every coffee shop, dentist, or HVAC company in a city, Apple Maps has the answer and no export button. The listings sit in an app pane you can only read one card at a time, which makes market mapping by hand a copy-paste marathon. This post covers the official developer route, the DIY route, and the one I actually use: the Apple Maps API on Apify, which turns a query and a city into structured JSON listings.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Does Apple Maps have an API?

Yes, and it is worth being precise here. Apple ships MapKit and a server API for developers building map features into their own apps. It is good at what it is for: geocoding, showing maps, powering a search box. It is not built for bulk data collection. You need an Apple Developer membership and token plumbing before the first call, daily quotas cap heavy use, and the responses are aimed at rendering pins, not exporting a market. Curated guides, amenities, and the multi-source ratings you see in the Apple Maps app are not something you can pull out at dataset scale. A scraper-as-API fills that gap: send a query, get every listing back as JSON rows.

What the Apple Maps API returns

The Apple Maps API returns business listings, place details, curated guides, and refinement filters as structured JSON, one listing per row.

Field Example Notes
title Houndstooth Coffee With position in the results
gps_coordinates { "latitude": 30.2729, "longitude": -97.7444 } Ready for mapping tools
ratings { "apple": { "rating": 4.6 }, "yelp": { "rating": 4.5 } } Multi-source, with attribution
phone +1 512-394-6051 Plus website and full address
amenities ["Wi-Fi", "Outdoor seating"] With price_score and open_state
weekly_hours { "monday": "7AM-7PM" } Includes timezone

Four search modes share one schema: search for listings, place for a single detailed record, guide for curated collections, and refinement for the filter options Apple offers on a query.

Who this is for

Analysts doing market mapping who need business density by category and neighborhood. Agencies running local lead generation who want phone numbers and websites in a spreadsheet instead of an app. And builders wiring agent tool calls, where an AI assistant needs a live place lookup it can trust.

The manual way, and where it breaks

The by-hand version is real: search Apple Maps, open each card, copy the name, phone, and hours into a sheet, repeat two hundred times. It breaks at volume, obviously, but the DIY scripting version breaks too. There is no public results page to parse, the web app loads everything through JavaScript, and the internal endpoints behind it are undocumented and shift without notice. I tried the copy-paste route exactly once, for a 40-listing survey, and it ate an afternoon.

The faster way: run the Apple Maps scraper

One documented input, one documented output, nothing to maintain.

Apify Console

  1. Open the Apple Maps API and click Try for free.
  2. Set search_mode to search, then fill query and location.
  3. Run it and export the dataset as JSON, CSV, or Excel.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~apple-maps-api/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "search_mode": "search", "query": "coffee", "location": "Austin, Texas, United States", "max_results": 20 }'
Enter fullscreen mode Exit fullscreen mode

Full endpoint reference: the Apify API docs.

Map a market in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/apple-maps-api").call(
    run_input={
        "search_mode": "search",
        "query": "coffee",
        "location": "Austin, Texas, United States",
        "max_results": 20,
    }
)

for page in client.dataset(run["defaultDatasetId"]).iterate_items():
    for biz in page.get("local_results", []):
        print(biz["title"], biz.get("phone"), biz.get("rating"), biz.get("open_state"))
Enter fullscreen mode Exit fullscreen mode

Coordinates work too: pass center as lat,lng with a span instead of a location name when you want a precise box.

Compare restaurant ratings across sources

Apple Maps shows ratings from several review platforms side by side, and the Actor keeps the attribution. The task Compare restaurant ratings in Austin pulls them into one table.

Extract listings with phone numbers

For outreach lists, the fields that matter are phone, website, and address. The task Extract Apple Maps business listings with phone numbers is that exact configuration.

Find coffee shop leads in Seattle

A worked local lead generation example, query plus city, ready to clone: Find coffee shop leads in Seattle.

Pull Apple's curated guides

Guide mode returns the editorial collections, publisher and all, which nothing else exports. See Find curated Apple Maps guides.

Look up one place in full detail

Place mode takes a single business and returns the deep record: hours, amenities, reviews, images. The task Get Apple Maps place details by API shows it.

Use it from Claude and other MCP clients

Through the Model Context Protocol, Claude, Claude Code, and Cursor can call the Actor mid-conversation, so "find me highly rated coffee near the convention center" triggers a live search. Setup lives in the task Search Apple Maps places from Claude via MCP, and you can read more about Claude at claude.ai.

FAQ about scraping Apple Maps

Is there a free Apple Maps API, or is a scraper the only bulk option?

Apple's own API is free within quotas once you pay for a developer membership, and it is the right choice for building map features. For bulk listing data, a scraper is the practical route, since the official API does not export search results as datasets.

What does the Apple Maps scraper cost per run?

Billing is per event: $0.02 to start, then $0.003 per business listing, $0.005 per place detail, $0.003 per guide, and $0.01 per refinement bundle. A typical 20-listing search lands around $0.10, and a misconfigured run that fails validation costs nothing.

Can I use the scraper for local lead generation?

Yes, that is the most common use I see. Search a category in a city, export title, phone, website, and address to CSV, and you have a call list with ratings attached for prioritization.

Does the Apple Maps scraper work with Claude over MCP?

It does. Connect the Apify MCP server and the Actor becomes a tool Claude can call with a plain-language request, returning live listings into the conversation.

How do I schedule the scraper to refresh a market map?

Save your query as a task and attach an Apify schedule. Each run appends a timestamped snapshot, so you can watch openings, closures, and rating drift in a category. Start from the Apple Maps API.

Where does the scraper fall short?

It returns what Apple Maps shows and nothing more. Coverage depth varies by region and category, some listings lack phones or websites, and multi-source ratings only appear where Apple licenses them. If the app shows a sparse card, you get a sparse row.

More from Truffle Pig Data

Location work usually spans sources. The Google Maps Places API cross-references the same businesses on Google's side, the Google Maps Directions API turns your list into routes and travel times, and the Apple App Store Product API covers the other half of Apple's ecosystem.

Wrapping up

Apple Maps data is genuinely good, and now it is also exportable. Run the Apple Maps API on your own city and category and see what a full market map looks like as JSON.

Top comments (0)