# Etsy Seller Leads Scraper \[$4.50/1K💰] | Shops (`ahmed_jasarevic/etsy-seller-leads`) Actor

Find Etsy shops by keyword and export seller leads with sales, reviews, rating, location, active listings, shop age, owner profile and message link. $4.50 per 1,000 leads.

- **URL**: https://apify.com/ahmed_jasarevic/etsy-seller-leads.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Etsy Seller Leads Scraper – Shops, Sales & Contact Links

Find **Etsy shops** by keyword and turn them into a clean seller-lead dataset. Get shop names, sales, reviews, rating, location, active listings, shop age, owner username, profile URL, avatar and a ready-to-use Etsy message link. **$4.50 per 1,000 leads** on FREE and BRONZE, **$4 per 1,000** on SILVER and GOLD+.

### Etsy Seller Leads For Outreach And Research

Etsy is a marketplace of millions of small businesses. This Actor helps you build targeted seller lists without browsing shop pages one by one.

- **Wholesale and partnership outreach** — find shops in a niche and contact sellers.
- **Affiliate and creator programs** — recruit established shops with proven sales.
- **Market research** — size a category and compare sellers by country.
- **Competitor tracking** — monitor shop growth, listings and ratings over time.
- **Lead enrichment** — add sales, reviews, location and shop age to a CRM.

### How It Works

![How the Etsy Seller Leads Scraper works: keyword search to structured shop leads with sales, reviews and contact links.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-etsy-seller-leads.webp)

Give the Actor one or more search terms such as `pottery`, `handmade jewelry` or `ceramic mug`. It finds matching shops, deduplicates them by shop ID, applies your filters and writes each lead to the dataset as soon as it is found. You can review results while the run is still going.

- One row per unique Etsy shop.
- Up to 50 search queries per run.
- Filters for sales, reviews, rating, listings, age and country.
- Leads stream to the dataset in small batches.
- No Etsy account required.

### Search And Filter Etsy Sellers

Use broad shop-name-like keywords for the best coverage, then filter:

- **Performance** — minimum sales, reviews, rating and active listings.
- **Shop age** — minimum years on Etsy.
- **Geography** — country codes or names.
- **Status** — exclude vacation, frozen and closed shops.
- **Volume** — cap unique leads with `maxShops`.

Long product phrases may match few shops. Try related terms such as `pottery`, `ceramics` and `mug` as separate queries.

### Shop And Owner Fields

Each lead can include the shop ID, user ID, shop name, shop URL, headline, owner username, sales count, active listing count, rating, review count, rating count in the past year, star label, location, country code, open date, years on Etsy, vacation/frozen flags, shop status, coupon description, About-section flag, avatar, icon, contact URL, owner profile URL, source query, rank and timestamp.

Etsy does not expose websites, social links, emails or phone numbers in this public shop data. Every lead still includes the seller’s Etsy username, public profile URL and message link.

### Input – Configure An Etsy Lead Run

| Field | Type | Default | Notes |
|---|---|---|---|
| `searchQueries` | array | `["pottery", "handmade jewelry"]` | Keywords used to find matching shops; up to 50 |
| `maxShops` | integer | `1000` | Maximum unique leads across all queries |
| `minSales` | integer | `0` | Minimum lifetime sales |
| `minReviews` | integer | `0` | Minimum review count |
| `minRating` | number | `0` | Minimum average rating from 0 to 5 |
| `minActiveListings` | integer | `0` | Minimum active listings |
| `maxActiveListings` | integer | `0` | Maximum active listings; `0` means no limit |
| `minYearsOnEtsy` | number | `0` | Minimum shop age in years |
| `countries` | array | `[]` | Country codes or names; empty means all |
| `activeOnly` | boolean | `true` | Exclude vacation, frozen and closed shops |
| `requestDelayMillis` | integer | `250` | Pause between result pages |

### Output – Seller Lead Fields

- **Shop** — `shopId`, `shopName`, `shopUrl`, `headline`, `shopStatus`, `openDate`, `yearsOnEtsy`
- **Owner** — `userId`, `shopOwner`, `ownerProfileUrl`, `contactUrl`
- **Performance** — `salesCount`, `activeListingCount`, `rating`, `reviewCount`, `ratingCountPastYear`, `stars`
- **Location** — `location`, `countryCode`
- **Status** — `isVacation`, `isFrozen`, `activeOnly`
- **Media** — `avatarUrl`, `iconUrl`
- **Discovery** — `query`, `rank`, `scrapedAt`

### Example Input – US And Canadian Pottery Shops

```json
{
  "searchQueries": ["pottery", "ceramic mug"],
  "maxShops": 2000,
  "minSales": 100,
  "minRating": 4.5,
  "countries": ["US", "CA"]
}
```

### Example Output – Etsy Shop Lead

```json
{
  "shopId": 17382530,
  "userId": 123456,
  "shopName": "NaturalEnergetics",
  "shopUrl": "https://www.etsy.com/shop/NaturalEnergetics",
  "headline": "Orgone & Tensor Creations",
  "shopOwner": "NaturalEnergetics",
  "salesCount": 144,
  "activeListingCount": 19,
  "rating": 4.96,
  "reviewCount": 43,
  "ratingCountPastYear": 43,
  "stars": "5",
  "location": "The Channon, Australia",
  "countryCode": "AU",
  "openDate": "2020-01-28T09:32:26.000Z",
  "yearsOnEtsy": 6.8,
  "isVacation": false,
  "isFrozen": false,
  "shopStatus": "active",
  "couponDescription": null,
  "hasAbout": true,
  "avatarUrl": "https://i.etsystatic.com/...",
  "iconUrl": "https://i.etsystatic.com/...",
  "contactUrl": "https://www.etsy.com/messages/new?with_id=123456&referring_id=17382530&referring_type=shop&recipient_id=123456&from_action=contact-seller",
  "ownerProfileUrl": "https://www.etsy.com/people/NaturalEnergetics",
  "query": "pottery",
  "rank": 1,
  "scrapedAt": "2026-10-31T12:00:00.000Z"
}
```

### Export Leads And Schedule Refresh

Download JSON, CSV, Excel or HTML, or use the Apify API. Send new leads to Google Sheets, Airtable, Slack, Make, Zapier or a webhook. Schedule weekly runs to monitor a niche and export fresh sellers.

### Related Actors

- [Etsy Scraper](https://apify.com/axlymxp/etsy-scraper) — collect product and listing data
- [Shopify Product Scraper](https://apify.com/ahmed_jasarevic/shopify-store-scraper) — compare independent-store sellers
- [Contact Details Scraper](https://apify.com/ahmed_jasarevic/contact-details-scraper) — enrich seller websites with public contact details
- [Google Search Scraper](https://apify.com/ahmed_jasarevic/google-search-scraper) — research niche demand and competitors

### FAQ

#### Does the Actor collect emails, phones or social links?

No. Etsy does not expose those fields in public shop data. Every lead includes the Etsy username, public profile URL and a ready-to-use message link.

#### Do I need an Etsy account?

No. The Actor reads public shop data and does not require an Etsy login.

#### Why do some leads have no rating?

New or inactive shops may have no reviews. Etsy can return a zero rating or omit the rating object.

#### Why is the country code empty for some shops?

Etsy does not always expose a country code even when a location string is present. Use `location` as a fallback.

#### Why do some shops have no About section?

The `hasAbout` flag reflects what Etsy reports publicly. Some shops hide or do not publish an About page.

#### How many queries can I use?

Up to 50 `searchQueries` per run. Results are deduplicated by shop ID.

#### How much does it cost?

FREE and BRONZE users pay **$0.0045 per lead** ($4.50 per 1,000). SILVER and GOLD+ users pay **$0.004 per lead** ($4 per 1,000), plus a small Actor Start event.

### For AI Agents & LLM Apps

Returns one row per unique Etsy shop with performance, location, owner and contact-link fields.

Minimal working input:

```json
{ "searchQueries": ["pottery"], "maxShops": 20, "minSales": 100 }
```

Output fields: `shopId, userId, shopName, shopUrl, headline, shopOwner, salesCount, activeListingCount, rating, reviewCount, ratingCountPastYear, stars, location, countryCode, openDate, yearsOnEtsy, isVacation, isFrozen, shopStatus, couponDescription, hasAbout, avatarUrl, iconUrl, contactUrl, ownerProfileUrl, query, rank, scrapedAt`.

Behaviors an agent should know:

- Leads are deduplicated by `shopId`.
- `maxShops` caps unique leads across all queries.
- `activeOnly` defaults to true and excludes vacation, frozen and closed shops.
- No emails, phones or social links are available.
- `contactUrl` opens Etsy’s message form with the seller preselected.
- Free users get a 10-lead preview.

Billing: **$0.0045 per lead** on FREE/BRONZE ($4.50 per 1,000) or **$0.004 per lead** on SILVER/GOLD+ ($4 per 1,000), plus a small Actor Start event.

### Legal & Compliance Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Etsy.

It collects publicly available shop data. Sellers’ sales, ratings and locations are shown as Etsy reports them and may change. Users are responsible for complying with Etsy’s Terms of Use, anti-spam and privacy law, and local marketing rules. Contact sellers only through permitted channels and with a lawful basis. Nothing here is legal advice.

### SEO Keywords

etsy seller leads, etsy scraper, etsy shops, etsy sellers, etsy leads, etsy shop data, etsy sales data, etsy reviews, etsy ratings, etsy shop search, etsy contact links, etsy marketing, handmade sellers, marketplace leads, ecommerce leads, seller discovery, etsy api, etsy data export

# Actor input Schema

## `searchQueries` (type: `array`):

Etsy keywords used to find matching shops, e.g. pottery, handmade jewelry, ceramic mug. Queries run in order until the total shop limit is reached, and results are deduplicated by shop ID.

## `maxShops` (type: `integer`):

Maximum number of unique shop leads to stream to the dataset across all queries. The Actor stops as soon as this number is reached.

## `minSales` (type: `integer`):

Only keep shops with at least this many lifetime sales.

## `minReviews` (type: `integer`):

Only keep shops with at least this many reviews.

## `minRating` (type: `number`):

Only keep shops with at least this average rating (0-5).

## `minActiveListings` (type: `integer`):

Only keep shops with at least this many active listings.

## `maxActiveListings` (type: `integer`):

Only keep shops with at most this many active listings. Set to 0 for no limit.

## `minYearsOnEtsy` (type: `number`):

Only keep shops that opened at least this many years ago.

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

Optional country filter. Use ISO codes (US, GB, DE) or country names (United States, Germany). Leave empty for all countries.

## `activeOnly` (type: `boolean`):

Exclude shops that are on vacation, frozen or closed.

## `requestDelayMillis` (type: `integer`):

Pause between shop-search pages. A small delay is polite and avoids rate limits. Set to 0 for maximum speed.

## Actor input object example

```json
{
  "searchQueries": [
    "pottery",
    "handmade jewelry"
  ],
  "maxShops": 1000,
  "minSales": 0,
  "minReviews": 0,
  "minRating": 0,
  "minActiveListings": 0,
  "maxActiveListings": 0,
  "minYearsOnEtsy": 0,
  "countries": [],
  "activeOnly": true,
  "requestDelayMillis": 250
}
```

# Actor output Schema

## `shops` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "searchQueries": [
        "pottery",
        "handmade jewelry"
    ],
    "countries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/etsy-seller-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 = {
    "searchQueries": [
        "pottery",
        "handmade jewelry",
    ],
    "countries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/etsy-seller-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 '{
  "searchQueries": [
    "pottery",
    "handmade jewelry"
  ],
  "countries": []
}' |
apify call ahmed_jasarevic/etsy-seller-leads --silent --output-dataset

```

## MCP server setup

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