# Etsy Email Scraper (`leads-scraper/etsy-email-scraper`) Actor

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

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

### Etsy Email Scraper - public shop owner emails from Etsy

The **Etsy Email Scraper** turns publicly indexed Etsy pages into a deduplicated list of shop contact emails.
It is built for wholesale buyers hunting stockists, craft-supply vendors, boutique retailers, marketplace agencies and brand teams who need to reach the maker behind a shop.
Give it keywords, optional email domains and a location, and it returns a structured dataset ready for CSV, JSON or Excel export.

Etsy is a strong performer in this Actor family.
Shop pages sit on clean `/shop/` path handles, so the Etsy Email Scraper resolves shop identity and a canonical `https://www.etsy.com/shop/{username}` profile URL on the large majority of rows.
In a recent live test roughly 8 in 10 rows carried both an account label and a usable profile URL.

The Etsy Email Scraper does not log in, does not use Etsy's API and never opens etsy.com itself.
Every lead comes from Google's public index - titles, snippets and site labels - fetched through the Apify GOOGLE\_SERP proxy.
There is no browser, no JavaScript rendering, no authentication and no cookies.

#### What the Etsy Email Scraper does

The Etsy Email Scraper composes Google queries with the `site:` operator against etsy.com and reads the result blocks that come back.
A generated query looks like `site:etsy.com handmade shop wholesale "@gmail.com" "Portland"`.
Each block is parsed structurally, emails are pulled with a domain-filtered regex, and every unique address is pushed straight to the Apify dataset.

Etsy publishes shops under localised paths - `/uk/shop/...`, `/de/shop/...`, `/fr/shop/...` and more - and this config strips those locale segments before reading the handle.
That means a German or Australian result resolves to the same canonical shop URL as a US one, so the Etsy Email Scraper deduplicates one shop across locales instead of listing it several times.
It is a small detail that keeps a stockist list clean.

#### Why maker-economy teams use an Etsy Email Scraper

Finding the person behind an Etsy shop is normally manual: open the listing, click the shop, scan the About section, copy the contact line.
The Etsy Email Scraper compresses that into a single run that sweeps hundreds of Google result pages concurrently and deduplicates as it goes.
Every row records the keyword and the exact query that produced it, so outreach is fully attributable.

Emails published on Etsy shop and listing pages are almost always **business addresses**: shop enquiry inboxes, wholesale desks, customer-service aliases and stockist contacts.
That is what makes them appropriate for trade outreach, and it is also why the responsible-use section below matters.
The Etsy Email Scraper touches no private account data, no order data and nothing behind a login.

### Key features of the Etsy Email Scraper

| Feature | What it means in practice |
|---|---|
| Google-index sourcing | Reads publicly indexed Etsy results through the Apify GOOGLE\_SERP proxy - no login, no cookies, no browser |
| Shop-handle resolution | Etsy's `/shop/` paths mean `username` and `profileUrl` are filled on most rows |
| Locale-path stripping | Localised paths such as `/uk/shop/`, `/de/shop/` and `/fr/shop/` resolve to the same canonical shop URL |
| Query expansion | Base, quoted and `intitle:` variants plus one variant per query modifier; base queries run first |
| Domain filtering | Only emails on the domains listed in `customDomains` are kept |
| Global deduplication | Each address is emitted once per run, across every query and every page |
| Obfuscation handling | 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` never matches inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same result block |
| Async concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries and block detection | Up to 3 attempts per page with exponential backoff, a fresh proxy session per request, and CAPTCHA / "unusual traffic" / consent pages detected and retried rather than counted as empty |
| Blocked-query requeue | Blocked or failed queries are re-queued once at the end of the run |
| Resumable state | Key-value-store progress keyed by a hash of the input, with throttled saves plus saves on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Layout fallback | A whole-page fallback parser means a Google markup change degrades to "emails without account details", not "no emails" |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Etsy Email Scraper works

1. It reads your input - keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator against etsy.com.
3. It fetches result pages asynchronously through the Apify GOOGLE\_SERP proxy using `aiohttp`.
4. It locates each result's `<h3>` title and the smallest surrounding block, so it never depends on Google's CSS class names.
5. It extracts emails from that block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the dataset immediately.

That immediate push means leads land while the Etsy Email Scraper is still running, so an early abort keeps everything collected so far.
State is resumable and keyed by a hash of your input, so a migrated or restarted run continues from where it stopped.
Nothing is buffered until the end.

### Etsy Email Scraper input reference

Field names, types and defaults below are exactly what the Actor accepts.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["handmade shop", "seller"]` | Search terms describing the Etsy shops you want (niche, craft, product type) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the leading `@` is optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in 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` | Parallel queries |

#### Tuning the Etsy Email Scraper

The default `queryModifiers` are the giveaway that this config is tuned for the maker economy: `email`, `contact us`, `wholesale`, `customer service` and `stockist`.
`stockist` in particular is the phrase Etsy sellers use when they want retail partners, so it tends to surface shops that *want* to be contacted.
Swap in `trade pricing`, `bulk order` or `custom orders` depending on whether you are buying, retailing or commissioning.

This config targets a single domain, etsy.com, so `countryCode` is a lighter lever than on the multi-domain marketplaces such as the [Amazon Email Scraper](https://apify.com/leads-scraper/amazon-email-scraper) or the [eBay Email Scraper](https://apify.com/leads-scraper/ebay-email-scraper).
It still nudges which regional results the search proxy favours, which pairs well with a `location` phrase when you want makers in one country.
Keep `expandQueries` on: Google caps a single query at roughly 300 results, and expansion is how the Etsy Email Scraper gets past that ceiling.

#### Example input for the Etsy Email Scraper

```json
{
  "keywords": ["ceramic mugs handmade shop", "hand poured candles seller"],
  "location": "United Kingdom",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 250,
  "countryCode": "GB",
  "expandQueries": true,
  "queryModifiers": ["email", "contact us", "wholesale", "customer service", "stockist"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Etsy Email Scraper output fields

Every dataset item carries all fourteen fields below - no more, no fewer.

| 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 (handle or display name) |
| `fullName` | Display name parsed from a profile-style title; empty for listing captions |
| `username` | URL-safe handle when Etsy exposes one; otherwise `null` |
| `profileUrl` | Canonical shop URL when a handle is known; otherwise empty |
| `url` | Direct Etsy link when exposed, else the profile URL |
| `description` | Bio or listing 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 |

#### Example output from the Etsy Email Scraper

Row two comes from a localised `/uk/shop/` result that still resolves to the canonical shop URL; row three is the honest minority case - a listing snippet with an email but no shop handle.

```json
[
  {
    "network": "Etsy",
    "keyword": "ceramic mugs handmade shop",
    "query": "site:etsy.com ceramic mugs handmade shop wholesale \"@gmail.com\" \"United Kingdom\"",
    "title": "ClayfernStudio - Handmade Ceramic Mugs | Etsy",
    "accountName": "ClayfernStudio",
    "fullName": "Clayfern Studio",
    "username": "ClayfernStudio",
    "profileUrl": "https://www.etsy.com/shop/ClayfernStudio",
    "url": "https://www.etsy.com/shop/ClayfernStudio",
    "description": "Wholesale and stockist enquiries: clayfern.wholesale@gmail.com. Small-batch stoneware, made in Bristol.",
    "email": "clayfern.wholesale@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T12:02:11Z"
  },
  {
    "network": "Etsy",
    "keyword": "hand poured candles seller",
    "query": "site:etsy.com hand poured candles seller stockist \"@outlook.com\"",
    "title": "EmberholtCandles - Hand Poured Soy Candles | Etsy UK",
    "accountName": "EmberholtCandles",
    "fullName": "Emberholt Candles",
    "username": "EmberholtCandles",
    "profileUrl": "https://www.etsy.com/shop/EmberholtCandles",
    "url": "https://www.etsy.com/uk/shop/EmberholtCandles",
    "description": "Stockist enquiries welcome: hello@emberholtcandles.outlook.com. Soy wax, hand poured in Leeds.",
    "email": "hello@emberholtcandles.outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T12:03:40Z"
  },
  {
    "network": "Etsy",
    "keyword": "hand poured candles seller",
    "query": "site:etsy.com hand poured candles seller contact us \"@gmail.com\"",
    "title": "Personalised Candle Gift Set - Made to Order | Etsy",
    "accountName": "Etsy",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Custom and bulk orders: candleordersuk@gmail.com. Message before ordering for lead times.",
    "email": "candleordersuk@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T12:04:55Z"
  }
]
```

### Use cases for the Etsy Email Scraper

| Who | How they use the Etsy Email Scraper |
|---|---|
| Boutique retailers | Find makers who advertise stockist or wholesale terms and open a trade account |
| Craft-supply vendors | Reach shops in a material niche - clay, soy wax, resin, yarn - with bulk supply offers |
| Wholesale buyers | Build a category shortlist and send trade-pricing enquiries |
| Marketplace agencies | Prospect for SEO, photography and listing-optimisation clients |
| Brand-protection teams | Collect published contact points for shops listing against a protected design or trademark |
| Print-on-demand and fulfilment services | Reach makers who publish an operations or customer-service inbox |
| Market researchers | Map which Etsy niches publish trade contacts and which do not |
| Recruiters | Find studio owners hiring makers, packers or customer-service staff |

A productive pattern is to run the Etsy Email Scraper narrowly, one craft niche at a time, then merge the datasets.
Narrow runs keep attribution clean, because `keyword` and `query` record which phrasing produced each lead.
That turns your search language into something you can measure rather than guess at.

If Etsy is one channel among several, the same engine covers the wider maker and marketplace landscape - see the [Faire Email Scraper](https://apify.com/leads-scraper/faire-email-scraper) for wholesale brands, the [Depop Email Scraper](https://apify.com/leads-scraper/depop-email-scraper) for vintage and streetwear sellers, and the [Shopify Store Email Scraper](https://apify.com/leads-scraper/shopify-store-email-scraper) for makers who have graduated to their own storefront.
For overseas manufacturing of a design you commission, the [AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) covers supplier listings.

### Etsy Email Scraper limitations - stated honestly

- **Publicly indexed emails only.** If an address is not visible in Google's index, the Etsy Email Scraper cannot find it. It does not crawl etsy.com.
- **Google's result ceiling.** A single query returns roughly 300 results at most, which is exactly why `expandQueries` and `queryModifiers` exist.
- **`possiblyTruncated`.** Rows where Google's snippet ellipsis touched the address are flagged `true`. Verify those before sending.
- **Apify GOOGLE\_SERP proxy required.** The Etsy Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- **`username` and `profileUrl` are conditional.** They are filled only when Google's result exposes a shop handle. Etsy resolves well - roughly 8 in 10 rows in a recent live test - but listing-page results sometimes carry an email with no handle, leaving `username: null` and an empty `profileUrl`. Those rows still carry `accountName` and the email. This is a Google indexing limitation, not a bug.
- **No volume guarantee.** Results vary with keywords, domains, country and location. No count is promised.

### Responsible use

Emails published on Etsy shop and listing pages are usually business or customer-service addresses posted for trade and custom-order enquiries.
Many Etsy shops are one-person businesses, so treat these contacts with proportionate care: keep outreach relevant, honour opt-outs, and record a lawful basis if you operate under GDPR, PECR or similar rules.
Review Etsy's terms and your local marketing law before you send - the Etsy Email Scraper collects public data, but what you do with it is your responsibility.

This Actor is not affiliated with, endorsed by or officially supported by Etsy.

### FAQ about the Etsy Email Scraper

#### Does the Etsy Email Scraper log into Etsy?

No. It never logs in, never uses Etsy's API and never opens etsy.com. Everything comes from publicly indexed Google search results.

#### How often does `profileUrl` resolve?

Often. Etsy exposes shops on `/shop/` handles, and in a recent live test roughly 8 in 10 rows carried both identity and a usable profile URL.

#### Does it handle localised Etsy URLs?

Yes. Locale segments such as `/uk/`, `/de/`, `/fr/` and `/es/` are stripped before the handle is read, so one shop deduplicates across locales.

#### Which domain does it search?

etsy.com. This platform config targets that single domain.

#### Why is `stockist` a default query modifier?

Because it is the term Etsy sellers use when they are looking for retail partners, so it tends to surface shops that welcome trade contact.

#### Can it find emails on any domain?

Only the domains you list in `customDomains`. The default is `@gmail.com` and `@yahoo.com`; add corporate domains to widen the net.

#### How many emails can one run return?

Up to `maxEmails`, which accepts 1 to 10000. Free Apify plans are capped at 100 emails per run; paid plans are uncapped.

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

Google's snippet ellipsis touched that address, so it may be cut off. Verify before adding it to a send list.

#### Does it need proxies?

Yes - the Apify GOOGLE\_SERP proxy. The Etsy Email Scraper cannot run without Apify proxy credentials.

#### Can I resume an interrupted run?

Yes. Progress lives in the key-value store, keyed by a hash of your input, and is saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### What if Google changes its result markup?

Parsing is structural - the `<h3>` title plus its smallest surrounding block - with a whole-page fallback parser behind it. A layout change degrades to "emails without account details", not "no emails".

#### How many emails can the Etsy Email Scraper return per run?

Up to `maxEmails`. Beyond that, output depends on how many shops in your niche publish a contact address in the indexed text.

#### Are the emails verified?

No. The Etsy Email Scraper extracts what is published in the index. Run your own verification before a campaign.

### Getting started with the Etsy Email Scraper

1. Open the Etsy Email Scraper on Apify and press **Try for free**.
2. Replace the default `keywords` (`handmade shop`, `seller`) with your own craft-niche terms.
3. Add the email domains you care about to `customDomains`.
4. Raise `maxEmails`, optionally set a `location` phrase, and run it.
5. Export the dataset from the **Storage** tab when the Etsy Email Scraper finishes.

Start small - a `maxEmails` of 20 to 50 - to confirm your keywords and domains are pulling the right kind of shop.
Once a keyword set is producing useful rows, re-run the Etsy Email Scraper with a higher cap and more pages per query.

#### Exporting Etsy Email Scraper results

Every Etsy Email Scraper run writes to a standard Apify dataset, so you can download CSV, JSON, XML or Excel, or pull the rows through the Apify API and the JavaScript or Python clients.
The default dataset view surfaces the fields most people need first: email, account, name, username, profile, keyword, bio snippet and the truncation flag.
Deduplication is per run, so keep your own master list when you merge several Etsy Email Scraper datasets together.

### Related Actors

The Etsy Email Scraper belongs to a 41-Actor E-commerce & Marketplaces family sharing this engine.

| Actor | What it collects |
|---|---|
| [Etsy Email and Phone Number Scraper](https://apify.com/leads-scraper/etsy-email-and-phone-number-scraper) | Emails and phone numbers from Etsy |
| [Etsy Phone Number Scraper](https://apify.com/leads-scraper/etsy-phone-number-scraper) | Public phone numbers from Etsy |
| [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 |
| [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 |
| [WooCommerce Email Scraper](https://apify.com/neuro-scraper/woocommerce-email-scraper) | Public contact emails from WooCommerce |
| [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 |

### Leave a review

If the Etsy 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, a bug, or need a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

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

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

## `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": [
    "handmade shop",
    "seller"
  ],
  "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 Etsy 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": [
        "handmade shop",
        "seller"
    ],
    "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("leads-scraper/etsy-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": [
        "handmade shop",
        "seller",
    ],
    "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("leads-scraper/etsy-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": [
    "handmade shop",
    "seller"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact us",
    "wholesale",
    "customer service",
    "stockist"
  ]
}' |
apify call leads-scraper/etsy-email-scraper --silent --output-dataset

```

## MCP server setup

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