# App Store Email Scraper (`leads-scraper/app-store-email-scraper`) Actor

App Store Email Scraper SD - App Store Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from App Store results by keyword, location and email domain - App Store email extractor.

- **URL**: https://apify.com/leads-scraper/app-store-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### App Store Email Scraper — iOS developer contacts from Apple listings

The **App Store Email Scraper** collects the public contact addresses that iOS publishers put on their Apple App Store listings. Apple requires a reachable developer contact, which is precisely why an app-developer list built this way holds up.

Apple also does something Google Play does not: it gives many publishers a real developer page under `/developer/`. That path-based handle is why this Actor recovered account identity on 5 out of 9 rows in our measured runs — partial coverage, honestly reported.

So the shape of the output is: strong emails, partial handles. The address and the app name are the reliable columns; `username` and `profileUrl` are a bonus when Apple exposes a developer page.

#### What the App Store Email Scraper does

The App Store Email Scraper builds Google searches using the `site:` operator against `apps.apple.com` and `itunes.apple.com`, fetches result pages through the Apify **GOOGLE_SERP** proxy, and extracts email addresses from the title and snippet text of each result.

It does **not** log into Apple, use the App Store Connect API, or open the App Store in a browser. No JavaScript rendering, no authentication, no cookies.

Everything the App Store Email Scraper returns is already in Google's public index, taken from Apple's own listing and developer pages.

#### Why iOS publishers are a high-value audience

iOS developers monetise better than almost any other app segment, which makes them buyers rather than browsers. They purchase SDKs, subscription infrastructure, ASO, UA, QA, localisation and design.

Their contact details are public by store policy rather than by oversight, so an outreach list built with the App Store Email Scraper is unusually complete for the effort involved.

The App Store Email Scraper filters that population by keyword, by country and by email domain, then hands you a deduplicated dataset.

### Key features of the App Store Email Scraper

| Feature | What it means for your iOS developer contact list |
|---|---|
| Google `site:` targeting | Queries are scoped to `apps.apple.com` and `itunes.apple.com` |
| Developer-page handle parsing | Apple's `/developer/` paths yield a `username` and a matching `profileUrl` when exposed |
| Publisher-tuned modifiers | Defaults include `support`, `developer` and `publisher` — Apple's own listing vocabulary |
| Query expansion | Each keyword × domain pair runs as a base, quoted and `intitle:` query plus one variant per modifier |
| Domain filtering | Only emails ending in your `customDomains` list are kept |
| `countryCode` control | Apple serves localised storefronts, so the country code changes which publishers you reach |
| Global deduplication | An address appears once per run, across every query and page |
| Email normalisation | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and full-width `＠` |
| Junk filter | Rejects `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Discards a hit that is only the tail of another email in the same block |
| Structural parsing | Finds the `<h3>` title then the smallest surrounding block; no reliance on Google CSS classes |
| Whole-page fallback parser | A Google layout change degrades to "emails without account details", not "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries with backoff | Up to 3 attempts per page, exponential backoff, fresh proxy session per request |
| Failed-query requeue | Blocked or failed queries are retried once at the end of the run |
| Async concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Resumable state | Key-value store state keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the App Store Email Scraper works

1. The App Store Email Scraper reads your keywords, optional location, email domains and limits.
2. It composes queries such as `site:apps.apple.com OR site:itunes.apple.com photo editor developer "@gmail.com"`.
3. It fetches Google result pages asynchronously through the Apify GOOGLE_SERP proxy with `aiohttp`.
4. It parses each result block structurally, isolating the app or developer title and its snippet.
5. It applies a domain-filtered regex, normalises candidates and rejects placeholders.
6. It deduplicates globally and pushes each lead to the Apify dataset immediately.

Base queries run first, so the strongest listings arrive before the expanded long tail. A modest `maxEmails` still captures the best of a run.

The App Store Email Scraper stops as soon as your quota is met, so no proxy budget is spent on pages you will not use.

### Input reference for the App Store Email Scraper

These nine fields are the complete input surface of the App Store Email Scraper.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["app developer", "ios app"]` | Search terms: app category, vertical, technology |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; `@` optional |
| `maxEmails` | integer 1–10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE…) |
| `expandQueries` | boolean | `true` | Search each keyword × domain in several phrasings |
| `queryModifiers` | array | `["email","contact","support","developer","publisher"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1–50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1–20 | `5` | Parallel queries |

Searching `apps.apple.com` and `itunes.apple.com` together matters, because Apple's older `itunes` URLs are still indexed and still carry contact text.

#### Localised storefronts and `countryCode`

Apple runs a separate storefront per country, and Google indexes those variants separately. `countryCode` is therefore a genuine reach lever on this platform.

Run the same keywords with `US`, then `GB`, then `JP`, and the App Store Email Scraper will surface different publishers from each storefront. It widens a campaign without changing a single keyword.

Combine it with `location` when you want developers who also describe themselves as based in that market.

#### Example input for the App Store Email Scraper

```json
{
  "keywords": ["photo editor", "habit tracker", "indie game"],
  "location": "",
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 400,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "support", "developer", "publisher"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Output reference for the App Store Email Scraper

Every dataset item the App Store Email Scraper produces carries all fourteen fields.

| Field | Meaning |
|---|---|
| `network` | Platform name — `App Store` |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints (developer handle or app/publisher name) |
| `fullName` | Display name parsed from a profile-style title; empty for plain listing snippets |
| `username` | Developer-page handle when Apple exposes one; otherwise `null` |
| `profileUrl` | Canonical developer URL when a handle is known; otherwise empty |
| `url` | Direct App Store link when exposed, else the profile URL |
| `description` | Listing snippet, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain, e.g. `@gmail.com` |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output row from the App Store Email Scraper

```json
{
  "network": "App Store",
  "keyword": "habit tracker",
  "query": "site:apps.apple.com OR site:itunes.apple.com habit tracker developer \"@gmail.com\"",
  "title": "Streaklight Studio - App Store",
  "accountName": "streaklight-studio",
  "fullName": "Streaklight Studio",
  "username": "streaklight-studio",
  "profileUrl": "https://apps.apple.com/developer/streaklight-studio",
  "url": "https://apps.apple.com/developer/streaklight-studio",
  "description": "Habit and routine trackers for iPhone and Apple Watch. Support: streaklight.studio@gmail.com",
  "email": "streaklight.studio@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2026-08-31T11:52:08Z"
}
```

That is a best-case row, from a `/developer/` page. Roughly half the rows in a typical run instead land on an app listing, where `username` is `null` and `profileUrl` is empty — the email and app name are still there.

The `profileUrl` shape is `https://apps.apple.com/developer/{username}`. When it is populated, open it and verify before any outreach.

### Use cases for the App Store Email Scraper

| Use case | How the App Store Email Scraper helps |
|---|---|
| Mobile SDK and API sales | Reach iOS publishers integrating analytics, payments or crash tooling |
| ASO and UA agency prospecting | Find listings you could optimise, filtered by category and storefront |
| Subscription and monetisation outreach | Contact indie publishers weighing paywall and billing vendors |
| Localisation services | Target single-language apps with room to expand storefronts |
| Acquisition sourcing | Build a pipeline of small iOS apps and their publishers |
| Market and competitor research | Map who ships in a category and how they publish support contacts |
| Developer relations | Recruit iOS developers for betas, programmes and events |
| CRM enrichment | Attach a public contact address to publishers already in your pipeline |

Covering both mobile platforms? Run this together with the [Google Play Email Scraper](https://apify.com/leads-scraper/google-play-email-scraper). For adjacent creator marketplaces, see the [Unity Asset Store Email Scraper](https://apify.com/leads-scraper/unity-asset-store-email-scraper) or the [Shopify App Store Email Scraper](https://apify.com/leads-scraper/shopify-app-store-email-scraper).

### Tuning the App Store Email Scraper

Feed the App Store Email Scraper category vocabulary. `habit tracker`, `pdf scanner` and `roguelike` mirror how Apple listings are written; generic business terms do not.

Keep `expandQueries` on. Google caps a single query at roughly 300 results, and expansion is the mechanism built around that ceiling.

Rotate `countryCode` across storefronts. On a localised store this is the highest-leverage single change you can make to an App Store Email Scraper run.

If you want studios rather than solo developers, replace the consumer defaults in `customDomains` with corporate suffixes.

### Honest limitations of the App Store Email Scraper

- The App Store Email Scraper only finds listings whose email is **publicly visible in Google's index**. Publishers who route support only through a website form will not appear.
- Google caps a single query at roughly 300 results, which is why query expansion exists.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address. Verify those rows before sending.
- The App Store Email Scraper requires the Apify **GOOGLE_SERP** proxy and cannot run without Apify proxy credentials.
- `username` and `profileUrl` are only populated when a handle appears in Google's result. Apple exposes developer pages under `/developer/`, so handle coverage here is partial — app-listing rows keep `accountName` with an empty handle. This is a Google limitation, not a bug.
- Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.
- App Store Email Scraper results vary with keywords, domains, storefront and location. No volume is guaranteed.

### Frequently asked questions about the App Store Email Scraper

#### Does the App Store Email Scraper use App Store Connect?

No. The App Store Email Scraper never logs into Apple, never calls an Apple API and never opens the App Store in a browser. All data comes from publicly indexed Google search results.

#### Why is `username` empty on about half the App Store Email Scraper rows?

A handle is only parsed when Google's result exposes one in a URL path or a profile-style title. Apple's `/developer/` pages provide one; individual app listings generally do not, so those rows carry `accountName` with `username: null` and an empty `profileUrl`.

#### Is a row without a handle still useful?

Yes. The developer email, the app or publisher name in `accountName`, the listing snippet and a working `url` are all present. The address is what outreach actually needs.

#### Are iOS developer contacts really public?

Apple requires a reachable developer contact on store listings, which is why this audience is well covered. The App Store Email Scraper only collects what is already published and indexed.

#### Is the App Store Email Scraper affiliated with Apple?

No. The App Store Email Scraper is an independent Actor, not supported, endorsed or affiliated with Apple.

#### Why does the App Store Email Scraper search `itunes.apple.com` as well?

Older Apple app URLs on the `itunes` host remain in Google's index and still contain contact text, so including that domain widens coverage at no extra cost.

#### Does `countryCode` actually change App Store Email Scraper results?

Yes. Apple serves localised storefronts, so running `US`, `GB` and `JP` with identical keywords surfaces genuinely different publishers.

#### How many emails will one run return?

It depends on keywords, domains and storefront. Free Apify plans stop at 100 emails per run; paid plans are uncapped up to your `maxEmails`.

#### What does `possiblyTruncated` mean?

Google shortens long snippets with an ellipsis. If it touched the address, the App Store Email Scraper sets the flag to `true` so you can verify or drop the row.

#### Can I filter for studio domains instead of Gmail?

Yes. `customDomains` accepts any domains, with or without the leading `@`, and only those are kept.

#### Does an App Store Email Scraper run survive a migration?

Yes. State is stored in the key-value store keyed by a hash of your input and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING`.

#### What if Google changes its markup?

The App Store Email Scraper parses structurally rather than by CSS class name, with a whole-page fallback parser behind it. The worst case is emails without account details.

#### Can I export the leads?

Yes — the App Store Email Scraper dataset exports to CSV, JSON, Excel or the Apify API.

### Related Actors

| Actor | What it collects |
|---|---|
| [App Store Email and Phone Number Scraper](https://apify.com/leads-scraper/app-store-email-and-phone-number-scraper) | Emails and phone numbers from App Store |
| [App Store Phone Number Scraper](https://apify.com/leads-scraper/app-store-phone-number-scraper) | Public phone numbers from App Store |
| [Atlassian Marketplace Email Scraper](https://apify.com/leads-scraper/atlassian-marketplace-email-scraper) | Public contact emails from Atlassian Marketplace |
| [Bitbucket Email Scraper](https://apify.com/neuro-scraper/bitbucket-email-scraper) | Public contact emails from Bitbucket |
| [Chrome Web Store Email Scraper](https://apify.com/leads-scraper/chrome-web-store-email-scraper) | Public contact emails from Chrome Web Store |
| [CodePen Email Scraper](https://apify.com/neuro-scraper/codepen-email-scraper) | Public contact emails from CodePen |
| [Confluence Email Scraper](https://apify.com/neuro-scraper/confluence-email-scraper) | Public contact emails from Confluence |
| [Dev.to Email Scraper](https://apify.com/neuro-scraper/dev-to-email-scraper) | Public contact emails from DEV Community |
| [Docker Hub Email Scraper](https://apify.com/neuro-scraper/docker-hub-email-scraper) | Public contact emails from Docker Hub |
| [Figma Community Email Scraper](https://apify.com/neuro-scraper/figma-community-email-scraper) | Public contact emails from Figma Community |
| [Firefox Add-ons Email Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-scraper) | Public contact emails from Firefox Add-ons |
| [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper) | Public contact emails from GitHub |
| [GitLab Email Scraper](https://apify.com/neuro-scraper/gitlab-email-scraper) | Public contact emails from GitLab |
| [Google Play Email Scraper](https://apify.com/leads-scraper/google-play-email-scraper) | Public contact emails from Google Play |
| [Hashnode Email Scraper](https://apify.com/neuro-scraper/hashnode-email-scraper) | Public contact emails from Hashnode |
| [HubSpot Marketplace Email Scraper](https://apify.com/leads-scraper/hubspot-marketplace-email-scraper) | Public contact emails from HubSpot Marketplace |
| [Hugging Face Email Scraper](https://apify.com/leads-scraper/hugging-face-email-scraper) | Public contact emails from Hugging Face |
| [Jira Email Scraper](https://apify.com/neuro-scraper/jira-email-scraper) | Public contact emails from Jira |
| [Maven Central Email Scraper](https://apify.com/neuro-scraper/maven-central-email-scraper) | Public contact emails from Maven Central |
| [Microsoft AppSource Email Scraper](https://apify.com/neuro-scraper/microsoft-appsource-email-scraper) | Public contact emails from Microsoft AppSource |
| [Salesforce AppExchange Email Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) | Public contact emails from Salesforce AppExchange |
| [Shopify App Store Email Scraper](https://apify.com/leads-scraper/shopify-app-store-email-scraper) | Public contact emails from Shopify App Store |
| [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper) | Public contact emails from Slack App Directory |
| [SourceForge Email Scraper](https://apify.com/leads-scraper/sourceforge-email-scraper) | Public contact emails from SourceForge |
| [Stack Overflow Email Scraper](https://apify.com/leads-scraper/stack-overflow-email-scraper) | Public contact emails from Stack Overflow |
| [Unity Asset Store Email Scraper](https://apify.com/leads-scraper/unity-asset-store-email-scraper) | Public contact emails from Unity Asset Store |
| [Unreal Engine Marketplace Email Scraper](https://apify.com/leads-scraper/unreal-engine-marketplace-email-scraper) | Public contact emails from Unreal Engine Marketplace |
| [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) | Public contact emails from WordPress Plugin Directory |
| [WordPress Theme Directory Email Scraper](https://apify.com/leads-scraper/wordpress-theme-directory-email-scraper) | Public contact emails from WordPress Theme Directory |
| [Zapier App Directory Email Scraper](https://apify.com/leads-scraper/zapier-app-directory-email-scraper) | Public contact emails from Zapier App Directory |
| [Atlassian Marketplace Email and Phone Number Scraper](https://apify.com/neuro-scraper/atlassian-marketplace-email-and-phone-number-scraper) | Emails and phone numbers from Atlassian Marketplace |
| [Bitbucket Email and Phone Number Scraper](https://apify.com/neuro-scraper/bitbucket-email-and-phone-number-scraper) | Emails and phone numbers from Bitbucket |
| [Chrome Web Store Email and Phone Number Scraper](https://apify.com/neuro-scraper/chrome-web-store-email-and-phone-number-scraper) | Emails and phone numbers from Chrome Web Store |
| [CodePen Email and Phone Number Scraper](https://apify.com/neuro-scraper/codepen-email-and-phone-number-scraper) | Emails and phone numbers from CodePen |
| [Confluence Email and Phone Number Scraper](https://apify.com/neuro-scraper/confluence-email-and-phone-number-scraper) | Emails and phone numbers from Confluence |
| [DEV Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/dev-to-email-and-phone-number-scraper) | Emails and phone numbers from DEV Community |
| [Docker Hub Email and Phone Number Scraper](https://apify.com/neuro-scraper/docker-hub-email-and-phone-number-scraper) | Emails and phone numbers from Docker Hub |
| [Figma Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/figma-community-email-and-phone-number-scraper) | Emails and phone numbers from Figma Community |
| [Firefox Add-ons Email and Phone Number Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-and-phone-number-scraper) | Emails and phone numbers from Firefox Add-ons |
| [GitHub Email and Phone Number Scraper](https://apify.com/leads-scraper/github-email-and-phone-number-scraper) | Emails and phone numbers from GitHub |
| [GitLab Email and Phone Number Scraper](https://apify.com/neuro-scraper/gitlab-email-and-phone-number-scraper) | Emails and phone numbers from GitLab |
| [Google Play Email and Phone Number Scraper](https://apify.com/leads-scraper/google-play-email-and-phone-number-scraper) | Emails and phone numbers from Google Play |

### Leave a review

If the App Store Email Scraper saved you time, please leave a star rating and a short review on
the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, a bug report, or a custom build of the App Store Email Scraper? Email **neurodata.apify@gmail.com** and we will get back to you.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the App Store accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

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

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for App Store.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "app developer",
    "ios app"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by App Store Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "app developer",
        "ios app"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/app-store-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 = {
    "keywords": [
        "app developer",
        "ios app",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher",
    ],
}

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "app developer",
    "ios app"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call leads-scraper/app-store-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/app-store-email-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/UWyFyLeGQWgMEMydD/builds/xsRHbH9NqsPNYuCYC/openapi.json
