# WooCommerce Email Scraper (`neuro-scraper/woocommerce-email-scraper`) Actor

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

- **URL**: https://apify.com/neuro-scraper/woocommerce-email-scraper.md
- **Developed by:** [Neuro Scraper](https://apify.com/neuro-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

### WooCommerce Email Scraper — Find Store Owner Emails Behind the "Powered by WooCommerce" Footer

The **WooCommerce Email Scraper** finds publicly indexed contact emails belonging to real WooCommerce merchants and returns them as clean, structured data.

WooCommerce is not a marketplace. There is no `woocommerce.com/janes-shop` profile to crawl, because every merchant runs the plugin on their own WordPress site under their own domain.

So the WooCommerce Email Scraper does something different from a marketplace scraper: it searches Google for the **footprint phrase** `"Powered by WooCommerce"` — the credit line the plugin drops into the storefront footer.

Any page Google returns for that phrase is, by definition, a live WooCommerce storefront. The Actor reads the merchant's own host straight out of Google's result breadcrumb and records it as the store URL.

That is the whole point. You do not get a platform profile link — you get `https://cedarandashcandles.com`, the merchant's actual website, which is exactly where their contact address lives.

You give it keywords such as `online store` or `shop`, pick the email domains you care about, and the WooCommerce Email Scraper writes a deduplicated dataset of store names, store URLs, page snippets and addresses.

**Important:** this WooCommerce Email Scraper never logs into WordPress or WooCommerce, never uses a WooCommerce API, and never opens a merchant's site directly. Every record comes from publicly indexed Google search results.

It is a WooCommerce email extractor built for ecommerce lead generation, agency prospecting and B2B partnership research — not a customer-data tool and not an order scraper.

***

### The Footprint Search: Why This WooCommerce Email Scraper Has No `site:` Operator

This section is the single most important thing to understand about the WooCommerce Email Scraper, so it comes first.

A marketplace scraper narrows Google with `site:etsy.com` or `site:ebay.com`. Self-hosted storefronts have no shared domain, so there is nothing useful to put after `site:`.

Instead, the Actor's platform config sets `site_footprint` to the exact string `Powered by WooCommerce`, and every query is built around that quoted phrase.

A finished base query looks like this — note that there is no `site:` operator anywhere in it:

```text
"Powered by WooCommerce" online store "@gmail.com" "Portland"
```

Because the target is a phrase rather than a domain, the config also sets `accept_any_host` to true. Whatever host Google prints in the result breadcrumb **is** the merchant's store.

The parser therefore takes that host verbatim and writes it into both `profileUrl` and `url`. No rewriting, no guessing, no platform-hosted intermediary.

#### Why merchant domains beat platform profiles

A marketplace profile URL tells you where a seller rents shelf space. A merchant domain tells you who they actually are.

Store URLs are the join key for almost every ecommerce enrichment workflow: technology lookups, traffic estimates, CRM matching, domain-level deduplication.

They are also where the "Contact us" page lives — which is why the default `queryModifiers` list includes `contact us`, `wholesale`, `customer service` and `stockist`.

#### The honest trade-off

The footprint search only reaches stores that **left the "Powered by WooCommerce" credit line in place** and had that page indexed by Google.

Plenty of merchants remove it, override it in a child theme, or replace it with their own copyright line. Those stores are invisible to this method.

So the WooCommerce Email Scraper finds a **subset** of WooCommerce stores, not the whole population. It is a discovery tool, not a census of the platform.

In a small measured sample of live runs, roughly **5 out of every 9 parsed results** carried a usable store identity alongside the email, and every run returned real addresses. That is an observation from a sample, not a guaranteed rate.

***

### Key Features of the WooCommerce Email Scraper

The table below reflects what the WooCommerce Email Scraper genuinely does. No invented capabilities, no marketing fiction.

| Feature | What it means in practice |
|---|---|
| Footprint-phrase discovery | Every query is anchored on the quoted string `"Powered by WooCommerce"` instead of a `site:` operator |
| Merchant-domain capture | `accept_any_host` is on, so the host in Google's breadcrumb is recorded as the store URL |
| Query expansion | Each keyword × domain pair is searched in several phrasings: base, quoted, `intitle:`, plus one variant per query modifier |
| Domain-filtered extraction | Only emails ending in your `customDomains` list are kept |
| Global deduplication | One email appears once across every query and every page of the run |
| Obfuscation-aware parser | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` will not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Discards a hit that is only the tail of another email in the same result block |
| Structural HTML parsing | Locates the `<h3>` title, then the smallest surrounding block — it does not depend on Google's CSS class names |
| Whole-page fallback parser | If Google's markup changes, the run degrades to "emails without store metadata" rather than "no emails" |
| Concurrency | An `asyncio` worker pool runs several queries in parallel with a shared stop signal on `maxEmails` |
| Retry logic and proxy rotation | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not silently counted as empty |
| Blocked-query requeue | Failed or blocked queries are re-queued once at the end of the run |
| Resumable state | Progress is stored in the key-value store keyed by a hash of your input, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Streaming dataset writes | Each lead is pushed to the Apify dataset the moment it is found |
| Run summary logging | Pages fetched, blocked pages, retries and emails per page are reported at the end |

***

### How the WooCommerce Email Scraper Works: Crawler and Parser Pipeline

The WooCommerce Email Scraper pipeline is short and deliberately transparent. There is no browser, no JavaScript rendering, no authentication and no cookies.

**1. Read input.** The Actor loads your keywords, optional location, email domains and limits.

**2. Build footprint queries.** It composes Google queries from the quoted phrase `"Powered by WooCommerce"` plus your keyword and email domain — never a `site:` operator.

**3. Fetch search result pages.** Pagination runs asynchronously with `aiohttp` through the Apify **GOOGLE\_SERP** proxy, with retry logic and a fresh proxy session on every attempt.

**4. Parse result blocks.** For each result the WooCommerce Email Scraper finds the `<h3>` title, walks up to the smallest enclosing block, and reads the title, the breadcrumb host and the snippet.

**5. Recover the store URL.** Because any host is accepted, the breadcrumb host becomes the merchant's store URL for that row.

**6. Extract and normalise emails.** A domain-filtered regex pulls addresses out of the block text, then normalisation and the junk filter clean them up.

**7. Deduplicate and push.** Every unique email is written to the dataset immediately, so you can start exporting mid-run.

Base queries run first, so the earliest rows the WooCommerce Email Scraper writes are usually the highest-signal ones.

***

### What Structured Data Does the WooCommerce Email Scraper Extract?

The Actor produces one dataset item per unique email, and every item carries the same 14 fields.

Alongside the address you get the store label Google printed, the merchant's own domain, and the page snippet the email was lifted from.

Because WooCommerce storefronts are entirely self-branded, `accountName` is the merchant's own shop name — "Cedar & Ash Candle Co.", never a platform handle. That is expected metadata here, not a defect.

You also get full provenance: the keyword and the exact Google query that produced the lead, plus a UTC timestamp.

That provenance matters when you are building a WooCommerce store owners email list. It shows which keyword is actually productive in your niche so you can retire the ones that are not.

Nothing outside these 14 fields is collected. The WooCommerce Email Scraper does not touch orders, customers, revenue figures or anything behind a login.

***

### WooCommerce Email Scraper Input Schema

Every field below is taken verbatim from the WooCommerce Email Scraper input schema in `.actor/actor.json`.

| Field | Type | Default | Description |
|---|---|---|---|
| `keywords` | array (required) | `["online store", "shop"]` | Search terms describing the WooCommerce 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 with several phrasings |
| `queryModifiers` | array | `["email", "contact us", "wholesale", "customer service", "stockist"]` | 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 |

#### JSON input example

```json
{
  "keywords": ["online store", "candle shop", "coffee roaster"],
  "location": "Portland",
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 300,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact us", "wholesale", "customer service", "stockist"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Why query expansion matters for merchant discovery

Google returns roughly 300 results for any single query, which is a hard ceiling on a one-shot search.

With `expandQueries` on, `online store` × `@gmail.com` becomes a base query, a quoted query, an `intitle:` query and one query per modifier — each still anchored on the same footprint phrase:

```text
"Powered by WooCommerce" online store "@gmail.com"
"Powered by WooCommerce" "online store" "gmail.com"
"Powered by WooCommerce" intitle:"online store" "@gmail.com"
"Powered by WooCommerce" online store wholesale "@gmail.com"
"Powered by WooCommerce" online store stockist "@gmail.com"
```

Because deduplication is global, expansion can only add leads to the WooCommerce Email Scraper dataset. Leave it enabled unless you are running a deliberately tiny test.

***

### WooCommerce Email Scraper Output Schema

Every dataset item produced by the WooCommerce Email Scraper contains all 14 fields below.

| 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 — on WooCommerce, the merchant's own shop name |
| `fullName` | Display name parsed from a profile-style title; empty for plain page titles |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or page snippet, cleaned of labels and engagement 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 |

#### JSON output example

```json
{
  "network": "WooCommerce",
  "keyword": "candle shop",
  "query": "\"Powered by WooCommerce\" candle shop wholesale \"@gmail.com\" \"Portland\"",
  "title": "Wholesale Enquiries — Cedar & Ash Candle Co.",
  "accountName": "Cedar & Ash Candle Co.",
  "fullName": "Cedar & Ash Candle Co.",
  "username": null,
  "profileUrl": "https://cedarandashcandles.com",
  "url": "https://cedarandashcandles.com",
  "description": "Small-batch soy candles poured in Portland. Wholesale and stockist enquiries: hello.cedarandash@gmail.com",
  "email": "hello.cedarandash@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2026-08-31T09:42:17+00:00"
}
```

Notice that `username` is `null` while `profileUrl` and `url` both hold the merchant's own domain. That is the normal shape of a row from this Actor.

Export the WooCommerce Email Scraper dataset as JSON, CSV, XLSX or HTML, or pull it through the Apify API into your CRM.

***

### How to Use the WooCommerce Email Scraper

**Step 1 — open the Actor.** Launch the [WooCommerce Email Scraper](https://apify.com/neuro-scraper/woocommerce-email-scraper) on the Apify platform.

**Step 2 — enter keywords.** Be specific about the product category. `candle shop`, `pet supplements` and `skate hardware` beat `shop`, because WooCommerce is a long tail of niche independent brands.

**Step 3 — pick your email domains.** Start with `@gmail.com` and `@yahoo.com`, then add `@outlook.com`, `@hotmail.com` or `@icloud.com` to widen the net — small merchants very often use a free inbox.

**Step 4 — set `maxEmails` and run.** Leave query expansion on so the automation works around Google's per-query result cap.

**Step 5 — export.** Download the data, or schedule a weekly run so newly indexed storefronts get picked up automatically.

If you want the same footprint workflow on a neighbouring platform, the [Shopify Store Email Scraper](https://apify.com/leads-scraper/shopify-store-email-scraper) is the closest sibling, and the [Etsy Email Scraper](https://apify.com/leads-scraper/etsy-email-scraper) reaches many of the same independent brands before they move to a self-hosted store.

***

### Use Cases for the WooCommerce Email Scraper

| Use case | How the WooCommerce Email Scraper helps |
|---|---|
| WordPress agency prospecting | Find self-hosted stores that need theme work, speed tuning or a rebuild |
| WooCommerce plugin and extension sales | Reach merchants who already run the exact stack your plugin targets |
| Managed hosting outreach | Self-hosted WooCommerce stores are the natural buyers for WooCommerce-tuned hosting |
| 3PL and fulfilment prospecting | Independent brands shipping their own orders are the ones ready to outsource |
| Payment and checkout providers | Contact merchants directly about gateway, BNPL or fraud tooling |
| Dropship and supplier outreach | Pitch new product lines to niche stores already selling in that category |
| B2B wholesale prospecting | The `wholesale` and `stockist` modifiers surface trade-account pages by design |
| Affiliate and partnership recruiting | Build an ecommerce store owner leads list of brands who could carry your product |
| Market research | Read `description` snippets to see how a product category positions and prices itself |
| CRM enrichment | Match store names and merchant domains to accounts you already track |

Because WooCommerce dominates the small-and-independent end of ecommerce, this Actor is at its best for high-volume, low-friction outreach rather than enterprise account-based selling.

In every one of these scenarios the WooCommerce Email Scraper does the tedious part — reading thousands of search results — and leaves the judgement to you.

***

### Who Uses the WooCommerce Email Scraper?

**Ecommerce agencies.** Design, CRO and paid-media shops that need a steady pipeline of independent brands running a stack they already know.

**App and plugin vendors.** Subscription, reviews, upsell, shipping and analytics extensions sell directly to store owners, and this is where those owners actually live.

**3PL and payment providers.** Fulfilment centres, carriers and gateways all need merchant domains, not marketplace handles, before they can qualify an account.

**Dropship suppliers.** Niche keywords plus the `stockist` modifier surface stores already selling adjacent products.

**B2B wholesalers.** Trade-account and wholesale pages are exactly the pages that publish a contact address, which is why they are the strongest source of leads here.

***

### Why Choose This WooCommerce Email Scraper

**It gives you the merchant's real website.** Because `accept_any_host` is on, `url` is a domain you can open, enrich and match — not a platform profile.

**It is honest about its source.** The WooCommerce Email Scraper reads Google's public index. Nothing more, nothing hidden.

**It is resilient.** Structural parsing plus a whole-page fallback means a Google layout change degrades output quality instead of breaking the crawler.

**It is resumable.** Migrations and aborts do not cost you a run; state is keyed by a hash of your input.

**It is precise.** Domain filtering, boundary-correct matching, obfuscation handling and the junk filter keep noise out of your dataset.

**It is part of a family.** The same engine powers dozens of sibling Actors, including the [BigCommerce Store Email Scraper](https://apify.com/neuro-scraper/bigcommerce-store-email-scraper) and the **Magento Store Email Scraper**, which use the same footprint technique on their own platforms.

***

### Limitations of the WooCommerce Email Scraper

These are real constraints. Read them before you set expectations.

- **The footprint caveat comes first.** Results depend on the store leaving the `"Powered by WooCommerce"` credit in place and on Google having indexed that page. Merchants who remove or rewrite the footer will not appear, so this is a subset of WooCommerce stores, never all of them.
- **Only publicly indexed emails.** If an address is not visible in Google's index, the WooCommerce Email Scraper cannot find it. Private data is never accessed.
- **Google's ~300-result cap.** A single query returns roughly 300 results at most. Query expansion exists precisely to work around this, so keep `expandQueries` on.
- **`possiblyTruncated`.** When Google's snippet ellipsis touches an address, this flag is set to `true`. Verify those rows before sending anything.
- **Apify GOOGLE\_SERP proxy required.** The Actor cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans are limited to 100 emails per run. Paid plans are uncapped.
- **`username` and `profileUrl` behave differently here.** A self-hosted storefront exposes no platform handle, so `username` is usually `null` and `profileUrl` falls back to the store's own domain. When `username` is populated it comes from a path segment Google printed, so treat `url` as the authoritative store link. This is a Google limitation, not a bug.
- **No guaranteed volume.** Results vary with keywords, domains and location.

Nothing here is affiliated with, endorsed by or officially supported by WooCommerce, Automattic or WordPress.

***

### Related Actors

| Actor | What it collects |
|---|---|
| [WooCommerce Email and Phone Number Scraper](https://apify.com/neuro-scraper/woocommerce-email-and-phone-number-scraper) | Emails and phone numbers from WooCommerce |
| [WooCommerce Phone Number Scraper](https://apify.com/neuro-scraper/woocommerce-phone-number-scraper) | Public phone numbers from WooCommerce |
| [AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) | Public contact emails from AliExpress |
| [Allegro Email Scraper](https://apify.com/neuro-scraper/allegro-email-scraper) | Public contact emails from Allegro |
| [Amazon Email Scraper](https://apify.com/leads-scraper/amazon-email-scraper) | Public contact emails from Amazon |
| [Best Buy Seller Email Scraper](https://apify.com/leads-scraper/best-buy-seller-email-scraper) | Public contact emails from Best Buy |
| [BigCommerce Store Email Scraper](https://apify.com/neuro-scraper/bigcommerce-store-email-scraper) | Public contact emails from BigCommerce Store |
| [Cdiscount Email Scraper](https://apify.com/neuro-scraper/cdiscount-email-scraper) | Public contact emails from Cdiscount |
| [Coupang Email Scraper](https://apify.com/neuro-scraper/coupang-email-scraper) | Public contact emails from Coupang |
| [Depop Email Scraper](https://apify.com/leads-scraper/depop-email-scraper) | Public contact emails from Depop |
| [DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper) | Public contact emails from DHgate |
| [eBay Email Scraper](https://apify.com/leads-scraper/ebay-email-scraper) | Public contact emails from eBay |
| [Ecwid Store Email Scraper](https://apify.com/neuro-scraper/ecwid-store-email-scraper) | Public contact emails from Ecwid Store |
| [Etsy Email Scraper](https://apify.com/leads-scraper/etsy-email-scraper) | Public contact emails from Etsy |
| [Faire Email Scraper](https://apify.com/leads-scraper/faire-email-scraper) | Public contact emails from Faire |
| [Flipkart Email Scraper](https://apify.com/leads-scraper/flipkart-email-scraper) | Public contact emails from Flipkart |
| [Home Depot Seller Email Scraper](https://apify.com/leads-scraper/home-depot-seller-email-scraper) | Public contact emails from Home Depot |
| [JD.com Email Scraper](https://apify.com/leads-scraper/jd-com-email-scraper) | Public contact emails from JD.com |
| [Lazada Email Scraper](https://apify.com/neuro-scraper/lazada-email-scraper) | Public contact emails from Lazada |
| [Lowe's Seller Email Scraper](https://apify.com/leads-scraper/lowes-seller-email-scraper) | Public contact emails from Lowe's |
| [MercadoLibre Email Scraper](https://apify.com/neuro-scraper/mercadolibre-email-scraper) | Public contact emails from MercadoLibre |
| [Mercari Email Scraper](https://apify.com/neuro-scraper/mercari-email-scraper) | Public contact emails from Mercari |
| [Newegg Email Scraper](https://apify.com/leads-scraper/newegg-email-scraper) | Public contact emails from Newegg |
| [Otto Email Scraper](https://apify.com/leads-scraper/otto-email-scraper) | Public contact emails from Otto |
| [Overstock Email Scraper](https://apify.com/leads-scraper/overstock-email-scraper) | Public contact emails from Overstock |
| [Poshmark Email Scraper](https://apify.com/leads-scraper/poshmark-email-scraper) | Public contact emails from Poshmark |
| [Rakuten Email Scraper](https://apify.com/neuro-scraper/rakuten-email-scraper) | Public contact emails from Rakuten |
| [Shopee Email Scraper](https://apify.com/leads-scraper/shopee-email-scraper) | Public contact emails from Shopee |
| [Shopify Store Email Scraper](https://apify.com/leads-scraper/shopify-store-email-scraper) | Public contact emails from Shopify Store |
| [Taobao Email Scraper](https://apify.com/leads-scraper/taobao-email-scraper) | Public contact emails from Taobao |
| [Target Seller Email Scraper](https://apify.com/neuro-scraper/target-seller-email-scraper) | Public contact emails from Target |
| [Temu Email Scraper](https://apify.com/leads-scraper/temu-email-scraper) | Public contact emails from Temu |
| [Tmall Email Scraper](https://apify.com/leads-scraper/tmall-email-scraper) | Public contact emails from Tmall |
| [Vinted Email Scraper](https://apify.com/leads-scraper/vinted-email-scraper) | Public contact emails from Vinted |
| [Walmart Email Scraper](https://apify.com/leads-scraper/walmart-email-scraper) | Public contact emails from Walmart |
| [Wayfair Email Scraper](https://apify.com/neuro-scraper/wayfair-email-scraper) | Public contact emails from Wayfair |
| [Wish Email Scraper](https://apify.com/leads-scraper/wish-email-scraper) | Public contact emails from Wish |
| [Wix Stores Email Scraper](https://apify.com/leads-scraper/wix-stores-email-scraper) | Public contact emails from Wix Stores |
| [Zalando Email Scraper](https://apify.com/leads-scraper/zalando-email-scraper) | Public contact emails from Zalando |
| [AliExpress Email and Phone Number Scraper](https://apify.com/neuro-scraper/aliexpress-email-and-phone-number-scraper) | Emails and phone numbers from AliExpress |
| [Allegro Email and Phone Number Scraper](https://apify.com/neuro-scraper/allegro-email-and-phone-number-scraper) | Emails and phone numbers from Allegro |
| [Amazon Email and Phone Number Scraper](https://apify.com/leads-scraper/amazon-email-and-phone-number-scraper) | Emails and phone numbers from Amazon |

### WooCommerce Email Scraper Example Run

A 3PL wants to pitch fulfilment to independent brands who are still packing boxes in a garage.

They run the WooCommerce Email Scraper with `keywords: ["candle shop", "coffee roaster", "pet supplements"]`, `customDomains: ["@gmail.com", "@outlook.com"]` and `maxEmails: 250`.

Query expansion turns three keywords into more than twenty phrasings, all anchored on `"Powered by WooCommerce"`; the crawler paginates through Google while the dataset fills with shop names, merchant domains and addresses.

They sort by `possiblyTruncated`, drop the flagged rows, open a handful of store URLs to sanity-check shipping volume, then export a CSV. Total setup time: under five minutes.

***

### WooCommerce Email Scraper FAQ

#### Does this find every store on WooCommerce?

No — and no tool built this way can. The WooCommerce Email Scraper only reaches stores whose pages carry the `"Powered by WooCommerce"` footprint phrase *and* were indexed by Google. Merchants who removed the footer credit are simply not reachable by this method.

#### Why does the query have no `site:` operator?

Because WooCommerce merchants run on their own domains. There is no shared host to restrict to, so the Actor searches the quoted footprint phrase instead.

#### Does the WooCommerce Email Scraper log into WooCommerce or WordPress?

No. It never logs in, never uses a WooCommerce API and never opens a merchant's site. All data comes from publicly indexed Google search results.

#### What is in the `url` field?

The merchant's own domain, taken from Google's result breadcrumb. That is the deliberate advantage of this Actor over a marketplace scraper.

#### Why is `username` usually `null`?

A self-hosted storefront has no platform handle for Google to print. `profileUrl` therefore falls back to the store's own domain, which is the link you actually want.

#### Where do the emails actually come from?

From Google result titles, breadcrumbs and snippets — typically contact pages, wholesale pages, stockist pages and about pages where the merchant published an address themselves.

#### Is this a WooCommerce email extractor or a full store scraper?

It is a WooCommerce email extractor. It returns the 14 fields listed above and nothing else — no products, no prices, no orders, no customer data.

#### Do I need an Apify proxy?

Yes. The WooCommerce Email Scraper requires the Apify GOOGLE\_SERP proxy and cannot run without Apify proxy credentials.

#### How many emails can it collect per run?

Free Apify plans are capped at 100 emails per run. Paid plans are uncapped, bounded only by your `maxEmails` value and what Google has indexed.

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

Google's snippet ellipsis touched the email, so the address may be cut off. Verify those rows before sending.

#### Should I leave query expansion enabled?

Yes. Google caps a single query at roughly 300 results, and query expansion is how the WooCommerce Email Scraper reaches past that ceiling.

#### Can I restrict results to one country?

Set `countryCode` to a two-letter code such as `US`, `GB` or `DE`, and optionally add a `location` phrase that is appended to every query.

#### Does it deduplicate?

Yes, globally. An email appears once per run no matter how many queries or pages surfaced it.

#### What happens if a run is interrupted?

Progress is saved in the key-value store, keyed by a hash of your input, and flushed on `PERSIST_STATE`, `MIGRATING` and `ABORTING`. Restarting resumes rather than starting over.

#### Is this affiliated with WooCommerce?

No. The WooCommerce Email Scraper is an independent tool and is not affiliated with, endorsed by or officially supported by WooCommerce, Automattic or WordPress.

***

### Responsible Use and GDPR

Publicly visible does not mean consent to bulk marketing. Follow GDPR, CAN-SPAM, PECR and any other law that applies to you and to the merchants you contact.

Keep outreach relevant to the store's actual business, identify yourself honestly, honour opt-outs immediately, and delete records you no longer have a lawful basis to hold.

Many of the addresses this Actor returns are business contact addresses published for exactly this purpose — treat them accordingly, and do not use the WooCommerce Email Scraper to build spam lists.

***

### Leave a review

If the WooCommerce 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, bug reports or a custom build request? Email **neurodata.apify@gmail.com** and include your run ID so the WooCommerce Email Scraper logs can be checked quickly.

# Actor input Schema

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

Search terms describing the WooCommerce 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 WooCommerce.

## `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": [
    "online store",
    "shop"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact us",
    "wholesale",
    "customer service",
    "stockist"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by WooCommerce 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": [
        "online store",
        "shop"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact us",
        "wholesale",
        "customer service",
        "stockist"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/woocommerce-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": [
        "online store",
        "shop",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact us",
        "wholesale",
        "customer service",
        "stockist",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/woocommerce-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": [
    "online store",
    "shop"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact us",
    "wholesale",
    "customer service",
    "stockist"
  ]
}' |
apify call neuro-scraper/woocommerce-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neuro-scraper/woocommerce-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/ZtU8cXbf50zG37lzT/builds/dzowf6W6jTszByoe1/openapi.json
