# Shopify Website Scraper Email (`b2b_lead_generation/shopify-website-scraper-email`) Actor

Shopify website scraper that searches two store databases and returns email and company contact data, filtered by country, ZIP code, employee count, and revenue for Shopify merchant prospecting.

- **URL**: https://apify.com/b2b\_lead\_generation/shopify-website-scraper-email.md
- **Developed by:** [B2B Lead Generation](https://apify.com/b2b_lead_generation) (community)
- **Categories:** Lead generation, E-commerce, Automation
- **Stats:** 35 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

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

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

# README

### Shopify Website Scraper (Email)

<p align="center">
  <img src="https://imgur.com/xcWAXIf.png" alt="Shopify Website Scraper (Email)" style="max-width:100%; border-radius:14px; width="680" />
</p>

Find and extract contact details from **1,000,000+ Shopify store websites** — including emails, phone numbers, social media profiles, and company info. Filter by company name, country, ZIP code, employee count, and revenue. Results come back fast without manually visiting each site.

### What you can do

- **Find store emails by keyword** — search for Shopify stores containing any word (e.g. `fashion`, `sport`, `organic`) and get their contact emails
- **Filter by country** — target specific markets (United States, Canada, United Kingdom, etc.)
- **Filter by ZIP code** — focus on stores in specific regions or cities
- **Filter by company size** — narrow by employee count (1, 10, 100, 1000, 10000, 100000)
- **Filter by revenue** — target stores within a specific revenue range (USD)
- **Export results** — download contact lists as JSON, CSV, or Excel from the Apify dataset

### Use cases

- **B2B sales outreach** — find Shopify store owners matching your ideal customer profile and reach out directly
- **Email marketing** — build targeted contact lists of store owners in specific industries or regions
- **Agency prospecting** — identify Shopify shops to pitch your design, SEO, or marketing services to
- **Market research** — analyze store distribution across countries, verticals, and company sizes
- **Supplier discovery** — find potential wholesale or drop-ship partners in specific categories
- **Competitor analysis** — explore stores in your vertical with similar revenue ranges

### Input

All filters are optional — combine any number of them. Leave all empty to return all available stores up to your `maxItems` limit.

#### Search & Filter

| Parameter | Type | Description |
|-----------|------|-------------|
| `companySearch` | string list | One or more keywords to search store names. Results match **any** keyword (OR logic). Partial, case-insensitive match. |
| `country` | string list | One or more country names (e.g. `United States`, `Canada`). Results match **any** country entered. |
| `zipCode` | string list | One or more ZIP / postal codes. Results match **any** code entered. |

#### Range Filters

| Parameter | Type | Description |
|-----------|------|-------------|
| `minEmployees` | integer | Minimum employee count. Uses rounded size bands: `1`, `10`, `100`, `1000`, `10000`, `100000`. |
| `maxEmployees` | integer | Maximum employee count. |
| `minRevenueUSD` | number | Minimum annual sales revenue in USD. |
| `maxRevenueUSD` | number | Maximum annual sales revenue in USD. |

#### Output Control

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxItems` | integer | `100` | Maximum number of stores to return (up to 100,000). |
| `sortBy` | select | — | Sort results by: `Company`, `Country`, `Employees`, `Sales Revenue USD`, or `Zip`. |
| `sortOrder` | select | `asc` | Sort direction: ascending or descending. |

#### Example input

```json
{
    "companySearch": ["fashion", "apparel"],
    "country": ["United States", "Canada"],
    "zipCode": [],
    "minEmployees": 10,
    "maxEmployees": 1000,
    "minRevenueUSD": 100000,
    "maxRevenueUSD": 5000000,
    "maxItems": 500,
    "sortBy": "Sales Revenue USD",
    "sortOrder": "desc"
}
```

### Output

Each result represents one Shopify store website. Contact details are extracted directly from the store. Results can be exported as JSON, CSV, or Excel.

```json
{
    "Domain": "examplestore.com",
    "Company": "Example Store",
    "Vertical": "Fashion And Apparel",
    "Employees": "10",
    "Sales Revenue USD": 450000,
    "City": "Los Angeles",
    "State": "CA",
    "Zip": "90065",
    "Country": "US",
    "Emails": "hello@examplestore.com",
    "Telephones": "ph:+1-310-555-0100",
    "Twitter": "twitter.com/examplestore",
    "Facebook": "facebook.com/examplestore",
    "LinkedIn": "linkedin.com/company/examplestore",
    "Instagram": "instagram.com/examplestore",
    "Pinterest": "pinterest.com/examplestore",
    "Youtube": null,
    "TikTok": null,
    "Social": 12000
}
```

#### Output fields

| Field | Description |
|-------|-------------|
| `Domain` | Shopify store website domain |
| `Company` | Company / store name |
| `Vertical` | Industry or product category |
| `Employees` | Approximate employee count (size bands: 1, 10, 100, 1000, 10000, 100000) |
| `Sales Revenue USD` | Annual revenue in USD |
| `City` | City where the store is based |
| `State` | State or province |
| `Zip` | ZIP / postal code |
| `Country` | ISO 2-letter country code (e.g. `US`, `GB`, `CA`) |
| `Emails` | Contact email addresses extracted from the store website (semicolon-separated if multiple) |
| `Telephones` | Phone numbers found on the store website |
| `Twitter` | Twitter / X profile URL |
| `Facebook` | Facebook page URL |
| `LinkedIn` | LinkedIn company page URL |
| `Instagram` | Instagram profile URL |
| `Pinterest` | Pinterest profile URL |
| `Youtube` | YouTube channel URL |
| `TikTok` | TikTok profile URL |
| `Social` | Total social media follower count |

### Popular cities & ZIP codes

Use these as reference when filtering by location.

#### United States

| City | ZIP Codes |
|------|-----------|
| New York City | 10001, 10003, 10010, 10011, 10013, 10014, 10016, 10017, 10018, 10019, 10022, 10023, 10036 |
| Los Angeles | 90065, 90069 |
| San Francisco | 94102, 94103, 94104, 94105, 94111 |
| Chicago | 60654 |
| Austin | 78704 |
| Boston | 02109 |
| Seattle | 98122 |
| Washington DC | 20002, 20006, 20036 |
| San Diego | 92101, 92123 |
| Sacramento | 95814, 95833, 95834 |
| Phoenix | 85008 |
| Philadelphia | 19103 |
| Atlanta | 30080 |
| Orlando | 32835 |
| Palo Alto | 94304 |
| Mountain View | 94043 |
| Menlo Park | 94025 |
| Redwood City | 94065 |
| Redmond | 98052 |
| Sunnyvale | 94085 |
| Newport Beach | 92660 |
| Costa Mesa | 92626 |
| Beverly Hills | — |
| Alexandria | 22314 |
| Fairfax | 22030 |
| Reston | 20190 |
| Sarasota | 34236 |
| Boca Raton | — |
| Albuquerque | — |
| Aliso Viejo | 92656 |

#### United Kingdom

| City | ZIP / Postcode |
|------|----------------|
| London | EC1N, EC1V, EC2A, EC4A, SW1P, SW1Y, W1D, W1W, WC1N, WC2H |
| Greater London | EC1V, SE1, SW8, W1W |
| Manchester | M1, M3 |
| Birmingham | B2 |
| Edinburgh | EH3 |
| Glasgow | G2 |
| Liverpool | L2 |
| Bristol | — |
| Cardiff | — |
| Leeds | — |
| Lancaster | LA1 |
| Newport | NP20 |
| Wilmslow | SK9 |

#### Canada

| City | ZIP / Postal Code |
|------|-------------------|
| Toronto | M5V |
| Vancouver | V6J |
| Ottawa | K1A |
| Montreal | H4T |
| Fredericton | E3A |

#### Australia

| City | ZIP Code |
|------|----------|
| Sydney | 2000, 2001, 2002, 2010 |
| Melbourne | 3000, 3006, 3051, 3149, 3189 |
| Brisbane | 4000, 4006 |
| Perth | 6000 |
| Canberra | — |

#### Other popular cities worldwide

| City | Country |
|------|---------|
| London | UK |
| Berlin | Germany |
| Amsterdam | Netherlands |
| Paris | France |
| Barcelona | Spain |
| Sydney | Australia |
| Toronto | Canada |
| Tokyo | Japan |
| Singapore | Singapore |
| Dubai | UAE |
| Mumbai | India |
| Bangalore | India |
| São Paulo | Brazil |
| Mexico City | Mexico |
| Seoul | South Korea |
| Hong Kong | Hong Kong |

> **Tip:** ZIP codes vary by country format — US uses 5-digit codes (e.g. `10001`), UK uses postcodes (e.g. `EC1V`), Canada uses alphanumeric codes (e.g. `M5V`). Enter the exact code or a partial prefix to match multiple ZIPs.

### FAQ

**Why did I get fewer results than my `maxItems` limit?**
Results only include stores that match all your filters. If you set `maxItems: 500` but only 63 stores match, you will get 63. Broaden your filters to get more results.

**What are the employee count values?**
Employee counts use rounded size bands: `1`, `10`, `100`, `1000`, `10000`, `100000`. Setting `minEmployees: 5` and `maxEmployees: 100` will return stores in the `10` and `100` bands.

**How do I search multiple countries?**
Enter each country name on a separate line in the Country field. Country names are matched automatically.

**Can I search without any filters?**
Yes — leave all filters empty and set `maxItems` to the number of stores you want. Results will be returned in default order.

**Are emails always available?**
Email availability depends on what each store publishes on their website. Some stores list multiple contact emails; others may have none. The `Emails` field is empty when no address is found.

**What countries are supported?**
All countries with a standard ISO 3166-1 code are supported. Enter the full English country name (e.g. `United States`, `United Kingdom`, `South Korea`).

<p align="center">
  <img src="https://imgur.com/htfuiQh.png" alt="Shopify Website Scraper (Email)" style="max-width:100%; border-radius:12px; width="680" />
</p>

### Integrations

Connect Shopify Website Scraper (Email) with other apps using [Apify integrations](https://apify.com/integrations), including Make, Zapier, Slack, Google Sheets, and more. Use [webhooks](https://docs.apify.com/integrations/webhooks) to trigger actions when results are ready.

# Actor input Schema

## `companySearch` (type: `array`):

Search by one or more company names or keywords. Case-insensitive, partial match. Results match ANY of the terms entered.

## `country` (type: `array`):

Enter one or more country names (e.g. United States, Canada, United Kingdom). Results match ANY country entered. Leave empty for all countries.

## `zipCode` (type: `array`):

Filter by one or more ZIP or postal codes. Results match ANY of the codes entered. Leave empty to skip.

## `minEmployees` (type: `integer`):

Only return companies with at least this many employees. Leave empty to skip.

## `maxEmployees` (type: `integer`):

Only return companies with at most this many employees. Leave empty to skip.

## `minRevenueUSD` (type: `number`):

Only return companies with at least this sales revenue in USD. Leave empty to skip.

## `maxRevenueUSD` (type: `number`):

Only return companies with at most this sales revenue in USD. Leave empty to skip.

## `maxItems` (type: `integer`):

Maximum number of records to return across both databases. The actor fetches in batches of 100. Default is 100.

## `sortBy` (type: `string`):

Sort results by this field. Sorting is applied within each database independently.

## `sortOrder` (type: `string`):

Sort direction. Only applies when Sort by is set.

## `timeoutSecs` (type: `integer`):

Maximum total run time in seconds before the actor stops.

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

Select proxies to use for requests. Helps avoid IP blocking and rate limits. Datacenter proxies are fastest; Residential proxies are harder to detect.

## Actor input object example

```json
{
  "companySearch": [
    "fashion eyewear",
    "sports"
  ],
  "country": [
    "United States",
    "Canada"
  ],
  "zipCode": [
    "90210",
    "10001"
  ],
  "minEmployees": 10,
  "maxEmployees": 500,
  "minRevenueUSD": 100000,
  "maxRevenueUSD": 5000000,
  "maxItems": 100,
  "sortBy": "",
  "sortOrder": "asc",
  "timeoutSecs": 300,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_lead_generation/shopify-website-scraper-email").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 = {
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call b2b_lead_generation/shopify-website-scraper-email --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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