# App Developer Leads: Google Play & App Store Emails (`axlymxp/app-developer-leads`) Actor

Find app developers on Google Play and the App Store by keyword or top chart and export their public email, phone, street address, website and app portfolio. One row per developer, ready for outreach. No login or cookies. Pay only for leads you get.

- **URL**: https://apify.com/axlymxp/app-developer-leads.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 dataset items

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/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 Developer Leads: Google Play & App Store Emails

Find mobile app developers on **Google Play** and the **Apple App Store** and export their **public business email,
phone number, street address, website and app portfolio** in one table. Type a niche ("habit tracker", "crypto wallet",
"photo editor"), pick top charts ("Top grossing puzzle games"), or paste app and developer links. The actor opens each
app, reads the contact details the developer publishes on the store and returns one clean row per developer.

Built for app marketing and user-acquisition agencies, ad networks and SDK vendors, ASO tools, localisation and QA
studios, app-acquisition funds and B2B SaaS teams that sell to app publishers. No account, cookies or browser needed.

### Where the contacts come from

- **Google Play** shows an "About the developer" block on every app: the developer's support email and, for developers
  registered as traders, their legal name, email, street address and phone number.
- **App Store** shows the same trader details (address, phone, email, and often the D-U-N-S number) on its European
  storefronts, as required by the EU Digital Services Act. The actor reads them from the EU store page even when you
  search the US store. Apps not sold in the EU only have the developer website.

In our tests (October 2026): on Google Play every app had an email and almost every one an address; 404 of 500
developers from eight top charts had a phone number. On the App Store, apps sold in Europe usually show the full trader
block; apps sold only in the US do not.

### What you get

One row per developer (default) or one row per app.

| Field | Example | Notes |
|---|---|---|
| `store` | `Google Play` | `Google Play` or `App Store` |
| `developer_name`, `developer_id`, `developer_url` | `Example Apps`, `6957685454452609502` | store developer page |
| `email`, `emails` | `hello@example.com` | best email first, then every other email found |
| `phone` | `+1 412-555-0100` | trader phone (or from the website when `scrapeWebsites` is on) |
| `address`, `address_country` | `100 Main St, Pittsburgh, PA 15206, United States`, `US` | published trader address and its ISO country code |
| `website` | `https://example.com` | developer website from the store |
| `duns` | `765359694` | App Store only, when published |
| `trader_name`, `is_trader` | `Example Apps Inc.`, `true` | legal entity behind the apps |
| `support_email`, `privacy_policy_url` | | Google Play |
| `app_count`, `apps` | `12`, `[{title, url, genre, installs, score, ratings}]` | the developer's portfolio (up to 20 apps listed) |
| `top_app_title`, `top_app_url`, `genres` | | most installed (Play) or most rated (App Store) app |
| `max_installs` | `10000000` | Google Play: install band of the biggest app |
| `total_ratings` | `297055` | App Store: ratings summed over the portfolio |
| `lead_app_*` | | the app that surfaced this developer (title, URL, genre, installs, ratings, score) |
| `website_emails`, `website_phones`, `social_links` | `{"linkedin": "...", "twitter": "..."}` | only with `scrapeWebsites` |
| `source` | `chart:top_grossing:GAME_PUZZLE` | the keyword, chart or URL list that found the developer |
| `has_email`, `has_phone` | `true` | easy filtering |

In **One row per app** mode each row also carries the app's title, URL, genre, installs, ratings, score, price,
release and update dates, ads and in-app purchase flags, content rating, icon and description.

### Use cases

- **App marketing and UA agencies**: build outreach lists of studios in a genre, filtered by installs or ratings.
- **Ad networks, mediation and SDK vendors**: reach every publisher in the top grossing charts of a category.
- **ASO, analytics and attribution tools**: prospect developers whose apps rank for your keywords.
- **Localisation, QA and dev shops**: find publishers in a country (`addressCountries`) to pitch services.
- **App acquisition and investors**: list indie developers with a successful app and a small portfolio.
- **Market research**: map who publishes in a niche, where they are based and how big their portfolios are.

### Input

| Parameter | Description |
|---|---|
| `searchTerms` | Keywords to search in each selected store. Google Play returns about 30 apps per keyword, the App Store up to 200. |
| `stores` | Google Play, App Store or both (default both; results are interleaved). |
| `playCategories`, `appStoreGenres`, `chartTypes` | Top charts to read: Google Play gives up to 200 apps per chart, the App Store 100. Chart types: top free, top grossing, top paid. |
| `appUrls` | App links, package names (`com.example.app`) or App Store ids. |
| `developerUrls` | Developer pages: every app of that developer is checked. |
| `country` | Store country for search and charts (`us`, `gb`, `de`, `in`...). |
| `maxLeads` | Total rows to return. |
| `outputMode` | One row per developer or one row per app. |
| `onlyWithContacts` | Skip developers without email and phone (default on). Skipped developers are not charged. |
| `requireEmail` | Only developers with an email. |
| `minInstalls` | Google Play only: skip smaller apps, e.g. `100000`. |
| `minRatings` | Skip apps with fewer ratings (both stores). |
| `addressCountries` | Keep only developers whose published address is in these countries (`US`, `GB`, `Germany`...). |
| `includePortfolio` | Add the developer's app count, top apps and genres (default on). |
| `expandSimilarApps` | Also check the same-genre "similar apps" of every app to find more developers in the niche. |
| `expandSearchTerms` | Also search Google Play's autocomplete suggestions for each keyword. |
| `scrapeWebsites` | Visit each developer website for extra emails, phone numbers and social profiles. Slower. |
| `proxyConfiguration` | Optional. Not needed in normal use; the actor switches to Apify datacenter proxy by itself if a store starts refusing requests. Choose Residential here if you need it. |

#### Example input

```json
{
    "searchTerms": ["habit tracker", "meditation"],
    "stores": ["googlePlay", "appStore"],
    "playCategories": ["HEALTH_AND_FITNESS"],
    "appStoreGenres": ["health_and_fitness"],
    "chartTypes": ["top_grossing"],
    "country": "us",
    "maxLeads": 500,
    "minRatings": 100,
    "onlyWithContacts": true
}
```

#### Example output

```json
{
    "store": "Google Play",
    "developer_name": "Example Apps",
    "developer_url": "https://play.google.com/store/apps/dev?id=1234567890123456789",
    "email": "hello@example.com",
    "emails": ["hello@example.com", "support@example.com"],
    "phone": "+1 412-555-0100",
    "address": "100 Main St\nPittsburgh, PA 15206\nUnited States",
    "address_country": "US",
    "website": "https://example.com",
    "trader_name": "Example Apps Inc.",
    "is_trader": true,
    "app_count": 3,
    "top_app_title": "Habit Tracker - Example",
    "max_installs": 500000,
    "genres": ["Productivity", "Health & Fitness"],
    "lead_app_title": "Habit Tracker - Example",
    "lead_app_ratings": 12011,
    "source": "search:habit tracker",
    "has_email": true,
    "has_phone": true
}
```

### Scheduling and integrations

Schedule the actor weekly on a top chart to catch new developers entering it, then send new rows to Google Sheets,
HubSpot, Salesforce, Airtable or Slack with Apify integrations, Zapier or Make, or read the dataset over the Apify API.
Checkpoints let an interrupted run resume without duplicate rows.

### Use with AI assistants (MCP)

Call this actor from Claude, ChatGPT or Cursor through the [Apify MCP server](https://mcp.apify.com) and ask, for
example, "find 100 developers of top grossing puzzle games with an email and a US address".

### FAQ

**Where does the data come from?** Only from public store pages and Apple's public iTunes Search API: the contact
details developers publish on Google Play and the App Store. No login, no private data.

**Why do some App Store developers have no address or phone?** Apple shows trader details only on its European
storefronts, and only for developers who registered as traders. Apps that are not sold in the EU have just a website.
Turn on `scrapeWebsites` to look for an email on that website.

**How many results can I get?** Google Play search returns about 30 apps per keyword and charts up to 200 apps; App
Store search up to 200 and charts 100. Use several keywords, more categories, more chart types or `expandSimilarApps`
for bigger lists. Developers are deduplicated across sources.

**Is it legal?** The actor collects business contact details that developers publish for their customers. You are
responsible for using them in line with the laws that apply to you (GDPR, CAN-SPAM and similar), for example by
contacting businesses about relevant offers and honouring opt-outs.

**What am I charged for?** A small start fee, each row, and each developer with an email or phone (once per
developer). Developers skipped by your filters are not charged. Prices are on the Pricing tab.

**Something broke?** Open an issue on the Issues tab with your input and run link and it will be looked at quickly.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search in each selected store, e.g. 'habit tracker', 'crypto wallet', 'photo editor'. Google Play returns about 30 apps per keyword, the App Store up to 200.

## `stores` (type: `array`):

Which stores to search.

## `playCategories` (type: `array`):

Add developers from Google Play top charts in these categories (up to 200 apps per chart).

## `appStoreGenres` (type: `array`):

Add developers from App Store top charts in these genres (up to 100 apps per chart).

## `chartTypes` (type: `array`):

Which top charts to read for the categories and genres above.

## `appUrls` (type: `array`):

Google Play or App Store app links, package names (com.example.app) or App Store ids (570060128).

## `developerUrls` (type: `array`):

Developer pages: every app of that developer is checked. Google Play (play.google.com/store/apps/dev?id=... or developer?id=...) or App Store (apps.apple.com/.../developer/.../id...).

## `country` (type: `string`):

Store country for search and charts: a two-letter code (us, gb, de, in) or an English name such as USA, UK or Germany.

## `maxLeads` (type: `integer`):

Maximum rows to output. You pay per row.

## `outputMode` (type: `string`):

One row per developer (with a summary of their apps) or one row per app (with its developer's contacts).

## `onlyWithContacts` (type: `boolean`):

Skip developers that show no email and no phone number.

## `requireEmail` (type: `boolean`):

Skip developers without an email address.

## `minInstalls` (type: `integer`):

Skip Google Play apps below this install count, e.g. 100000. Not applied to App Store apps (Apple hides installs).

## `minRatings` (type: `integer`):

Skip apps with fewer ratings than this, in both stores.

## `addressCountries` (type: `array`):

Keep only developers whose published address is in these countries: two-letter codes (US, GB, DE) or English names. Developers without an address are skipped when this is set.

## `includePortfolio` (type: `boolean`):

Add the developer's app count, top apps, genres, max installs (Google Play) and total ratings (App Store). One extra request per developer.

## `expandSimilarApps` (type: `boolean`):

Queue the 'Similar apps' of every app checked (same genre only) to find more developers in the niche.

## `expandSearchTerms` (type: `boolean`):

Also search up to 5 Google Play autocomplete suggestions per keyword.

## `scrapeWebsites` (type: `boolean`):

Visit each developer website (homepage and one contact page) for extra emails, phone numbers and social profiles (LinkedIn, X, Facebook, Instagram...). Slower.

## `proxyConfiguration` (type: `object`):

Optional. The actor works without a proxy and switches to Apify datacenter proxy by itself if the stores start refusing requests.

## Actor input object example

```json
{
  "searchTerms": [
    "habit tracker",
    "budget planner"
  ],
  "stores": [
    "googlePlay",
    "appStore"
  ],
  "chartTypes": [
    "top_free",
    "top_grossing"
  ],
  "appUrls": [
    "https://play.google.com/store/apps/details?id=com.duolingo",
    "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128"
  ],
  "developerUrls": [
    "https://play.google.com/store/apps/dev?id=6957685454452609502"
  ],
  "country": "us",
  "maxLeads": 20,
  "outputMode": "developers",
  "onlyWithContacts": true,
  "requireEmail": false,
  "minInstalls": 0,
  "minRatings": 0,
  "includePortfolio": true,
  "expandSimilarApps": false,
  "expandSearchTerms": false,
  "scrapeWebsites": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchTerms": [
        "habit tracker"
    ],
    "stores": [
        "googlePlay",
        "appStore"
    ],
    "maxLeads": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/app-developer-leads").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 = {
    "searchTerms": ["habit tracker"],
    "stores": [
        "googlePlay",
        "appStore",
    ],
    "maxLeads": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/app-developer-leads").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 '{
  "searchTerms": [
    "habit tracker"
  ],
  "stores": [
    "googlePlay",
    "appStore"
  ],
  "maxLeads": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call axlymxp/app-developer-leads --silent --output-dataset

```

## MCP server setup

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

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/yhkuv8rHWANik5fM7/builds/t1bfH6rpFfi1wbgic/openapi.json
