# WooCommerce Store Leads – Wix, Squarespace & BigCommerce (`hapol/ecommerce-store-leads`) Actor

Find WooCommerce, Wix, Squarespace and BigCommerce stores by niche keyword, or detect the platform of your own domain list. Get product count, price range (WooCommerce), currency, socials and public business emails/phones. Pay only for confirmed stores. No proxy or login.

- **URL**: https://apify.com/hapol/ecommerce-store-leads.md
- **Developed by:** [Haydon Apolinar](https://apify.com/hapol) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 confirmed stores

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

## WooCommerce Store Leads – Wix, Squarespace & BigCommerce

Build a list of **WooCommerce, Wix or Squarespace stores** in any niche. **WooCommerce Store Leads** finds and verifies online stores built on **WooCommerce, BigCommerce, Wix and Squarespace**, so you can build a **WooCommerce store list** or a **Wix store list** from fresh, live data. Give it a list of domains or a few niche keywords. For each site it detects the platform, confirms there's a real store (public products), and returns the store name, product count, price range and currency where public, social profiles, and public business emails and phones.

You pay only for **confirmed stores**. Sites that aren't stores, are on another platform, or are blocked are free.

> Looking for Shopify stores? See [Related Actors](#related-actors).

### Who uses these e-commerce store leads

- **Agencies and freelancers** selling migrations, design, SEO or apps to small online stores on a specific platform.
- **SaaS and plugin vendors** building lists of WooCommerce, BigCommerce, Wix or Squarespace merchants.
- **Market researchers** sizing a niche by platform, catalog size and price range.

### How to find WooCommerce stores in a niche

1. Add niche keywords (e.g. "handmade ceramics") and set `platforms` to `["woocommerce"]`.
2. Keep the default Google discovery. It searches WooCommerce footprints such as `/product/` pages with "add to cart".
3. Every candidate is checked against the public WooCommerce Store API. Only confirmed stores are charged and returned, with exact product count, currency and price range.

### How to find Wix and Squarespace stores

1. Add niche keywords and set `platforms` to `["wix"]`, `["squarespace"]` or both.
2. Discovery searches platform footprints, for example Wix `/product-page/` URLs.
3. A site counts as a store only if it publishes products: Wix through its `store-products-sitemap.xml`, Squarespace through product pages (`/…/p/…`) in its sitemap. Wix sites without products aren't charged.

### How the platform checker detects WooCommerce, Wix, Squarespace and BigCommerce

Want to check if a site is WooCommerce, or find out what platform a store is on? Put the domains in `domains`; the steps are the same for discovered sites:

1. **Find candidates:** your domain list, or search results for your keywords (see *Discovery methods*).
2. **Detect the platform** from the homepage's public headers and HTML (for example `x-wix-request-id`, `static1.squarespace.com`, `cdn11.bigcommerce.com`, WooCommerce plugin assets).
3. **Confirm it's a store** using public, platform-provided endpoints:
   - **WooCommerce:** the public Store API (`/wp-json/wc/store/v1/products`) gives the exact product count, currency and a price sample.
   - **Wix:** the `store-products-sitemap.xml` that Wix Stores publishes.
   - **BigCommerce:** the product pages in `/xmlsitemap.php`.
   - **Squarespace:** product pages (`/…/p/…`) in `sitemap.xml`.
4. **Extract contacts** (name, socials, emails, phones) from the homepage, plus contact/about pages in enriched mode.

Typically 2–4 plain HTTP requests per site. No browser, no proxy, no login.

### Discovery methods

| Method | Cost | Notes |
|---|---|---|
| **Google Search** (`google-search-actor`, **default**) | ~**$0.0045 per Google results page**, billed to **your own Apify account** by Apify's Google Search Scraper | Uses platform footprint queries (e.g. Wix `/product-page/`, WooCommerce `/product/` + "add to cart"). In our tests (2 niches, 1 page per query) **22–35%** of checked sites were confirmed stores, at roughly $0.002–0.004 of Google cost per store found. **Recommended.** |
| **Bing – free / best-effort (low hit rate)** (`bing`) | free | Plain niche queries. In the same tests it found **0** stores in both niches. Only worth trying for quick experiments. |
| **Your own domain list** | free | Best hit rate. Accepts custom domains and Wix free sites (`name.wixsite.com/site`). |

### Input example

```json
{
  "domains": ["coraandspink.com", "www.bulkapothecary.com", "www.shopmemor.com", "https://259-283-2952.wixsite.com/website"],
  "keywords": ["handmade ceramics"],
  "discoveryMethod": "google-search-actor",
  "platforms": ["woocommerce", "bigcommerce", "wix", "squarespace"],
  "maxStores": 100,
  "roleEmailsOnly": true
}
```

### Output example (real record, base mode)

```json
{
  "domain": "coraandspink.com",
  "siteUrl": "https://coraandspink.com/",
  "platform": "woocommerce",
  "platformSignals": ["html:wc-plugin-assets", "html:woocommerce-class", "html:wc-blocks", "api:wc-store-v1"],
  "storeConfirmed": true,
  "storeEvidence": "woocommerce-store-api",
  "storeName": "Cora + Spink",
  "productCount": 15,
  "productCountSource": "woocommerce-store-api",
  "currency": "GBP",
  "priceMin": 32,
  "priceMax": 32,
  "priceSampleSize": 1,
  "topCategories": ["T-Shirts", "New Stuff"],
  "socials": {
    "facebook": "https://facebook.com/coraandspink",
    "instagram": "https://instagram.com/coraandspink",
    "tiktok": "https://tiktok.com/@coraandspink",
    "youtube": "https://youtube.com/coraandspink"
  },
  "emails": ["info@coraandspink.com"],
  "phones": [],
  "pagesChecked": ["https://coraandspink.com/", "https://coraandspink.com/wp-json/wc/store/v1/products?per_page=20"],
  "checkedAt": "2026-10-09T22:12:51.662Z"
}
```

The dataset has three views: **Overview**, **Contacts** and **Details** (detection evidence and catalog data).

### What you get per platform

Price range and top categories are available for WooCommerce only.

| Field | WooCommerce | BigCommerce | Wix | Squarespace |
|---|---|---|---|---|
| Platform + store confirmation | ✅ | ✅ | ✅ | ✅ |
| Product count | ✅ exact (Store API) | ✅ from sitemap (lower bound if capped) | ✅ from sitemap | ✅ from sitemap |
| Currency, price range, top categories | ✅ | – | – | – |
| Socials, emails, phones | ✅ | ✅ | ✅ | ✅ |

### Enriched mode

`"enriched": true` also reads up to 2 contact/about pages for more contacts, samples 100 WooCommerce products for the price range, and reads up to 5 BigCommerce product sitemap pages. It adds an extra per-store charge.

### How much do WooCommerce store leads cost?

| Event | Price | Per 1,000 |
|---|---|---|
| Confirmed store (`store`) | $0.003 | **$3.00** |
| Enriched mode add-on (`enriched-store`) | $0.002 | **+$2.00** |
| Non-stores, other platforms, Shopify, blocked sites | free | free |

Example: 100 confirmed stores = $0.30, plus the Google discovery pages billed on your own account at about $0.0045 each (e.g. 20 pages ≈ $0.09). Domain lists need no Google pages.

Set a **max cost per run** to cap your spend; the Actor stops cleanly when the cap is reached.

### Limits & good to know

- Some sites sit behind bot challenges (e.g. Cloudflare). They're reported as `blocked` (free) rather than retried. For WooCommerce the Actor still tries the public Store API, which is often not challenged.
- "Store" means public evidence of products. A Wix or Squarespace site with no products is reported as a site, not a store, and isn't charged.
- Price data is available only where the platform publishes it (WooCommerce).
- Email availability depends on what each store publishes. Many stores only offer a contact form.

### Live store leads vs. e-commerce lead databases

Prebuilt e-commerce lead databases sell lists collected in advance. This Actor checks each site **live, at run time**, and you pay only for stores it confirms in your run ($3 per 1,000). A database is the better fit if you need millions of rows at once. This Actor fits when you want fresh, verified stores in specific niches, or want to check your own domain list.

### FAQ

**Does it need a proxy?** No. It makes a few plain requests per site to public pages and endpoints.

**Why isn't Shopify included?** It's covered by our dedicated [Shopify Store Leads](https://apify.com/hapol/shopify-store-leads) actor, which reads Shopify-specific endpoints.

**Can I check only one platform?** Yes, set `platforms`, e.g. `["wix"]`.

### Data protection & responsible use

This Actor collects **publicly available business information** that merchants on WooCommerce, BigCommerce, Wix and Squarespace publish on their own websites: store name, platform, catalog statistics, social profile links, and contact details shown on the store's public pages. It does not log in, bypass access controls, buy or guess email addresses, or use third-party data brokers.

By default (`roleEmailsOnly: true`) it returns only **generic business mailboxes** (for example info@, hello@, support@, sales@) and drops addresses that look like they belong to a named person.

**You are the data controller of the data you collect and are responsible for how you use it.** Before contacting anyone, make sure your use complies with the laws that apply to you and your recipients, for example:

- **GDPR / UK GDPR (EU, EEA, UK):** contact details that identify a person, including those of sole traders and small shops, are personal data. You need a lawful basis, usually legitimate interests with a documented balancing test. You must tell people where you got their data within one month (Art. 14), honor objections and erasure requests, keep only what you need, and secure it.
- **ePrivacy / PECR (EU, UK):** unsolicited marketing emails to individuals and sole traders generally need prior consent. Rules for corporate subscribers are less strict but still require identification and an easy opt-out. Rules vary by EU member state.
- **CAN-SPAM (United States):** commercial emails must not use misleading headers or subject lines, must identify themselves as ads where required, must include a valid physical postal address and a working opt-out, and opt-outs must be honored within 10 business days.
- **CASL (Canada):** commercial electronic messages generally require consent. A conspicuously published business address may give implied consent only if the message relates to the recipient's business role and the address was published without a "no unsolicited messages" statement. Every message must identify the sender and include an unsubscribe mechanism.
- Other laws may apply, such as Australia's Spam Act, Brazil's LGPD and US state privacy laws.

Please also respect each website's terms, don't overload stores (the Actor makes only a few requests per store), and don't use the data for spam, harassment or any unlawful purpose. If you are a store owner and want your data removed from a user's dataset, contact that user. This Actor does not keep a central database.

### Related Actors

- **Looking for Shopify stores?** Use [Shopify Store Leads Scraper – Emails, Socials & Products](https://apify.com/hapol/shopify-store-leads). This Actor detects Shopify sites but never outputs or charges them, so the two don't overlap.
- [Greenhouse, Lever & Ashby Jobs API – New Job Alerts](https://apify.com/hapol/job-boards): hiring signals (new job postings) for the companies you're prospecting.

***

Built and maintained by **Hapol Data** (Web Data. Automated.). More Actors: [apify.com/hapol](https://apify.com/hapol).

# Actor input Schema

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

e.g. coraandspink.com, https://www.shopmemor.com or a Wix free site like https://name.wixsite.com/site. Each is checked for WooCommerce, BigCommerce, Wix or Squarespace and for public products.

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

e.g. "handmade ceramics", "skincare". Candidate sites are found by search, then the platform and store are verified.

## `platforms` (type: `array`):

Only stores on these platforms are output and charged. Shopify is never charged here; use our Shopify Store Leads actor for Shopify.

## `discoveryMethod` (type: `string`):

Google (default, recommended) runs apify/google-search-scraper on your own Apify account (~$0.0045 per results page on the Free tier) with platform footprint queries; in our tests 22–35% of checked sites were confirmed stores. Bing is free but best-effort with a low hit rate (0 stores in the same tests): plain niche queries only. Only used when you give keywords.

## `maxSearchPagesPerQuery` (type: `integer`):

Search result pages per query. Default 1 (each Google page costs ~$0.0045 on your account); Bing pages are free (~30 results each).

## `maxStores` (type: `integer`):

Maximum confirmed stores to output.

## `enriched` (type: `boolean`):

Adds contacts from contact/about pages, a larger WooCommerce price sample (100 products) and more BigCommerce sitemap pages. Extra charge per store.

## `roleEmailsOnly` (type: `boolean`):

Keep only generic business addresses (info@, support@, hello@…). Recommended for GDPR.

## `includeNonStores` (type: `boolean`):

Also output sites that aren't confirmed stores: unknown platform, blocked, Shopify, or a platform site without public products (free, not charged).

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

Not needed for most sites. Sites behind Cloudflare challenges are reported as blocked rather than retried.

## Actor input object example

```json
{
  "domains": [
    "coraandspink.com",
    "www.bulkapothecary.com",
    "www.shopmemor.com",
    "https://259-283-2952.wixsite.com/website"
  ],
  "platforms": [
    "woocommerce",
    "bigcommerce",
    "wix",
    "squarespace"
  ],
  "discoveryMethod": "google-search-actor",
  "maxSearchPagesPerQuery": 1,
  "maxStores": 10,
  "enriched": false,
  "roleEmailsOnly": true,
  "includeNonStores": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All store records (overview view).

## `contacts` (type: `string`):

Emails, phones and social profiles per store.

## `enriched` (type: `string`):

Detection evidence and catalog details.

## `stats` (type: `string`):

Checked/confirmed/blocked counts per platform (STATS record).

# 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": [
        "coraandspink.com",
        "www.bulkapothecary.com",
        "www.shopmemor.com",
        "https://259-283-2952.wixsite.com/website"
    ],
    "maxStores": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("hapol/ecommerce-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": [
        "coraandspink.com",
        "www.bulkapothecary.com",
        "www.shopmemor.com",
        "https://259-283-2952.wixsite.com/website",
    ],
    "maxStores": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("hapol/ecommerce-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": [
    "coraandspink.com",
    "www.bulkapothecary.com",
    "www.shopmemor.com",
    "https://259-283-2952.wixsite.com/website"
  ],
  "maxStores": 10
}' |
apify call hapol/ecommerce-store-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hapol/ecommerce-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/rundE0xcv3khxpFDd/builds/BKmTR2857LLuRj2Ka/openapi.json
