# Shopify & WooCommerce Store Leads — Email Finder (`rebra_api/shopify-woocommerce-store-leads`) Actor

Turn store domains into clean sales leads. Detects Shopify & WooCommerce and pulls product counts, prices, and the owner's email, phone and socials — no browser, no login. Built for agencies, suppliers and sales teams building B2B outreach lists.

- **URL**: https://apify.com/rebra_api/shopify-woocommerce-store-leads.md
- **Developed by:** [Arber Lutolli](https://apify.com/rebra_api) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 leads

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

## Shopify & WooCommerce Store Leads — Email Finder

Turn a list of online-store web addresses into **clean, ready-to-use sales leads** — no login, no browser automation, no manual digging.

Give it domains like `gymshark.com`; get back one tidy row per store with the platform, catalogue size, price range, and the owner's **email, phone and social links**.

Perfect for agencies, suppliers, dropshipping tools, app developers and sales teams who need to find and reach e-commerce store owners at scale.

### What it does

For each domain you provide, the Actor:

1. **Detects the platform** — Shopify or WooCommerce (and flags other platforms where it can).
2. **Reads the store's public product feed** — Shopify's `products.json` and WooCommerce's read-only Store API. This returns the catalogue size, vendors, product types and price range. Headless (Hydrogen) Shopify stores are handled via their `*.myshopify.com` domain automatically.
3. **Finds contact details** — scans the homepage and contact page for email, phone (`tel:` links) and social profiles (Instagram, Facebook, TikTok, YouTube, X/Twitter, LinkedIn, Pinterest).

It uses plain HTTPS requests routed through Apify Proxy — **no headless browser**, so runs are fast and cheap.

### Input

| Field | Meaning |
|---|---|
| **Store domains or URLs** | One per line, e.g. `gymshark.com`. Full URLs are fine — only the domain is used. |
| **Find contact details** | On by default. Reads homepage/contact page for email, phone, socials. |
| **Also output each product** | Off by default. On = also emit one row per product (Shopify). |
| **Max products per store** | Cap for the option above. |
| **Stores processed at once** | Concurrency. 10 is a safe default. |
| **Proxy** | Apify Proxy. **Residential** gives the best hit rate — the store feeds rate-limit by IP. |

### Output (one row per store)

```json
{
  "recordType": "store",
  "domain": "allbirds.com",
  "url": "https://allbirds.com",
  "platform": "shopify",
  "productCount": 412,
  "priceMin": 4.0,
  "priceMax": 165.0,
  "currency": null,
  "vendors": ["Allbirds"],
  "productTypes": ["Shoes", "Socks", "Apparel"],
  "storeName": "Allbirds | Wool & Tree Shoes",
  "email": "help@allbirds.com",
  "emails": ["help@allbirds.com"],
  "phone": "+18448807192",
  "socials": { "instagram": "https://instagram.com/allbirds", "facebook": "..." },
  "appearsActive": true,
  "error": null,
  "scrapedAt": "2026-10-18T12:00:00+00:00"
}
```

Export the dataset as **CSV, Excel, JSON or HTML**, or pull it via the API.

### Good to know

- **Hit rate ~65–70%.** Some stores sit behind Cloudflare/Vercel challenges or aren't Shopify/WooCommerce — those come back with an `error` and whatever contact details were still readable. Residential proxies maximise the rate.
- **No store discovery yet.** You supply the domains; the Actor enriches them. (Discovery is on the roadmap.)
- **Pricing** is pay-per-result: you're charged per store lead returned.

### Use cases

- Build a B2B list of Shopify/WooCommerce store owners to pitch.
- Enrich an existing domain list with contact + catalogue data.
- Competitor / supplier catalogue research (price range, product types).
- Feed a CRM or cold-outreach tool.

### FAQ

**How do I find the email of a Shopify store owner?**
Give the Actor the store's web address. It reads the store's own homepage and contact page for the public email, phone (`tel:`) and social links, alongside the platform, catalogue size and price range.

**Does it work on WooCommerce too?**
Yes. It auto-detects Shopify and WooCommerce and reads each one's public product feed — no login required.

**Can I build a B2B lead list of online stores?**
Yes. Feed it a list of domains and get one clean lead row per store, ready for a CRM or cold-outreach tool. (You supply the domains; store **discovery** by keyword/country is on the roadmap.)

**How accurate is the contact data?**
It comes straight from each store's own public pages — nothing invented. Hit rate is ~65–70%; residential proxies maximise it. Always follow applicable anti-spam rules (CAN-SPAM / GDPR) when you reach out.

**What's the difference vs. the Shopify Product Scraper?**
This returns **one lead row per store** (contacts + catalogue summary). The **Shopify Product Scraper** returns **one row per product**. Use them together: find the stores here, pull their full catalogues there.

# Actor input Schema

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

One per line, e.g. gymshark.com. Full URLs are fine too — only the domain is used.

## `enrichContacts` (type: `boolean`):

Reads the homepage and contact page for the owner's email, phone and social links. This is what most lead buyers want.

## `fetchProducts` (type: `boolean`):

Off = one summary row per store (best for leads). On = also one row per product.

## `maxProductsPerStore` (type: `integer`):

Only used when the option above is on.

## `concurrency` (type: `integer`):

Higher is faster but heavier. 10 is a safe default.

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

Routes requests through Apify Proxy so the store feeds don't rate-limit you. RESIDENTIAL gives the best hit rate. Proxy usage is billed to whoever runs the Actor.

## Actor input object example

```json
{
  "domains": [
    "allbirds.com",
    "ridgewallet.com"
  ],
  "enrichContacts": true,
  "fetchProducts": false,
  "maxProductsPerStore": 100,
  "concurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per store: platform, catalogue and contact details.

# 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 = {
    "domains": [
        "allbirds.com",
        "ridgewallet.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rebra_api/shopify-woocommerce-store-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 = {
    "domains": [
        "allbirds.com",
        "ridgewallet.com",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rebra_api/shopify-woocommerce-store-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 '{
  "domains": [
    "allbirds.com",
    "ridgewallet.com"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rebra_api/shopify-woocommerce-store-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rebra_api/shopify-woocommerce-store-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/nJEwkgDdjK9bWM9yb/builds/t7wpJWdY8TjOMxtx3/openapi.json
