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

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

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

### Shopify App Store Email Scraper — developer contacts from the Shopify app ecosystem

The **Shopify App Store Email Scraper** builds a dataset of publicly indexed contact emails for the companies and developers who publish apps on `apps.shopify.com`.
You give it keywords and email domains; it gives you emails, account names, listing URLs and the snippet each address came from.

The Shopify app ecosystem is a B2B market, not a consumer one.
App listings carry support and partnership addresses because merchants, agencies and integration partners are expected to write to them.
That is exactly the population the Shopify App Store Email Scraper is designed to surface.

There is no export button on the Shopify App Store, and no public directory of app developer contacts.
The Shopify App Store Email Scraper closes that gap using nothing but publicly indexed Google results.

#### What the Shopify App Store Email Scraper does and does not do

The Shopify App Store Email Scraper builds Google queries with the `site:apps.shopify.com` operator, fetches the result pages, and extracts emails from the titles and snippets.
Each unique address is deduplicated and pushed into an Apify dataset as soon as it is found.

The Shopify App Store Email Scraper does **not** log into Shopify, use the Shopify Partner or Admin API, or open the App Store in a browser.
No JavaScript rendering, no authentication, no cookies — only what Google has already indexed publicly.

#### Who uses this Shopify app developer contact tool

Partnership teams at ecommerce SaaS companies run the Shopify App Store Email Scraper to recruit integration partners.
Shopify agencies use it to source app vendors for a client stack or a replatforming project.

Investors and analysts map the Shopify app vendor landscape by category.
Marketers point the Shopify App Store Email Scraper at complementary categories for co-marketing outreach to Shopify app publishers.

Adjacent ecosystems often overlap: the [Chrome Web Store Email Scraper](https://apify.com/leads-scraper/chrome-web-store-email-scraper) and the [Salesforce AppExchange Email Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) reach many of the same commerce-tooling companies from a different angle.

### Key features of the Shopify App Store Email Scraper

Everything listed here is behaviour the Shopify App Store Email Scraper genuinely implements.

| Feature | What it means in practice |
|---|---|
| `site:` scoping | Every query is locked to `apps.shopify.com`, so results stay inside the Shopify App Store |
| Query expansion | Each keyword × domain pair runs as a base query, a quoted query, an `intitle:` query, plus one variant per query modifier |
| Domain-filtered extraction | Only emails on the domains you list are kept — you decide the shape of the output |
| Global deduplication | An email appears once per run, no matter how many queries or pages surfaced it |
| Obfuscation handling | Reads `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Discards placeholders such as `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 | Drops a hit that is only the tail of another email in the same block |
| Structural parsing | Finds the `<h3>` title and the smallest surrounding block rather than trusting Google's CSS class names |
| Whole-page fallback | 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 instead of counted as empty |
| Retries with backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| End-of-run requeue | Blocked or failed queries get one more pass before the run finishes |
| Resumable state | Progress lives in the key-value store, keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Async concurrency | An `asyncio` worker pool with a shared stop signal when `maxEmails` is reached |
| Run summary | Pages fetched, blocked pages, retries and emails per page are logged |

### How the Shopify App Store Email Scraper works

Six steps, start to finish.

1. The Shopify App Store Email Scraper reads your input: keywords, location, email domains and limits.
2. It composes Google queries using the `site:` operator against `apps.shopify.com`, for example `site:apps.shopify.com shopify app support "@gmail.com"`.
3. It fetches result pages through the Apify **GOOGLE_SERP** proxy with async `aiohttp`.
4. It parses each result block structurally, locating the `<h3>` title and the tightest block around it.
5. It extracts emails from that block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the dataset straight away.

#### Beating Google's per-query ceiling

Google returns roughly 300 results for a single query, no matter how many apps match.
The Shopify App Store is much larger than that, so one query can never see the whole catalogue.

Query expansion is the answer.
The Shopify App Store Email Scraper turns each keyword into several phrasings and pairs it with each modifier, so a swarm of narrow queries covers far more ground than one broad one.

### Input settings for the Shopify App Store Email Scraper

Nine fields drive the Shopify App Store Email Scraper. Only `keywords` is required; every other field ships with a working default.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["shopify app", "app developer"]` | Search terms describing the accounts you want (niche, job title, industry) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are collected; the leading `@` is optional |
| `maxEmails` | integer 1–10000 | `20` | Stop once this many unique emails have been collected |
| `countryCode` | string | `""` | Two-letter country code for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword × domain pair 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` | How many queries run in parallel |

#### Example input for a Shopify app publisher email run

```json
{
  "keywords": ["shopify app", "shopify subscriptions app", "shopify upsell app"],
  "location": "",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 300,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "support", "developer", "publisher"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Start with a `maxEmails` of 20–50 on a new keyword set.
A short Shopify App Store Email Scraper probe tells you whether the niche is well indexed before you commit compute to a long run.

### Output fields from the Shopify App Store Email Scraper

Each dataset item the Shopify App Store Email Scraper writes carries all fourteen fields. Keys are always present; some values are conditional.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for non-profile results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical listing URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or snippet text, 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 — verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output row

```json
{
  "network": "Shopify App Store",
  "keyword": "shopify subscriptions app",
  "query": "site:apps.shopify.com shopify subscriptions app contact \"@gmail.com\"",
  "title": "Recharge Boxes - Subscriptions | Shopify App Store",
  "accountName": "Boxwell Commerce",
  "fullName": "Boxwell Commerce",
  "username": "recharge-boxes",
  "profileUrl": "https://apps.shopify.com/recharge-boxes",
  "url": "https://apps.shopify.com/recharge-boxes",
  "description": "Recurring orders and subscription boxes for Shopify merchants. Partnerships: hello.boxwell@gmail.com",
  "email": "hello.boxwell@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2025-04-18T11:02:53Z"
}
```

Export what the Shopify App Store Email Scraper collects as CSV, JSON, Excel or XML, or read it through the Apify API into your CRM.

### Use cases for the Shopify App Store Email Scraper

The Shopify App Store is a vendor marketplace, so these use cases sit in partnership and sourcing work rather than consumer prospecting.

| Use case | How the Shopify App Store Email Scraper helps |
|---|---|
| Integration partner recruitment | Find app publishers in adjacent categories and reach the address they publish for partnerships |
| Agency vendor sourcing | Build a Shopify app vendor list for a client's checkout, subscriptions or logistics stack |
| Co-marketing outreach | Identify complementary Shopify app developers for joint webinars, guides or bundles |
| Competitive research | See which vendors publish in your category and how they position their listings |
| Ecosystem mapping | Sample a category by keyword to gauge how crowded a Shopify app niche is |
| Investor and M\&A screening | Assemble a contact layer over a category map of the Shopify app ecosystem |
| Recruiting and hiring | Reach small app teams who publish a contact address on their listing |
| CRM enrichment | Match scraped Shopify app publisher emails against accounts you already track |

#### Worked example: mapping the checkout and upsell category

Set `keywords` to `["shopify upsell app", "shopify checkout app", "post purchase app"]`.
Leave `expandQueries` on so each keyword also runs with `email`, `contact`, `support`, `developer` and `publisher`.

Set `customDomains` to `["@gmail.com", "@outlook.com", "@hotmail.com"]` if you are after independent developers.
Add a corporate-style domain instead when you want established vendors with branded mailboxes.

Run the Shopify App Store Email Scraper once at `maxEmails: 30` to sanity-check the category, then again at your real target.
The second Shopify App Store Email Scraper run reuses the same expansion plan, so the cost of the probe is small.

### Tips for getting more from the Shopify App Store Email Scraper

Category keywords beat generic ones.
"shopify loyalty app" is worth far more to the Shopify App Store Email Scraper than "app".

Treat `customDomains` as a segmentation lever.
Free-mail domains lean towards solo developers and small studios; branded domains lean towards funded vendors.

Set `countryCode` when you want a regional slice of the Shopify partner ecosystem.
Pair it with `location` for a tighter geographic focus.

Do not push `maxConcurrency` for its own sake.
More parallel queries will not make the Shopify App Store Email Scraper find emails that are not in the index — it only burns proxy budget faster.

Schedule the Shopify App Store Email Scraper monthly with a stable input.
New apps get indexed continuously, so repeat runs keep a Shopify app developer contact list current.

If you work across ecommerce and SaaS marketplaces, run the [HubSpot Marketplace Email Scraper](https://apify.com/leads-scraper/hubspot-marketplace-email-scraper) and the [Zapier App Directory Email Scraper](https://apify.com/leads-scraper/zapier-app-directory-email-scraper) with the same keywords.
Many Shopify app vendors also list in both places under a different public identity.

### Limitations of the Shopify App Store Email Scraper

Stated plainly, because they affect what you should expect.

- **Publicly indexed emails only.** If a developer's address is not in Google's index, the Shopify App Store Email Scraper cannot find it. Contact forms and images are invisible to it.
- **Google's ~300-result cap.** A single query tops out around 300 results, which is why query expansion exists.
- **`possiblyTruncated`.** When Google's snippet ellipsis touched the email, this flag is `true` and the address may be incomplete. Verify before sending.
- **`username` and `profileUrl` are conditional.** They are only populated when Google's result exposes a handle. Some rows will carry `accountName` and `fullName` with an empty `username` and `profileUrl`. That is a Google limitation, not a bug.
- **Apify GOOGLE_SERP proxy required.** The Shopify App Store Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- **No guaranteed volume.** Results vary with keywords, domains and location, and no volume is guaranteed.

In our own measured testing, a Shopify App Store Email Scraper run resolved 9 of 10 targeted results into usable rows.
That is a strong hit rate for a B2B marketplace, but it describes that test, not your keywords.

### Related Actors

The Shopify App Store Email Scraper shares its engine with the rest of this Developer & Technology family; only the platform config differs.

| Actor | What it collects |
|---|---|
| [Shopify App Store Email and Phone Number Scraper](https://apify.com/neuro-scraper/shopify-app-store-email-and-phone-number-scraper) | Emails and phone numbers from Shopify App Store |
| [Shopify App Store Phone Number Scraper](https://apify.com/neuro-scraper/shopify-app-store-phone-number-scraper) | Public phone numbers from Shopify App Store |
| [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 |
| [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 |
| [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 |

### FAQ about the Shopify App Store Email Scraper

#### Does the Shopify App Store Email Scraper use the Shopify API?

No. It does not use any Shopify API, does not log in, and does not open the App Store website. Every field comes from publicly indexed Google search results.

#### Is this Actor affiliated with or endorsed by Shopify?

No. It is an independent tool built on public Google results, and it is not officially supported by, affiliated with or endorsed by Shopify.

#### Which domain does the Shopify App Store Email Scraper search?

`apps.shopify.com`. Queries are scoped with Google's `site:` operator so results stay inside the Shopify App Store.

#### Can I use the Shopify App Store Email Scraper to find merchants rather than app developers?

No. It is scoped to `apps.shopify.com`, which is the app catalogue, so it surfaces app publishers and their support or partnership addresses — not storefront owners.

#### Why does the Shopify App Store Email Scraper leave `username` and `profileUrl` empty on some rows?

Those fields are only filled when Google's result exposes a usable handle. When Google prints only a display name, you get `accountName` and `fullName` but no handle. This is a Google limitation, not a bug.

#### What does `possiblyTruncated: true` mean?

Google's snippet ellipsis touched the email, so the address may be cut off. Treat those rows as leads to verify rather than addresses to mail.

#### How many emails can one Shopify App Store Email Scraper run return?

Free Apify plans stop at 100 emails per run. Paid plans are uncapped and bounded by `maxEmails`, which accepts 1 to 10000.

#### Do I need a proxy?

Yes. The Shopify App Store Email Scraper requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.

#### Why did I get fewer emails than `maxEmails`?

Google caps a single query at roughly 300 results, and only some listings publish an email that Google indexes. Widening `keywords` and `customDomains` usually helps more than raising `maxPagesPerQuery`.

#### Can I target a specific country?

Yes. Set `countryCode` to a two-letter code for the search proxy, and optionally add a `location` phrase that is appended to every query.

#### Can a run be resumed after a migration?

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

#### Is this data compliant to use?

The Shopify App Store Email Scraper only collects addresses already public in Google's index. How you use them — GDPR, CAN-SPAM, local marketing rules — remains your responsibility.

### Leave a review

If the Shopify 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, feature requests or a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

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

Search terms describing the Shopify 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 Shopify 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": [
    "shopify app",
    "app developer"
  ],
  "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 Shopify 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": [
        "shopify app",
        "app developer"
    ],
    "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/shopify-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": [
        "shopify app",
        "app developer",
    ],
    "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/shopify-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": [
    "shopify app",
    "app developer"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call leads-scraper/shopify-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/shopify-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/BUz3VW3YgdgF0ZGIS/builds/XIpvsmiSNgKyMszne/openapi.json
