# Etsy Scraper: Listings with Prices, Shops, Sales | $1/1K (`one_dollar_store/etsy-listings-scraper`) Actor

$1 per 1,000 results, platform usage included. Search Etsy by keyword and get one row per listing: title, price, sale price and discount, shop name, rating, reviews and sales, ships from, Star Seller, Bestseller, free shipping and ad flags, image and link. No login.

- **URL**: https://apify.com/one_dollar_store/etsy-listings-scraper.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (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 $1.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.

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 Scraper: Listings with Prices, Shops and Sales

**$1 per 1,000 listings. Platform usage included. No rental, no minimum.**

Search Etsy the way a shopper does and get one row per listing on the results pages: title, price, sale price and discount, the shop's name, rating, review count and total sales, where it ships from, how long the shop has been on Etsy, and the Star Seller, Bestseller, Etsy's Pick, free shipping and ad flags. Each row links to the listing and its main image.

[Open it in Apify Console](https://console.apify.com/actors/7aYCCmbizp0C1mbXo/input)

### What it costs

| Listings | This actor |
|---|---|
| 1,000 | $1.00 |
| 10,000 | $10.00 |
| 100,000 | $100.00 |

One flat price, platform usage included, so there is no separate compute or proxy bill. Plus $0.001 per run. A daily run of 3 search terms with 100 listings each costs about $0.30, or about $9 a month.

### Why use it

- **The proxy Etsy needs is in the price.** Etsy turns away ordinary datacenter proxies, so the actor uses Apify Unblocker. You never see a proxy bill.
- **Shop data with each listing.** Rating, review count, total sales, shop age and ships from are read from the results page, with no extra request per shop. A field the card does not show is left out.
- **Badges and ads flagged.** Star Seller, Bestseller, Etsy's Pick, free shipping and paid placements are true or false fields, so you can count ads or drop them.
- **Etsy's own sort and price filters, in US dollars.** Every page is requested with Etsy's own region setting for the United States, so prices stay in dollars whatever proxy exit is used. Each listing is delivered once per search term, and the run stops at your spending limit.
- **Ends on time.** An optional time limit makes the run stop starting new pages and finish with the listings it has. Even without one, the run wraps up shortly before its own timeout, so the rows it found are kept.

### Quick start

1. Open the actor, type a search term, press **Start**.
2. Or paste this input:

```json
{ "searchTerms": ["personalized necklace"], "maxItems": 50 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~etsy-listings-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["ceramic mug"], "maxItems": 50}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/etsy-listings-scraper").call(
    run_input={"searchTerms": ["ceramic mug"], "maxItems": 100, "sortBy": "topReviews"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["price"], item["currency"], item["shopName"], item["title"])
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/etsy-listings-scraper
```

Then ask, for example: "Get 50 Etsy listings for 'personalized necklace' and tell me the typical price and which shops have the most sales."

### Switching from another Etsy actor

Most Etsy search actors take a search term and a result limit. Here they are `searchTerms` (a list, so one run can cover many searches) and `maxItems`, which counts per search term. The core fields are `listingId`, `url`, `title`, `price`, `currency` and `shopName`.

### Input

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `searchTerms` | list of text | none (required) | What to search for, one per line. |
| `maxItems` | number | 100 | Most listings per search term. Minimum 10, maximum 5,000. |
| `sortBy` | choice | `relevance` | `relevance`, `priceLowToHigh`, `priceHighToLow`, `newest` or `topReviews`. |
| `minPrice`, `maxPrice` | number (USD) | none | Keep only listings in this price range, using Etsy's own price filter. |
| `maxRunSeconds` | number | 0 (no limit) | Optional time limit in seconds, up to 3,600. After it the run starts no new pages and finishes with the listings it has. The form starts at 240 for a quick run; set 0 for big runs. |
| `proxyConfiguration` | proxy | Apify Unblocker | Etsy turns away ordinary datacenter proxies. Pages are requested for the United States, so prices stay in dollars. Its cost is included in the price. |

Example:

```json
{
  "searchTerms": ["personalized necklace", "ceramic mug"],
  "maxItems": 200,
  "sortBy": "topReviews",
  "minPrice": 15
}
```

### Output fields

| Field | Meaning |
| --- | --- |
| `listingId`, `url`, `title` | Etsy listing ID, link and title. |
| `price`, `originalPrice`, `discountPercent`, `currency` | Price shown, the struck through price and discount when on sale, and the currency. |
| `imageUrl` | Main listing image. |
| `shopName`, `shopId`, `shopUrl` | The shop. |
| `shopRating`, `shopReviewCount` | Shop star rating and number of reviews. |
| `shopSales` | Total sales of the shop, as Etsy shows it (for example 360k becomes 360000). |
| `shopAge` | How long the shop has been on Etsy, such as "4 years". |
| `shipsFrom` | Where the shop ships from. |
| `starSeller`, `bestseller`, `etsysPick`, `freeShipping` | Etsy's badges, true or false. |
| `badges` | All badge texts on the card, such as "Popular now". |
| `isAd` | True for paid placements in the results. |
| `searchTerm`, `page`, `positionOnPage` | Which search found it, the results page and the place on that page. |
| `scrapedAt` | When the row was read. |

### Sample results

Real rows from a test run on 4 October 2026 (`personalized necklace`). One full row:

```json
{"listingId": "1471778654", "title": "14k Gold Filled Hammered Circle Name Necklace | Custom Engraved Pendant | Handmade Personalized Jewelry",
 "url": "https://www.etsy.com/listing/1471778654/14k-gold-filled-hammered-circle-name",
 "price": 64, "originalPrice": 80, "discountPercent": 20, "currency": "USD",
 "imageUrl": "https://i.etsystatic.com/6807531/r/il/a9aeb8/4923148746/il_794xN.4923148746_o0nd.jpg",
 "shopName": "LyndyLouDesigns", "shopId": "6807531", "shopUrl": "https://www.etsy.com/shop/LyndyLouDesigns",
 "shopRating": 4.9, "shopReviewCount": 19200, "shopSales": 84300, "shopAge": "14 years", "shipsFrom": "Canton, Georgia",
 "starSeller": true, "freeShipping": true, "bestseller": true, "etsysPick": false, "badges": ["Bestseller"], "isAd": false,
 "searchTerm": "personalized necklace", "page": 2, "positionOnPage": 9, "scrapedAt": "2026-10-04T14:27:58.902Z"}
```

Three more, main fields only:

| listingId | price | originalPrice | shopName | shopSales | shipsFrom | badges | isAd |
|---|---|---|---|---|---|---|---|
| 1465101673 | 57.60 | 64.00 | LEILAjewelryshop | 158700 | San Diego, California | Bestseller | false |
| 1413455244 | 13.80 | 27.60 | AnyaShopStudio | 360000 | Ramsgate, United Kingdom | Popular now | true |
| 1810501864 | 52.80 | 132.00 | Goldmira | 17100 | United States | Bestseller | false |

### Limits

- Each results page takes about 15 to 65 seconds to load through the proxy. In our test runs on 6 October 2026, 50 listings usually took one to two minutes; in slow spells a run with the 240 second limit stopped near it with fewer rows. A run of 1,000 listings takes several minutes, so leave the time limit at 0 or set it high for big runs.
- A results page holds about 60 cards, regular listings and ads together. About half the time the proxy hands a page back with only the first 8 to 12 listings filled in. The actor keeps what the page shows and fetches more pages to make up the number you asked for, as far as the time limit allows. The listings it could not see are counted in the run summary (`listingsNotShown`).
- In our tests Etsy showed 20 results pages for searches sorted by relevance, so one search term gives at most about 1,000 listings in that order. A price sorted search showed 250 pages.
- A time limit (`maxRunSeconds`, 240 seconds in the form) can end a run before it reaches `maxItems`. You pay only for the rows delivered; raise the limit or set 0 for big runs.
- Shop sales, shop age and ships from are not on every card; when a card does not show them, the row leaves them out.
- Etsy applies the price filter before any sale discount, so a sale price can sit just under your minimum.
- Ads can repeat across pages; each listing is delivered once per search term.
- A run summary (pages, requests, refused pages) is saved in the key value store as `RUN_SUMMARY`, not in the dataset.

### FAQ

**How much does it cost to scrape 10,000 Etsy listings?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. Platform usage, including the Unblocker proxy, is included in the $1 per 1,000 price. Failed pages and the run summary are never charged.

**Who uses it?**
Etsy sellers sizing up a niche before making a product (what it sells for, who sells it, how many sales those shops have), and product and trend researchers comparing prices, discounts and bestsellers across many search terms.

**Do I need an Etsy account or API key?**
No. The actor reads the public search pages a logged out visitor sees.

**Why Apify Unblocker?**
Etsy refuses ordinary datacenter proxies on its search pages. Apify Unblocker gets the page through. You can pick residential proxy in the input instead.

**Why did I get fewer listings than I asked for?**
Usually one of three reasons: the run reached its time limit (raise `maxRunSeconds` or set it to 0), Etsy ran out of results for the search, or the proxy failed on several tries and the run stopped asking (it makes a set number of page requests per search term). The run summary in the key value store (`RUN_SUMMARY`) shows which one, under `stoppedBy`, `pagesFailed` and the counts per search term. You are charged only for rows delivered.

**Can I schedule it?**
Yes. Save the input as a task and add a schedule in Apify Console to follow prices, discounts and bestsellers over time.

**Is it legal?**
The actor collects only public data that anyone can see without logging in. You are responsible for following Etsy's terms and the law where you live, including data protection rules.

**Is this an official Etsy product?**
No. It is an independent tool and is not affiliated with or endorsed by Etsy.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included.

**Google and search**

- [Google News Scraper](https://apify.com/one_dollar_store/google-news-articles-scraper): News articles by keyword, topic or country.
- [Google Maps Leads Scraper](https://apify.com/one_dollar_store/google-maps-leads-scraper): Local businesses with phones, websites and emails.
- [Google Ads Transparency Scraper](https://apify.com/one_dollar_store/google-ads-transparency-scraper): Ads any advertiser or domain runs on Google.

**Maps and local business**

- [2GIS Business Scraper](https://apify.com/one_dollar_store/2gis-business-scraper): Businesses in Russia, Central Asia and the UAE.
- [Yandex Maps Scraper](https://apify.com/one_dollar_store/yandex-maps-business-scraper): Businesses on Yandex Maps around any city.
- [IndiaMART Supplier Scraper](https://apify.com/one_dollar_store/indiamart-supplier-scraper): Indian suppliers for any product, with phones.

**Social media**

- [Threads Scraper](https://apify.com/one_dollar_store/threads-post-scraper): Public Threads posts by keyword or profile.
- [Instagram Profile Scraper](https://apify.com/one_dollar_store/instagram-profile-data-scraper): Followers, posts and engagement for public profiles.
- [TikTok Hashtag Scraper](https://apify.com/one_dollar_store/tiktok-hashtag-videos-scraper): Videos, views and creators for any hashtag.
- [Pinterest Pin Search Scraper](https://apify.com/one_dollar_store/pinterest-pin-search-scraper): Public pins with images and outbound links.
- [Telegram Channel Scraper](https://apify.com/one_dollar_store/telegram-channel-posts-scraper): Posts, views and media from public channels.
- [Xiaohongshu Scraper](https://apify.com/one_dollar_store/xiaohongshu-explore-feed-scraper): RedNote notes from the public explore feeds.
- [Facebook Ad Library Scraper](https://apify.com/one_dollar_store/facebook-ad-library-scraper): Meta ads by keyword or advertiser page.

**Shopping**

- [Amazon Reviews Scraper](https://apify.com/one_dollar_store/amazon-product-reviews-scraper): Public reviews for any Amazon product.
- [AliExpress Product Scraper](https://apify.com/one_dollar_store/aliexpress-product-search-scraper): Products with prices, orders sold and ratings.
- [Carsales Scraper](https://apify.com/one_dollar_store/carsales-car-listings-scraper): Australian car listings with prices and specs.

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/one_dollar_store/zillow-rentals-scraper): US rentals by city, ZIP or search link.
- [Zillow Sold Homes Scraper](https://apify.com/one_dollar_store/zillow-sold-homes-scraper): Recently sold US homes with prices and dates.
- [Zillow Photos Scraper](https://apify.com/one_dollar_store/zillow-listing-photos-scraper): Every photo of a Zillow listing.

**Jobs**

- [Foundit Jobs Scraper](https://apify.com/one_dollar_store/foundit-jobs-search-scraper): Indian jobs with salary and experience filters.
- [Naukri Jobs Scraper](https://apify.com/one_dollar_store/naukri-job-listings-scraper): Naukri.com jobs by keyword, city and experience.

**Company records**

- [Bundesanzeiger Scraper](https://apify.com/one_dollar_store/bundesanzeiger-filings-scraper): German company filings and notices.
- [US Business Registry Search](https://apify.com/one_dollar_store/us-business-registry-search): Company records from 6 US state registries.

### Changelog

- October 2026: first release.

# Actor input Schema

## `searchTerms` (type: `array`):

What to search for on Etsy, one per line, the way you would type it into the Etsy search box.

## `maxItems` (type: `integer`):

Stop each search term after this many listings. Minimum 10.

## `sortBy` (type: `string`):

Order of the results, as in the Etsy sort menu.

## `minPrice` (type: `integer`):

Only listings at or above this price. Leave empty for no lower limit.

## `maxPrice` (type: `integer`):

Only listings at or below this price. Leave empty for no upper limit.

## `maxRunSeconds` (type: `integer`):

Optional. After this many seconds the run starts no new results pages and ends normally with the listings it already has. The form starts at 240 for a quick run. Set 0 for no limit of its own on big runs; the run then still wraps up shortly before its own timeout. A results page takes about 20 to 60 seconds through the proxy.

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

Etsy turns away ordinary datacenter proxies, so the default is Apify Unblocker. Pages are always requested for the United States, so prices are in US dollars and text is in English.

## Actor input object example

```json
{
  "searchTerms": [
    "personalized necklace"
  ],
  "maxItems": 50,
  "sortBy": "relevance",
  "maxRunSeconds": 240,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchTerms": [
        "personalized necklace"
    ],
    "maxItems": 50,
    "maxRunSeconds": 240,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/etsy-listings-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 = {
    "searchTerms": ["personalized necklace"],
    "maxItems": 50,
    "maxRunSeconds": 240,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/etsy-listings-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 '{
  "searchTerms": [
    "personalized necklace"
  ],
  "maxItems": 50,
  "maxRunSeconds": 240,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call one_dollar_store/etsy-listings-scraper --silent --output-dataset

```

## MCP server setup

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