# Shopify & WooCommerce Store Leads: Ecommerce Stores Database (`pnda/shopify-woocommerce-stores`) Actor

Shopify & WooCommerce store leads: one ecommerce leads database of 7.8M stores (3.57M Shopify, 4.29M WooCommerce) with emails, phones and socials. Filter by country, niche, followers and traffic rank.

- **URL**: https://apify.com/pnda/shopify-woocommerce-stores.md
- **Developed by:** [PNDA](https://apify.com/pnda) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.15 / 1,000 stores

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/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 & WooCommerce Stores Database: Ecommerce Leads

**Find ecommerce leads in seconds.** This ecommerce leads database works as a searchable **Shopify stores list** and **WooCommerce stores list**. Filter a **database of 7.8 million online stores** (3.57M Shopify stores + 4.29M WooCommerce stores) by country, category, Shopify plan, rank, creation date, average product price and social followers. Then export a **Shopify stores list** with **emails, phone numbers and social profiles** to CSV, Excel or JSON.

It works as a **BuiltWith alternative** for ecommerce prospecting: no subscription and no seat. You pay only for the stores you export.

> **Data date: February 23, 2026.** Every row has a `dataAsOf` field, so you always know how fresh the record is. Contact details are the ones published on the stores at that date.

### Two platforms: Shopify and WooCommerce

Choose the platform in the first field (**Platform**):

| Platform | Stores | Best for |
|---|---:|---|
| **Shopify** (default) | 3,568,223 | DTC brands, Shopify Plus merchants, new Shopify stores (password protected before launch). Shopify-only fields: Shopify plan, average product price, monthly app spend |
| **WooCommerce** | 4,290,094 | WordPress shops, local retailers, B2B and niche stores |
| **Both** | 7,858,317 | one list across the two platforms |

### What you get

| | |
|---|---|
| **Stores** | 7,858,317 unique domains: 3,568,223 Shopify and 4,290,094 WooCommerce |
| **Contacts** | store emails (≈ 52 % of stores), phone numbers (≈ 43 %) |
| **Socials** | Instagram, Facebook, TikTok, YouTube, Pinterest, X (Twitter), LinkedIn, plus follower counts for TikTok, YouTube, Pinterest and X |
| **Firmographics** | country, state, city, categories, store rank, Shopify Plus flag, status (Active / Password Protected), first-seen date, average product price, monthly app spend, employees, Trustpilot rating |

### Use cases

- **Shopify stores list by country or niche.** For example, *beauty Shopify stores in the USA with an email*, *pet stores in the UK* or *jewelry stores in France*.
- **New Shopify stores.** Use `createdAfter` (for example `2025-06-01`) to get a **list of new Shopify stores**. Add status *Password Protected* to find stores that are about to launch.
- **Find ecommerce leads for your agency, app or SaaS.** Combine a minimum TikTok audience, a maximum rank or the Shopify Plus flag to target brands that already sell.
- **WooCommerce stores list.** Get the same filters and contacts for WooCommerce stores.
- **Enrich your own list.** Paste domains in *Look up exact domains* to get platform, contacts and socials for each one.

### Categories and keyword

Stores are classified in about 400 categories (for example `/Apparel/Clothing Accessories` or `/Food & Drink/Beverages/Coffee & Tea`). You can see the full list at **https://stores-api.takemyshop.net/categories**.

- **Categories**: type plain English words such as `jewelry`, `pet`, `coffee`, `fashion` or `beauty`.
  - Each word matches any part of a category name, in singular or plural.
  - Common synonyms work too: `jewelry` finds Clothing Accessories, `shoes` finds Footwear.
  - When a word matches nothing, you get a free row with the 5 closest categories.
- **Keyword**: one word searched in the categories **and** in the store domain. For example, `coffee` finds coffee categories plus domains such as `...coffee.com`.

### How to use it

1. Pick the **Platform** (Shopify, WooCommerce or both), keep **Find stores with filters** and set countries and category words (`beauty`, `apparel`, `pet`, `coffee`…).
2. Add any filter you need: *only stores with an email*, follower ranges, max rank, created after/before, price range, Shopify plan, status.
3. Set **Max stores** and run. Results are sorted by store rank, so the most visited stores come first.
4. Export the dataset as CSV, Excel or JSON, or read it through the Apify API.

#### Example input: US beauty Shopify stores with an email

```json
{
  "mode": "search",
  "platform": "shopify",
  "countries": ["US"],
  "categories": ["beauty"],
  "hasEmail": true,
  "maxResults": 1000
}
```

#### Example input: new WooCommerce stores in Germany

```json
{ "platform": "woocommerce", "countries": ["DE"], "createdAfter": "2025-06-01", "maxResults": 500 }
```

#### Example input: look up domains

```json
{ "mode": "lookup", "domains": ["allbirds.com", "gymshark.com"] }
```

### Output example

```json
{
  "domain": "rhodeskin.com",
  "url": "https://rhodeskin.com",
  "platform": "shopify",
  "shopifyPlan": "Shopify Plus",
  "status": "Active",
  "rank": 204,
  "platformRank": 4,
  "country": "US",
  "state": "New Jersey",
  "city": "North Brunswick Township",
  "categories": ["/Beauty & Fitness/Face & Body Care/Skin & Nail Care"],
  "email": "hello@rhodeskin.com",
  "emails": ["hello@rhodeskin.com", "hello@rhodeksin.com"],
  "phone": null,
  "phones": [],
  "createdAt": "2022-04-08",
  "averageProductPrice": 42.06,
  "averageProductPriceCurrency": "USD",
  "monthlyAppSpend": 81.98,
  "monthlyAppSpendCurrency": "USD",
  "employeeCount": 103,
  "trustpilotRating": 3.5,
  "instagram": "https://www.instagram.com/rhode",
  "tiktok": "https://www.tiktok.com/@rhode",
  "tiktokFollowers": 1900000,
  "youtube": "https://www.youtube.com/@haileyrhodebieber",
  "pinterest": "https://www.pinterest.com/rhode",
  "linkedin": "http://www.linkedin.com/company/rhodeskin",
  "dataAsOf": "2026-02-23"
}
```

Every row has the same columns, so CSV exports stay clean. `email` and `phone` hold the first value, and `emails` and `phones` hold all of them.

### Pricing

**Store discounts:** on Apify Silver, Gold, Platinum and Diamond plans, some events cost up to 20 % less. The Pricing tab of the Store page shows the exact price for each plan.

- **$3.50 per 1,000 stores** (`store` event), plus $0.005 per run.
- Domains that are not found, empty searches and status rows are **free**.
- The run never goes over your *Max cost per run*: the Actor caps the number of stores before it starts.
- **Works with a free Apify account too.** Free-plan accounts can use every feature at the same per-result prices, paid from their monthly Apify credit. The only limits are your credit and your maximum cost per run.

Compared with ecommerce data subscriptions such as BuiltWith or Wappalyzer (about $250 to $500 per month), you pay only for the leads you export.

### FAQ

**How do I find Shopify stores?**
Choose platform *Shopify*, add a country and a category word, then run. You get a Shopify stores list ranked by traffic, with contacts.

**Can I get a list of Shopify stores in the USA?**
Yes. Set `countries` to `["US"]` and, optionally, `states` (for example `California`).

**Is it a BuiltWith alternative?**
For ecommerce leads, yes. It covers Shopify and WooCommerce stores with contacts and filters, and you pay per store instead of a monthly plan. It does not detect every web technology.

**How fresh is the data?**
The snapshot is dated **February 23, 2026** (`dataAsOf` on every row). Stores that closed after that date can still appear. Check the domain before a large campaign, for example with our [Email Verifier](https://apify.com/pnda/email-verifier).

**Which filters are Shopify only?**
Shopify plan, average product price and monthly app spend.

**Why do some stores have no email?**
Not every store publishes an email. Turn on *Only stores with an email* to keep the ones that do.

### Related actors

- [Email Extractor](https://apify.com/pnda/email-extractor): re-crawl the stores you found to refresh their emails, phones and socials from the live website.
- [Email Verifier](https://apify.com/pnda/email-verifier): check that each email is deliverable before you send.
- [Email Finder](https://apify.com/pnda/email-finder): find the email of a founder or manager at a store.
- [Google Maps Scraper](https://apify.com/pnda/google-maps-scraper): local shops and businesses with phones, websites and reviews.

# Actor input Schema

## `platform` (type: `string`):

Which stores to search: Shopify, WooCommerce or both platforms.

## `mode` (type: `string`):

"Find stores": build an ecommerce leads list from the 7.8M Shopify and WooCommerce stores with the filters below, best-ranked stores first. "Look up exact domains": get the record (emails, phones, socials, category, rank…) of each domain you paste.

## `countries` (type: `array`):

2-letter country codes of the store (e.g. US, GB, FR, DE, CA, AU). Empty = every country.

## `states` (type: `array`):

Exact state or region names, e.g. "California", "Texas", "Ontario". Case-insensitive.

## `cities` (type: `array`):

Exact city names, e.g. "Los Angeles", "London". Case-insensitive.

## `categories` (type: `array`):

Store categories, in English, e.g. "jewelry", "pet", "coffee", "fashion", "beauty", "shoes", "furniture". Each word is matched against the ~400 store categories (any part of the name, singular or plural, common synonyms: "jewelry" finds Clothing Accessories). Full list: https://stores-api.takemyshop.net/categories

## `keyword` (type: `string`):

One free-text word or phrase, e.g. "coffee", "jewelry", "yoga". A store matches when one of its categories matches the word OR its domain contains it (coffee → /Food & Drink/Beverages/Coffee & Tea and bluebottlecoffee.com). For very rare words the domain part can be skipped to keep the search fast.

## `hasEmail` (type: `boolean`):

Keep stores with at least one email address.

## `hasPhone` (type: `boolean`):

Keep stores with at least one phone number.

## `hasInstagram` (type: `boolean`):

Keep stores with a Instagram profile.

## `hasFacebook` (type: `boolean`):

Keep stores with a Facebook profile.

## `hasTiktok` (type: `boolean`):

Keep stores with a TikTok profile.

## `hasYoutube` (type: `boolean`):

Keep stores with a YouTube profile.

## `hasPinterest` (type: `boolean`):

Keep stores with a Pinterest profile.

## `hasTwitter` (type: `boolean`):

Keep stores with a X (Twitter) profile.

## `hasLinkedin` (type: `boolean`):

Keep stores with a LinkedIn profile.

## `minTiktokFollowers` (type: `integer`):

Minimum TikTok followers (stores without a known count are excluded).

## `maxTiktokFollowers` (type: `integer`):

Maximum TikTok followers.

## `minYoutubeFollowers` (type: `integer`):

Minimum YouTube followers (stores without a known count are excluded).

## `maxYoutubeFollowers` (type: `integer`):

Maximum YouTube followers.

## `minPinterestFollowers` (type: `integer`):

Minimum Pinterest followers (stores without a known count are excluded).

## `maxPinterestFollowers` (type: `integer`):

Maximum Pinterest followers.

## `minTwitterFollowers` (type: `integer`):

Minimum X (Twitter) followers (stores without a known count are excluded).

## `maxTwitterFollowers` (type: `integer`):

Maximum X (Twitter) followers.

## `minRank` (type: `integer`):

Size range, lower bound. 1 = biggest store. Ranking by estimated traffic, not revenue. E.g. minRank 1000 + maxRank 10000 = stores ranked between 1,000 and 10,000.

## `maxRank` (type: `integer`):

Size range, upper bound. 1 = biggest store. Ranking by estimated traffic, not revenue. E.g. 100000 for the top 100k stores.

## `createdAfter` (type: `string`):

Store first seen on or after this date (YYYY-MM-DD). Use it to find new Shopify stores.

## `createdBefore` (type: `string`):

Store first seen on or before this date (YYYY-MM-DD).

## `minAveragePrice` (type: `number`):

Shopify only. Average product price, in the store currency (see the next field).

## `maxAveragePrice` (type: `number`):

Shopify only. Average product price, in the store currency.

## `averagePriceCurrency` (type: `string`):

3-letter currency of the store prices, e.g. USD, EUR, GBP. Recommended with a price range.

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

Minimum number of employees (known for a minority of stores).

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

Maximum number of employees.

## `minTrustpilotRating` (type: `number`):

Minimum Trustpilot average rating (0-5).

## `shopifyPlan` (type: `string`):

Shopify Plus = enterprise stores.

## `statuses` (type: `array`):

Empty = every status. "Password Protected" Shopify stores are often brand-new stores before launch.

## `domains` (type: `array`):

Store domains or URLs (www. and paths are ignored).

## `maxResults` (type: `integer`):

Maximum number of stores to return (up to 100,000 per run). You pay only for stores delivered.

## Actor input object example

```json
{
  "platform": "shopify",
  "mode": "search",
  "countries": [
    "US"
  ],
  "categories": [
    "beauty"
  ],
  "hasEmail": true,
  "hasPhone": false,
  "hasInstagram": false,
  "hasFacebook": false,
  "hasTiktok": false,
  "hasYoutube": false,
  "hasPinterest": false,
  "hasTwitter": false,
  "hasLinkedin": false,
  "shopifyPlan": "any",
  "domains": [
    "allbirds.com",
    "gymshark.com"
  ],
  "maxResults": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

All stores (JSON, CSV, Excel).

# 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 = {
    "platform": "shopify",
    "mode": "search",
    "countries": [
        "US"
    ],
    "categories": [
        "beauty"
    ],
    "hasEmail": true,
    "domains": [
        "allbirds.com",
        "gymshark.com"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("pnda/shopify-woocommerce-stores").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 = {
    "platform": "shopify",
    "mode": "search",
    "countries": ["US"],
    "categories": ["beauty"],
    "hasEmail": True,
    "domains": [
        "allbirds.com",
        "gymshark.com",
    ],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("pnda/shopify-woocommerce-stores").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 '{
  "platform": "shopify",
  "mode": "search",
  "countries": [
    "US"
  ],
  "categories": [
    "beauty"
  ],
  "hasEmail": true,
  "domains": [
    "allbirds.com",
    "gymshark.com"
  ],
  "maxResults": 100
}' |
apify call pnda/shopify-woocommerce-stores --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pnda/shopify-woocommerce-stores"
        }
    }
}
```

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/GpKyI6m8POocCPldB/builds/ORsJoiDJt9NZuROEN/openapi.json
