# Apple Maps Business Leads & Email Scraper (`gorajing/apple-maps-email-scraper`) Actor

Find Apple Maps businesses and source-linked public emails from their official websites.

- **URL**: https://apify.com/gorajing/apple-maps-email-scraper.md
- **Developed by:** [Jin Choi](https://apify.com/gorajing) (community)
- **Categories:** Lead generation, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 places

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### What does Apple Maps Business Leads & Email Scraper do?

**Apple Maps Business Leads & Email Scraper** finds public business listings on [Apple Maps](https://maps.apple.com) by business query and location. It returns structured place data such as business name, category, address, phone, website, coordinates, ratings, and a canonical Apple Maps URL.

When contact enrichment is enabled, the Actor visits the business website and extracts only email addresses that are explicitly published on accessible pages. Every email includes its source URL and nearby evidence text. The Actor does not infer, generate, or guess email addresses.

Runs can be started from Apify Console or through the Apify API, schedules, webhooks, MCP, and integrations. The default input returns five New York coffee-shop records and is designed to finish quickly without credentials.

### Why use Apple Maps Business Leads & Email Scraper?

Use the Actor to:

- build location-specific business datasets from Apple Maps;
- research local markets and business categories;
- audit business listing details across locations;
- enrich public business records with source-linked contact information;
- export structured records to JSON, CSV, Excel, or other Apify-supported formats;
- feed lawful research, CRM review, or data-quality workflows.

The output is designed to remain inspectable. A discovered email is never presented without the page on which it was published.

### How to use Apple Maps Business Leads & Email Scraper

1. Open the **Input** tab.
2. Add one or more objects containing a business `query` and `location`.
3. Choose the maximum number of results per search.
4. Leave **Find public business emails** enabled if you want website enrichment.
5. Set the maximum website pages fetched per business. Two is the recommended default.
6. Click **Start**.
7. Download the resulting dataset or consume it through the Apify API.

No Apple account, cookies, API token, or customer credentials are required.

### Input

| Field                | Type    |                      Default | Description                                                       |
| -------------------- | ------- | ---------------------------: | ----------------------------------------------------------------- |
| `searchQueries`      | array   | coffee shops in New York, NY | Up to 10 business query/location pairs.                           |
| `maxResultsPerQuery` | integer |                            5 | Maximum unique places per pair, from 1 to 100.                    |
| `countryCode`        | string  |                         `US` | Two-letter ISO country code used to localize results.             |
| `enrichContacts`     | boolean |                       `true` | Whether to inspect public business websites for published emails. |
| `maxWebsitePages`    | integer |                            2 | Maximum pages fetched per website, from 1 to 5.                   |

Example input:

```json
{
    "searchQueries": [
        {
            "query": "pet groomers",
            "location": "Austin, Texas"
        }
    ],
    "maxResultsPerQuery": 25,
    "countryCode": "US",
    "enrichContacts": true,
    "maxWebsitePages": 2
}
````

### Output

Each dataset item represents one unique Apple Maps place. A simplified item looks like this:

```json
{
    "stableId": "9902:1234567890123456789",
    "placeId": "I112210F47DE98115",
    "name": "Example Coffee",
    "primaryCategory": "Cafe",
    "categories": ["Cafe", "Bakery"],
    "address": "100 Example St, Austin, TX 78701, United States",
    "phone": "+1 (512) 555-0100",
    "website": "https://example-coffee.test",
    "latitude": 30.2672,
    "longitude": -97.7431,
    "rating": 4.7,
    "reviewCount": 128,
    "appleMapsUrl": "https://maps.apple.com/place?place-id=I112210F47DE98115",
    "searchTerm": "pet groomers",
    "location": "Austin, Texas",
    "emails": ["hello@example-coffee.test"],
    "primaryBusinessEmail": "hello@example-coffee.test",
    "emailSources": ["https://example-coffee.test/contact"],
    "emailEvidence": [
        {
            "email": "hello@example-coffee.test",
            "evidenceUrl": "https://example-coffee.test/contact",
            "evidenceText": "Business inquiries: hello@example-coffee.test",
            "sourceType": "visible-text"
        }
    ],
    "websitePagesFetched": 2,
    "scrapedAt": "2026-07-15T02:00:00.000Z"
}
```

You can download the dataset in formats including JSON, CSV, Excel, XML, RSS, and HTML.

### Data table

| Field                                         | Description                                                        |
| --------------------------------------------- | ------------------------------------------------------------------ |
| `stableId`                                    | Deduplication key formed from Apple Maps provider ID and MUID.     |
| `placeId`                                     | Public Apple Maps place identifier.                                |
| `name`                                        | Business name.                                                     |
| `primaryCategory`, `categories`               | Apple Maps business categories.                                    |
| `address`                                     | Formatted postal address.                                          |
| `city`, `region`, `postalCode`, `countryCode` | Structured address fields when available.                          |
| `latitude`, `longitude`                       | Listing coordinates.                                               |
| `phone`, `website`                            | Public listing contact fields.                                     |
| `rating`, `reviewCount`, `priceLevel`         | Rating and price metadata when available.                          |
| `appleMapsUrl`                                | Canonical public Apple Maps place URL.                             |
| `emails`                                      | Deduplicated emails explicitly published on fetched website pages. |
| `emailSources`                                | Pages on which emails were found.                                  |
| `emailEvidence`                               | Email, source URL, nearby text, and extraction type.               |
| `websitePagesFetched`                         | Number of successful website pages inspected.                      |
| `scrapedAt`                                   | UTC collection timestamp.                                          |

### How much does it cost to scrape Apple Maps business leads?

The Actor uses mutually exclusive pay-per-event charges:

| Event                  |  Price | Charged when                                                            |
| ---------------------- | -----: | ----------------------------------------------------------------------- |
| `place`                | $0.003 | A usable place is emitted without a discovered email.                   |
| `email-enriched-place` | $0.033 | A usable place is emitted with at least one source-linked public email. |

An item is never charged under both events. Failed requests, duplicates, unusable records, and enrichment attempts that find no email do not receive an email-enrichment charge. Apify may add its small automatic Actor-start event according to current platform rules.

Example totals including a $0.00005 automatic start event:

- Five places with no emails: approximately **$0.01505**.
- Five email-enriched places: approximately **$0.16505**.
- One hundred places with 30 email-enriched records: approximately **$1.20005**.

### Tips and advanced options

- Start with five to 25 results to confirm that your query and location produce the intended businesses.
- Use precise business categories and recognizable city or regional names.
- Keep `maxWebsitePages` at two unless deeper enrichment is worth the added time.
- Disable `enrichContacts` when you only need Apple Maps place data.
- Split broad geographic research into smaller query/location pairs for clearer coverage.
- Deduplicate downstream records with `stableId`, not business name alone.

### FAQ, disclaimers, and support

#### Does the Actor guess emails?

No. It extracts `mailto:` links, visible email text, and clearly written `[at]` / `[dot]` obfuscations. It does not generate name-and-domain combinations or infer addresses.

#### Why does a record have no email?

A listing may have no website, point to a third-party directory, block automated requests, time out, or simply not publish an email. The base Apple Maps record is still emitted with empty email arrays.

#### Does this return every business in a region?

No scraper can guarantee exhaustive Apple Maps coverage. Apple Maps returns ranked, viewport-dependent results. The Actor subdivides saturated map regions and deduplicates places, but dense areas can still be truncated by source limits or the configured result cap.

#### Is this an official Apple product?

No. This is an independent Actor and is not affiliated with, endorsed by, or sponsored by Apple Inc. Apple, Apple Maps, and related marks belong to their respective owners. The Actor does not use Apple branding or logos.

#### Is scraping legal?

Public-data rules vary by jurisdiction and use case. You are responsible for complying with applicable law, source terms, privacy obligations, marketing rules, and website restrictions. Do not use the Actor for harassment, prohibited profiling, unsolicited mass messaging, or unlawful contact campaigns.

For bugs or extraction issues, open an issue on the Actor’s **Issues** tab with a non-sensitive example input and run ID. Do not include private credentials or personal data.

# Actor input Schema

## `searchQueries` (type: `array`):

Add up to 10 business query and location pairs. Example: coffee shops in New York, NY.

## `maxResultsPerQuery` (type: `integer`):

Maximum unique Apple Maps places emitted for each query/location pair.

## `countryCode` (type: `string`):

Two-letter ISO country code used to localize Apple Maps results.

## `enrichContacts` (type: `boolean`):

Visit official business websites and extract only explicitly published emails with evidence URLs. Emails are never guessed.

## `maxWebsitePages` (type: `integer`):

Maximum official website pages fetched per place, including the homepage.

## Actor input object example

```json
{
  "searchQueries": [
    {
      "query": "coffee shops",
      "location": "New York, NY"
    }
  ],
  "maxResultsPerQuery": 5,
  "countryCode": "US",
  "enrichContacts": true,
  "maxWebsitePages": 2
}
```

# Actor output Schema

## `results` (type: `string`):

One item per unique Apple Maps place.

## `summary` (type: `string`):

Counts for searched, emitted, enriched, and charge-limited records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        {
            "query": "coffee shops",
            "location": "New York, NY"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gorajing/apple-maps-email-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "searchQueries": [{
            "query": "coffee shops",
            "location": "New York, NY",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("gorajing/apple-maps-email-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    {
      "query": "coffee shops",
      "location": "New York, NY"
    }
  ]
}' |
apify call gorajing/apple-maps-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=gorajing/apple-maps-email-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apple Maps Business Leads & Email Scraper",
        "description": "Find Apple Maps businesses and source-linked public emails from their official websites.",
        "version": "0.1",
        "x-build-id": "wnQllb8OBMmGCPFGC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/gorajing~apple-maps-email-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-gorajing-apple-maps-email-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/gorajing~apple-maps-email-scraper/runs": {
            "post": {
                "operationId": "runs-sync-gorajing-apple-maps-email-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/gorajing~apple-maps-email-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-gorajing-apple-maps-email-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Business searches",
                        "minItems": 1,
                        "maxItems": 10,
                        "type": "array",
                        "description": "Add up to 10 business query and location pairs. Example: coffee shops in New York, NY.",
                        "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "query": {
                                    "title": "Business query",
                                    "description": "Business category or keyword to find, such as coffee shops, plumbers, or pet groomers.",
                                    "type": "string",
                                    "minLength": 2,
                                    "maxLength": 200
                                },
                                "location": {
                                    "title": "Location",
                                    "description": "City, region, or other geographic area, such as New York, NY or Austin, Texas.",
                                    "type": "string",
                                    "minLength": 2,
                                    "maxLength": 200
                                }
                            },
                            "required": [
                                "query",
                                "location"
                            ]
                        },
                        "default": [
                            {
                                "query": "coffee shops",
                                "location": "New York, NY"
                            }
                        ]
                    },
                    "maxResultsPerQuery": {
                        "title": "Maximum results per search",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum unique Apple Maps places emitted for each query/location pair.",
                        "default": 5
                    },
                    "countryCode": {
                        "title": "Country code",
                        "pattern": "^[A-Za-z]{2}$",
                        "minLength": 2,
                        "maxLength": 2,
                        "type": "string",
                        "description": "Two-letter ISO country code used to localize Apple Maps results.",
                        "default": "US"
                    },
                    "enrichContacts": {
                        "title": "Find public business emails",
                        "type": "boolean",
                        "description": "Visit official business websites and extract only explicitly published emails with evidence URLs. Emails are never guessed.",
                        "default": true
                    },
                    "maxWebsitePages": {
                        "title": "Website pages per business",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Maximum official website pages fetched per place, including the homepage.",
                        "default": 2
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
