# Google Play Email Scraper (`leads-scraper/google-play-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/google-play-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

### Google Play Email Scraper — Android developer contact emails at scale

The **Google Play Email Scraper** targets one of the few large platforms where a public contact address is not optional. Google Play policy requires developers to publish a contact email on their store listing, so the address you want is genuinely there, in public, on nearly every app page.

That is the core reason this Actor is worth running. You are not hunting for people who happened to leak an address — you are collecting a field the platform obliges every publisher to fill in.

One thing to be clear about up front. **Google Play identifies apps through query-string ids rather than path handles, so most rows carry the developer email and app name without a profile URL.**

In our measured runs, 0 of 10 rows had a parsed account handle — yet 10 of 10 still carried a usable link. Read that as: excellent emails from the Google Play Email Scraper, weak handles.

#### What the Google Play Email Scraper does

The Google Play Email Scraper builds Google searches using the `site:` operator against `play.google.com`, fetches result pages through the Apify **GOOGLE_SERP** proxy, and extracts email addresses from the title and snippet text of each result block.

It does **not** log into Google Play, use the Play Developer API, or open the Play Store in a browser. There is no JavaScript rendering, no authentication and no cookies.

Everything the Google Play Email Scraper returns already sits in Google's public index, drawn from the store listings themselves.

#### Why Android developer contacts are worth collecting

App publishers are a dense, reachable market. They buy SDKs, analytics, crash reporting, monetisation, ASO services, localisation, QA, UA campaigns and design work.

Unlike most B2B segments, their contact details are standardised and public by policy rather than by accident. That makes an Android developer contact list built with the Google Play Email Scraper unusually complete relative to the effort involved.

The Google Play Email Scraper turns that regulatory quirk into a keyword-filtered, domain-filtered, deduplicated dataset you can push straight into a CRM.

### Key features of the Google Play Email Scraper

| Feature | What it means for your Android developer contact list |
|---|---|
| Google `site:` targeting | Queries are scoped to `play.google.com`, so results stay on store listings |
| Developer-tuned modifiers | Defaults include `support`, `developer` and `publisher` — the exact labels Play listings use |
| 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 | Play serves localised listing pages, so the country code genuinely changes which developers 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 Google Play Email Scraper works

1. The Google Play Email Scraper reads your keywords, optional location, email domains and limits.
2. It composes queries such as `site:play.google.com fitness app 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 title and its snippet.
5. It applies a domain-filtered regex, normalises candidates and drops placeholders.
6. It deduplicates globally and pushes each lead to the Apify dataset immediately.

Base queries run first, so the highest-signal listings land before the expanded long tail. Even a small `maxEmails` returns the best of the run.

The Google Play Email Scraper stops the moment your quota is filled — no wasted page fetches.

### Input reference for the Google Play Email Scraper

These nine fields are the complete input surface of the Google Play Email Scraper.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["app developer", "android 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 |

`@gmail.com` is a strong default here. A large share of independent Android developers register their Play contact address on Gmail, which makes the default domain list productive out of the box.

#### Localised listings and `countryCode`

Google Play serves a different listing page per country, and Google's own index reflects that. Setting `countryCode` is therefore a real lever, not decoration.

Run `US`, then `DE`, then `BR` with the same keywords and the Google Play Email Scraper will surface substantially different publishers. This is the cheapest way to widen a run without touching your keywords.

Pair `countryCode` with the `location` field when you want developers who also describe themselves as based in a market.

#### Example input for the Google Play Email Scraper

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

### Output reference for the Google Play Email Scraper

Every dataset item the Google Play Email Scraper produces carries all fourteen fields, whether or not a handle was parsed.

| Field | Meaning |
|---|---|
| `network` | Platform name — `Google Play` |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints (usually the app or developer name) |
| `fullName` | Display name parsed from a profile-style title; often empty on store listings |
| `username` | URL-safe handle when Play exposes one; **usually `null` here** |
| `profileUrl` | Canonical developer URL when a handle is known; otherwise empty |
| `url` | Direct Play 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 Google Play Email Scraper output row — honest about the empty handle

```json
{
  "network": "Google Play",
  "keyword": "fitness app",
  "query": "site:play.google.com fitness app developer \"@gmail.com\"",
  "title": "Runly — Interval Training - Apps on Google Play",
  "accountName": "Runly Labs",
  "fullName": "",
  "username": null,
  "profileUrl": "",
  "url": "https://play.google.com/store/apps/details?id=com.runlylabs.intervals",
  "description": "Interval running and HIIT timer. Developer contact: runlylabs.dev@gmail.com",
  "email": "runlylabs.dev@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2026-08-31T11:07:33Z"
}
```

That is the typical shape: a real developer email, a real app name in `accountName`, a working `url` — and `username: null` with an empty `profileUrl`. When a handle *is* parsed, `profileUrl` follows `https://play.google.com/store/apps/dev?id={username}`.

For outreach purposes the missing handle costs you very little. The email is the asset, and the `url` still takes you to the listing you can verify.

### Use cases for the Google Play Email Scraper

| Use case | How the Google Play Email Scraper helps |
|---|---|
| Mobile SDK and API sales | Reach Android publishers who integrate analytics, ads, payments or crash tooling |
| ASO and UA agency prospecting | Find apps whose listings you could optimise, by category and market |
| App monetisation outreach | Contact indie publishers evaluating ad networks or subscriptions |
| Localisation services | Target developers shipping in one language who could expand markets |
| Acquisition sourcing | Build a pipeline of small Android apps and their publishers |
| Market and competitor research | Map who publishes in a category and how they present contact details |
| Developer relations | Recruit Android developers for betas, programmes and events |
| CRM enrichment | Attach a policy-published contact address to publishers you already track |

Running iOS as well? Pair this with the [App Store Email Scraper](https://apify.com/leads-scraper/app-store-email-scraper) for cross-platform coverage, and with the [Chrome Web Store Email Scraper](https://apify.com/leads-scraper/chrome-web-store-email-scraper) if your product also serves extension developers.

### Tuning the Google Play Email Scraper

Give the Google Play Email Scraper category terms, not intent phrases. `puzzle game`, `meditation app` and `pos terminal app` match how listings are written; `looking for developers` does not.

Keep `expandQueries` on. Google caps a single query at roughly 300 results, and expansion is the designed workaround.

Rotate `countryCode` across your target markets. On a localised store this multiplies Google Play Email Scraper reach more reliably than adding more keywords.

Widen `customDomains` beyond Gmail and Yahoo if you want studios rather than solo developers — corporate domains skew toward larger publishers.

### Honest limitations of the Google Play Email Scraper

- **Google Play identifies apps through query-string ids rather than path handles, so most rows carry the developer email and app name without a profile URL.** Expect `username: null` on the large majority of rows.
- The Google Play Email Scraper only finds listings whose email is **publicly visible in Google's index**. Play policy makes that common, but indexation is still the gate.
- 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 Google Play 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. On Play that is rare, so rows typically carry `accountName` with an empty handle — a Google limitation, not a bug.
- Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.
- Google Play Email Scraper results vary with keywords, domains, country and location. No volume is guaranteed.

### Frequently asked questions about the Google Play Email Scraper

#### Does the Google Play Email Scraper use the Play Developer API?

No. The Google Play Email Scraper never logs in, never calls a Google Play API and never opens the store in a browser. All data comes from publicly indexed Google search results.

#### Why is `username` almost always empty on Google Play?

Google Play identifies apps through query-string ids rather than path handles. The Google Play Email Scraper parses a handle only when it appears in a URL path or a profile-style title, and Play's `?id=` URLs do not provide one — so most rows carry the developer email and app name without a profile URL.

#### If `username` is empty, is the row still useful?

Yes, and this is the important part. In our measured runs every Google Play Email Scraper row still carried a usable `url` to the listing, plus the developer email and the app name in `accountName`. The email is the asset.

#### Are Android developer emails really public?

Google Play requires developers to publish a contact email on their store listing, which is exactly why the Google Play Email Scraper works well. It collects only what is already published and indexed.

#### Is the Google Play Email Scraper affiliated with Google?

No. The Google Play Email Scraper is an independent Actor, not supported, endorsed or affiliated with Google.

#### Does `countryCode` actually change Google Play Email Scraper results?

Yes. Google Play serves localised listing pages, so running the same keywords with `US`, `DE` and `IN` surfaces meaningfully different developers.

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

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

#### What does `possiblyTruncated` mean?

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

#### Can I target studio domains instead of Gmail?

Yes. Put any domains into `customDomains`, with or without the leading `@`. Only those are kept.

#### Does a Google Play Email Scraper run survive a migration?

Yes. State is held 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 result markup?

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

#### Can I export the leads?

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

### Related Actors

| Actor | What it collects |
|---|---|
| [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 |
| [Google Play Phone Number Scraper](https://apify.com/leads-scraper/google-play-phone-number-scraper) | Public phone numbers from Google Play |
| [App Store Email Scraper](https://apify.com/leads-scraper/app-store-email-scraper) | Public contact emails 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 |
| [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 |
| [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 |
| [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 |

### Leave a review

If the Google Play 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 Google Play Email Scraper? Email **neurodata.apify@gmail.com** and we will get back to you.

# Actor input Schema

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

Search terms describing the Google Play 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 Google Play.

## `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",
    "android 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 Google Play 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",
        "android 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/google-play-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",
        "android 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/google-play-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",
    "android app"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call leads-scraper/google-play-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/google-play-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/qJVQAXICq4aLhKSPd/builds/ueMQvKW6A3x8ILhBw/openapi.json
