Etsy Scraper: Product Listings, Prices, Tags, Shop Sales avatar

Etsy Scraper: Product Listings, Prices, Tags, Shop Sales

Pricing

from $5.40 / 1,000 listings

Go to Apify Store
Etsy Scraper: Product Listings, Prices, Tags, Shop Sales

Etsy Scraper: Product Listings, Prices, Tags, Shop Sales

Etsy product research: full listings for keywords or URLs, $7.20 per 1,000, 10% under the most used Etsy scraper's $8, whose input works as is. Price, sale price, favorites, rating, tags, materials, variations, shipping and shop sales in every row; review text $4.50 per 1,000. Free error rows.

Pricing

from $5.40 / 1,000 listings

Rating

0.0

(0)

Developer

Arcadium Data

Arcadium Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

Research a niche before you open a shop, price your products against the market, or track the tags and best sellers of competing shops. Give it keywords, Etsy category links or listing URLs and it returns one JSON row per listing: price and sale price, favorites, the listing's own rating and review count, tags, materials, variations, shipping and delivery estimate, and the shop's sales count and rating. Review text is optional. $7.20 per 1,000 listings and $4.50 per 1,000 reviews; you pay only for rows you get.

Why this actor

  • Drop-in input. Input written for yumitori/etsy-listings-scraper (queries, maxResults, maxPages, sort, country, onSaleOnly, freeShippingOnly), yumitori/etsy-search-scraper (searchTerms, maxResultsPerTerm, sortOn, sortOrder), epctex/etsy-scraper (startUrls, search, maxItems, includeDescription) or automation-lab/etsy-scraper (searchQuery, sort, freeShipping, onSale) works as it is.
  • A full listing for 10% less. Every row is a full listing (variations, sale price, the listing's rating, shop and shipping), not just a search card, at $7.20 per 1,000 against $8 at yumitori/etsy-listings-scraper, the most used Etsy scraper (free plan, Apify Store, 2026-10-31).
  • Runs that finish. 14.9% of epctex/etsy-scraper's runs failed or timed out (1,997 time-outs and 69 failures of 13,904 runs, Apify Store, 30 days to 2026-10-31). 30 of our 30 runs since 2026-10-22 succeeded (scheduled and test runs, Apify run history). Unknown listing ids and unreadable inputs come back as free error rows.
  • Etsy's own filters: price range, ship-to country and sort order. Run the same keywords weekly and you have a price, rank and favorites history.
RowFree planBusiness (Gold) and above
Listing (full details)$7.20 per 1,000$5.40 per 1,000
Review (only when requested)$4.50 per 1,000$3.38 per 1,000

Built by Arcadium Data: public data, dated and agent-ready, never personal data.

Use with AI agents

Returns Etsy listings (price, sale price, favorites, rating, review count, tags, materials, variations, shipping, shop sales and rating, rank) for keywords, category URLs or listing URLs. Agents can call it through the Apify MCP server (https://mcp.apify.com, open source as apify/actors-mcp-server) as arcadium/etsy-products: the input schema is read from the actor, the result is a dataset of JSON rows.

Input example (minimal):

{
"searchTerms": ["ceramic mug"],
"maxResultsPerSearch": 20
}

What comes back: one listing row per listing (charged), one review row per review when maxReviewsPerListing is above 0 (charged), and a free error row for an input that could not be read. Filter on the rowType field. The error row carries rowType: "error", a code (invalid_input, not_found, blocked, unavailable, filter_unsupported or no_match), a message and the input it is about. Retry on blocked and unavailable later; do not retry the other codes with the same input.

Cost of the call above: 20 listings at $7.20 per 1,000 plus the $0.001 start fee is about $0.15. Error rows are never charged.

What you get

FieldWhat it holds
listingId, title, urlThe listing id (the number in the link), its title and link.
price, currency, priceUsdPrice in the seller's currency (lowest option when options change the price), and Etsy's US-dollar figure.
salePrice, discountPercent, onSaleThe sale price and discount while a sale runs.
favoritesHow many shoppers saved the listing.
rating, reviewCount, ratingCountsThis listing's own reviews: average, count and per-star counts.
tags, materialsThe seller's search tags and materials.
category, categoryPath, taxonomyIdEtsy category.
variationsBuyer options (color, size, personalization...) with the price per option when it differs.
imagesFull-size image links.
whenMade, isDigital, isCustomizable, isMadeToOrder, isBestsellerWhat kind of item it is.
shippingShips from, free or cost, delivery estimate to the US, returns policy.
shopThe shop as a business: name, link, lifetime sales, rating, review count, location, active listings, favorites, opening date, Star Seller badge.
createdAt, updatedAtListing dates (a renewal resets createdAt).
searchInput, searchRank, isAdThe keyword or URL that found it, the organic position, and whether it was a paid placement.
scrapedAtWhen the row was collected.

Output example:

{
"rowType": "listing",
"platform": "etsy",
"listingId": "962939986",
"title": "Leather Envelope Wallet for Women, Personalized Mini Card Wallet, Full Grain Crazy Horse",
"url": "https://www.etsy.com/listing/962939986",
"price": 64,
"currency": "USD",
"salePrice": 57.6,
"discountPercent": 10,
"onSale": true,
"favorites": 4979,
"rating": 4.95,
"reviewCount": 245,
"tags": ["Envelope Wallet", "Women's Leather", "Mini Credit Card", "Handmade Wallet", "card wallet"],
"materials": ["Full Grain Crazy Horse Leather"],
"category": "Wallets",
"variations": [{ "name": "Primary color", "options": [{ "value": "Tan", "price": null, "available": true }] }],
"whenMade": "2020_2026",
"shipsFromCountry": "TR",
"shipping": { "shipsFrom": "Türkiye", "freeShipping": true, "deliveryEstimate": "Oct 26-Nov 2", "deliverTo": "United States", "returns": "Returns & exchanges accepted within 30 days." },
"shop": { "shopId": "28165607", "shopName": "YukonLeatherGoods", "sales": 6583, "rating": 4.92, "reviewCount": 1412, "location": "Dover, Delaware", "isStarSeller": true },
"searchInput": "leather wallet",
"searchRank": 3,
"isAd": false
}

Review rows (rowType: "review") hold reviewId, listingId, rating, text, date, sellerResponse and hasPhoto.

Input

{
"searchTerms": ["ceramic mug", "leather wallet"],
"maxResultsPerSearch": 100,
"sortBy": "newest",
"minPrice": 20,
"maxPrice": 60,
"shipTo": "US",
"freeShipping": true,
"maxReviewsPerListing": 10
}
FieldWhat it does
searchTermsOne or more keywords. Each is searched on its own.
startUrlsListing URLs or ids for full details; search, market or category URLs (https://www.etsy.com/c/jewelry/necklaces) to read their results.
maxResultsPerSearchListings per keyword or search URL. Default 50.
maxItemsOptional cap on charged rows for the whole run.
sortByrelevance (default), newest, price_asc, price_desc or top_reviews.
minPrice, maxPricePrice range in US dollars.
shipToTwo-letter country the items must ship to, e.g. GB.
freeShipping, onSaleOnly free-shipping or discounted listings.
includeAdsAlso return the paid placements among the results (off by default, flagged isAd).
maxReviewsPerListing, reviewSortReview rows per listing (default 0) and their order: newest, relevance, highest, lowest.
descriptionshort (default, 300 characters), full or none.
includeShippingThe shipping block (on by default).
includeErrorRowsA free row for every input that returned nothing. On by default.

Inputs of other Etsy actors work unchanged: queries, searchQueries, searchQuery, maxResults, sort (score, created, price-asc, most_relevant, recently_listed...), country, onSaleOnly, freeShippingOnly, listingUrls and includeDescription are mapped to the fields above. yumitori's maxPages becomes maxResultsPerSearch at 36 listings per page (maxResults wins when both are set), and its sortOn + sortOrder pair becomes sortBy (score → relevance, created → newest, price + up/down → price_asc/price_desc; updated keeps relevance). Not supported: digitalOnly, handmadeOnly, the carts and lastsale sorts, and epctex's proxy (the actor picks its own proxy).

Use it from an AI assistant

Use the Apify actor "arcadium/etsy-products" to research an Etsy niche.
Input: {"searchTerms":["resin coaster"],"maxResultsPerSearch":60}
Each dataset row with rowType "listing" is one listing. Key fields: title, price, salePrice, favorites, reviewCount, tags, shop.sales.
Run it, then list the 10 listings with the most favorites, the tags they share, and the typical price band.

Use it from code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("arcadium/etsy-products").call(run_input={
"searchTerms": ["ceramic mug"],
"maxResultsPerSearch": 100,
})
for l in client.dataset(run["defaultDatasetId"]).iterate_items():
if l["rowType"] == "listing":
print(l["searchRank"], l["price"], l["favorites"], l["shop"]["shopName"], l["title"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('arcadium/etsy-products').call({
startUrls: ['https://www.etsy.com/listing/962939986'],
maxReviewsPerListing: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.rowType === 'review').length, 'reviews');

Pricing

You pay per row delivered, at the price of your Apify plan. Error rows are free.

Apify planPer 1,000 listingsPer 1,000 reviews
Free$7.20$4.50
Starter (Bronze)$6.48$4.05
Scale (Silver)$5.76$3.60
Business (Gold)$5.40$3.38
Platinum$5.40$3.38
Diamond$5.40$3.38

Plus a one-off $0.001 per GB of memory when a run starts.

Set a maximum cost per run in the Apify run options and the actor stops before it goes over.

Use cases

  • Niche research: search a keyword, sort by favorites and review count, read the tags of the winners.
  • Competitor tracking: run the same listing URLs weekly and compare price, sale, favorites and reviews.
  • Category sizing: how many listings, what price bands, how many shop sales behind them.
  • Product sourcing: filter by price and ship-to country, then check delivery estimates.

Limitations

  • Public listing data only. Nothing behind a login.
  • Prices are in the seller's currency (currency), with Etsy's US-dollar figure in priceUsd. Shipping and delivery estimates are for a US shopper.
  • Search pages show what Etsy decides to show at that moment: rank and paid placements change from run to run.
  • A listing found by two keywords is returned (and charged) once, with the first keyword and its rank.
  • createdAt is the date Etsy keeps for the listing; a renewal resets it, so old listings can look new.
  • The number of sales of a single listing and "in carts" counts are not part of the public listing data; the shop's lifetime sales are.

Privacy

Only listing and shop business data is collected. No buyer or reviewer names, profiles or photos, no shop owner names, no emails or phone numbers (they are removed from descriptions and review texts).

FAQ

How fresh is the data? It is read when you run the actor, so it matches what Etsy shows at that moment.

Why are some listings marked isAd? With includeAds on, the paid placements on each results page are returned too and flagged. They carry no rank.

A keyword returned an error row. Why? no_match means Etsy has no results for it. blocked or unavailable means the page could not be read this time; try again later.

Something looks wrong in the output. Who do I tell? Open an issue on the actor page with the run link. We read them all.