Etsy Products & Listings Scraper (Search, Shop, Category) avatar

Etsy Products & Listings Scraper (Search, Shop, Category)

Pricing

from $0.92 / 1,000 products

Go to Apify Store
Etsy Products & Listings Scraper (Search, Shop, Category)

Etsy Products & Listings Scraper (Search, Shop, Category)

Scrape Etsy products from keywords, search, category, shop and listing URLs: title, price, sale, shop, ratings, badges, images. Free price summary per search or shop: median, quartiles, share on sale, top shops. Details add favorites, description, stock. $1 per 1,000, +$3.40 with details.

Pricing

from $0.92 / 1,000 products

Rating

0.0

(0)

Developer

Gautham Krishna

Gautham Krishna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Get Etsy listings as clean rows with price, sale price, shop and rating, for sellers and analysts doing product and price research.

Use cases, each with a ready-to-run example:

Each row has the title, price, sale price, discount, shop, shop rating, badges, free shipping and a full-size image. Feed it keywords or Etsy URLs (search, category, shop or listing) and it returns one row per product. Turn on listing details to also get the description, all images, favorites, listing reviews, materials, stock, shipping cost and more. Turn on the price summary to also get one free row per keyword or URL with the price median and quartiles, the share on sale and the top shops.

You pay $1 per 1,000 products, and less on Apify Store discount tiers (Bronze, Silver, Gold), down to $0.92 per 1,000 on Silver and Gold. Listing details add $3.40 per 1,000, only for rows where the details loaded. Failed rows are never charged.

At a glance

TopicDetails
InputKeywords, or Etsy search, category, market, shop or listing URLs. Filters: price range, ships-to country, free shipping, currency and sort order
OutputOne JSON row per product: title, price, sale price and discount, shop, shop rating, badges, free shipping, image and position. With listing details on, also the description, listing rating and review count, favorites, materials and stock. With the price summary on, one free summary row per keyword or URL
Price$0.001 per product ($1 per 1,000), or $0.95 per 1,000 on Bronze and $0.92 on Silver and Gold. Listing details add $0.0034 ($3.40 per 1,000) on every tier. No start fee. Failed rows are free
TestedFinal test run: 57 of 57 valid inputs returned products, and details loaded on 280 of 281 rows. 700 products without details took 22 seconds. Price summary test: 60 of 61 inputs returned 40 products and a summary each, and all 60 summaries matched an independent recount from their rows, to within a cent of rounding

What you can scrape

InputExampleWhat you get
Keywordceramic mugEtsy search results, the same as the Etsy search box
Search URLhttps://www.etsy.com/search?q=boho+rug&min=50&max=200Search results with the URL's filters kept
Category URLhttps://www.etsy.com/c/jewelry/necklacesCategory results
Market URLhttps://www.etsy.com/market/ceramic_mugThat market page's results
Shop URLhttps://www.etsy.com/shop/CaitlynMinimalistThe shop's catalogue, page by page
Listing URL or IDhttps://www.etsy.com/listing/1371848548 or 1371848548That one product, always with details

Locale URLs such as etsy.com/uk/... or etsy.com/ca/... work too. Put bare listing IDs in the keywords field, since the URL field only accepts URLs.

Fields

Every product row has these fields:

FieldWhat it holds
statusok for a product. Other values are explained below
listingId, title, urlThe listing
price, currencyCurrent price. With details on, maxPrice is the highest variation price
isOnSale, originalPrice, discountPercentSale data when the item is discounted
shopId, shopName, shopUrlThe seller. Keyword search cards often hide the shop name, so shopName can be empty without details
shopRating, shopReviewCountThe rating and review count Etsy shows on the card. These are shop-level numbers. Etsy rounds big counts, so 3.9k becomes 3900
freeShippingtrue when Etsy marks free shipping
badgesSuch as Bestseller, Star Seller, Popular now, Etsy's Pick
isAdtrue for sponsored listings. Ads are left out unless you turn them on
imageFull-size main image
input, positionWhich keyword or URL found it, and its place in the results

With listing details on, rows also get:

FieldWhat it holds
descriptionFull listing description. Email addresses and phone numbers are removed
imagesAll listing images, full size
rating, reviewCountThe listing's own rating and review count
favoritesHow many shoppers saved the listing
materials, categoryFrom the listing
availability, quantityAvailableStock status and quantity
shippingCost, shipsFrom, listedOnShipping to the selected country, origin and listing date
inCartsSuch as 20+ when Etsy shows it
relatedSearchesUp to 20 search phrases Etsy links from the listing
detailsIncludedtrue when the details loaded

Price summary row

Set priceSummary to true for Etsy price research in one call. Each keyword, search, market, category or shop URL that returned products then gets one extra row with status set to summary, after its products. Listing URLs get none. It covers the products returned, so maxItems sets the sample size, and sponsored listings count only when includeAds is on. The row is free, and it is worked out from the products already returned, so it adds no requests. In our test, the same 61 inputs used 0.0132 GB of proxy traffic with the summary on and with it off.

FieldWhat it holds
inputThe keyword or URL it summarises
productCountProducts returned for that input
currency, pricedCountThe currency of the price fields, and how many products they cover
priceMin, priceP25, priceMedian, priceP75, priceMax, priceAverageThe current price, sale price included. Quartiles interpolate between products, like Excel's QUARTILE.INC
onSalePercent, medianDiscountPercentShare of products on sale, and the median % off among them
freeShippingPercentShare with free shipping to the ships-to country
starSellerPercentShare from Star Sellers, over the products whose page shows the badge. Category cards and listing details show it. Keyword, search, market and shop cards do not, so it is null there unless listing details are on
shopCount, topShopsDistinct shops, and up to 10 shops with 2 or more listings, most listings first. shopName is null when the search cards hid it
messageOnly when a results page failed or your maximum charge stopped the run, so the summary covers fewer products

With listing details on, the row also has these, over the products whose listing page loaded:

FieldWhat it holds
detailsCountProducts with details
favoritesMedian, favoritesMaxFavorites
favoritesByPriceQuarterThe products sorted by price and cut into 4 groups of near-equal size, with each group's price range and median favorites
listingReviewCountMedian, listingRatingAverageThe listings' own review counts and ratings, where the page shows them
shippingCostMedianShipping cost to the ships-to country, where the page states it

Prices are never converted between currencies. Etsy prices every product in the run's currency, and every product in our tests, in USD and in EUR, came back in it. If a listing page ever answers in another currency, the summary leaves those products out of the price fields and adds otherCurrencies with a count per currency.

A keyword summary without details, from a test run on 2026-10-17:

{
"status": "summary",
"input": "soy candle",
"productCount": 40,
"currency": "USD",
"pricedCount": 40,
"priceMin": 3.25,
"priceP25": 13.03,
"priceMedian": 17.99,
"priceP75": 22.1,
"priceMax": 54.99,
"priceAverage": 19.04,
"onSalePercent": 30,
"medianDiscountPercent": 17.5,
"freeShippingPercent": 10,
"starSellerPercent": null,
"shopCount": 39,
"topShops": [
{ "shopId": "7997672", "shopName": "TeresaLynns", "listings": 2 }
]
}

Part of the summary for the same keyword from another test run, with listing details on and 20 products. The price, sale, shipping and shop fields are left out here:

{
"starSellerPercent": 75,
"detailsCount": 20,
"favoritesMedian": 1150.5,
"favoritesMax": 17539,
"favoritesByPriceQuarter": [
{ "priceFrom": 5.83, "priceTo": 11.04, "listings": 5, "favoritesMedian": 1418 },
{ "priceFrom": 11.65, "priceTo": 12, "listings": 5, "favoritesMedian": 895 },
{ "priceFrom": 12.9, "priceTo": 22, "listings": 5, "favoritesMedian": 2596 },
{ "priceFrom": 26.25, "priceTo": 54.99, "listings": 5, "favoritesMedian": 765 }
],
"listingReviewCountMedian": 298,
"listingRatingAverage": 4.85,
"shippingCostMedian": 0
}

Input

{
"searchQueries": ["ceramic mug", "leather wallet men"],
"startUrls": [
{ "url": "https://www.etsy.com/c/jewelry/necklaces" },
{ "url": "https://www.etsy.com/shop/CaitlynMinimalist" },
{ "url": "https://www.etsy.com/listing/1371848548/handmade-ceramic-mug-large-size" }
],
"maxItems": 100,
"includeDetails": false,
"priceSummary": true,
"sortBy": "price_asc",
"minPrice": 10,
"maxPrice": 60,
"shipsTo": "GB",
"freeShipping": false,
"currency": "USD"
}

maxItems applies to each keyword or URL separately. Sort, price, ships-to and free-shipping filters apply to keywords, search URLs, market URLs and category URLs. Shops always list in Etsy's own order.

Output example

Real rows from test runs on 2026-10-10.

A keyword result without details:

{
"status": "ok",
"input": "ceramic mug",
"position": 6,
"listingId": "4535842002",
"title": "Artisan Striped Coffee Mug Set with Saucers, Four Ceramic Tea Cups, Colorful Modern Drinkware, Housewarming Gift, Coffee Lover Gift 11-180",
"url": "https://www.etsy.com/listing/4535842002/artisan-striped-coffee-mug-set-with",
"price": 16,
"isOnSale": true,
"originalPrice": 20,
"discountPercent": 20,
"shopId": "61803485",
"shopName": "MintHarper",
"shopRating": 4.6,
"shopReviewCount": 31,
"freeShipping": true,
"badges": ["Bestseller"],
"shipsFrom": null,
"isAd": false,
"image": "https://i.etsystatic.com/61803485/r/il/de7087/8511996156/il_fullxfull.8511996156_7zb0.jpg",
"shopUrl": "https://www.etsy.com/shop/MintHarper",
"currency": "USD"
}

A category result with details on (description, images and related searches shortened here):

{
"status": "ok",
"input": "https://www.etsy.com/c/home-and-living/kitchen-and-dining/cookware",
"position": 5,
"listingId": "691230080",
"title": "Personalized Cutting Board, Fathers Day, Grilling Gift, Gift from daughter, Dad Gift, Personalized Grilling Board, Gift for Husband, Wood 71",
"url": "https://www.etsy.com/listing/691230080/personalized-cutting-board-fathers-day",
"price": 30,
"maxPrice": 54.6,
"currency": "USD",
"isOnSale": true,
"originalPrice": 50,
"discountPercent": 40,
"shopId": "19269755",
"shopName": "WallThingsCo",
"shopUrl": "https://www.etsy.com/shop/WallThingsCo",
"shopRating": 4.94,
"shopReviewCount": 8178,
"rating": 4.9,
"reviewCount": 314,
"favorites": 1305,
"freeShipping": true,
"shippingCost": 0,
"shipsFrom": "Westby, WI",
"listedOn": "Oct 7, 2026",
"badges": ["Etsy's Pick"],
"isAd": false,
"availability": "InStock",
"quantityAvailable": 725,
"category": "Home & Living < Kitchen & Dining < Cookware < Cutting Boards",
"materials": ["Walnut/Maple/Cherry"],
"relatedSearches": ["daddys grilling board", "grilling bbq", "custom cuttingboard father's day stepdad"],
"description": "*** Fast Shipping ***\n***Give a Gift That Lasts!***\n...",
"image": "https://i.etsystatic.com/19269755/r/il/b4c867/1919879321/il_fullxfull.1919879321_t8eu.jpg",
"images": [
"https://i.etsystatic.com/19269755/r/il/b4c867/1919879321/il_fullxfull.1919879321_t8eu.jpg",
"https://i.etsystatic.com/19269755/r/il/358626/1872355402/il_fullxfull.1872355402_b8i2.jpg"
],
"detailsIncluded": true
}

Row status

statusMeaningCharged
okA productYes
unavailableThe listing or shop no longer exists, or the listing is sold out or privateNo
no_resultsEtsy found nothing for this inputNo
summaryThe price summary for one keyword or URL, when priceSummary is onNo
invalid_inputNot a keyword or a supported Etsy URLNo
errorEtsy kept blocking the request after all retriesNo

If a listing page fails to load while details are on, you still get the product row with its search data. That row has detailsIncluded: false and a message, and it is charged as a product only.

Pricing

Prices are per 1,000 products or listing details.

EventNo discountBronzeSilverGold
Product returned$1$0.95$0.92$0.92
Listing details loaded for that product$3.40$3.40$3.40$3.40
Unavailable, no results, invalid input or failed requestFreeFreeFreeFree
Price summary rowFreeFreeFreeFree

Bronze, Silver and Gold are Apify Store discount tiers, and Apify's Pricing tab shows them as Starter, Scale and Business. Apify decides which tier an account is on.

A run of 1,000 search results costs $1, or $0.92 on Silver and Gold. The same run with listing details costs $4.40, or $4.32 on Silver and Gold. Details cost more because each one loads a full listing page through a residential proxy. Set a maximum cost per run in the run options and the scraper stops once it is reached.

Speed

In our tests, 700 products without details took 22 seconds. With details on, 281 products from 59 different inputs took 4 to 6 minutes at the default concurrency of 10.

Run it on a schedule

Etsy prices change often, and each run returns the listings and prices as they are at that moment. A daily run sent to a sheet builds a price history for a search, and with priceSummary on, the free summary row gives one line of price quartiles per keyword per day. The scraper has no only-new mode, so every run charges for every listing it returns. Keep maxItems at what you need.

  1. Set your input and click Save as a new task.
  2. On the task page, click Actions, then Schedule, and pick how often it runs. Apify's schedules guide covers cron times and time zones.
  3. On the task's Integrations tab, choose where each run's results go.
IntegrationWhat it does
SlackPosts a message to your channel when a run finishes
Google DriveSaves each run's results as a file in your Drive
WebhookSends the finished run, with its dataset ID, to your own URL
Make, Zapier, n8nAdds each new row to a Google Sheet, a CRM or a database

Each listing has a stable listingId, so a sheet can line up one listing's price across runs.

Use it from AI agents

The scraper works as a tool through the Apify MCP server in Claude, Cursor, VS Code and other MCP clients. An agent can pass a keyword or a shop URL and get structured product rows back. You can also call it through the Apify API, schedule it, or connect it to Make, Zapier and n8n.

More from heyitsgautham

Other actors from the same account.

FAQ

Why is shopName empty on some keyword results? Etsy's search cards show the shop name for only some results. Turn on includeDetails and every row gets the shop name from its listing page. Category and shop results always have it.

Can I get more than about 900 results for one keyword? Etsy stops search results at around 20 pages for visitors who are not signed in. Split the search with price ranges or sort orders to reach more listings.

Why do prices differ from what I see on Etsy? Etsy prices depend on currency and destination country. Set currency and shipsTo to match what you want to compare.

Does it log in or use the Etsy API? No. It reads the same public pages any visitor sees, with no account.

Does it return customer reviews or seller contact details? No. It does not collect reviewer names, emails or phone numbers, and it strips emails and phone numbers out of descriptions.

Limitations

  • Etsy's bot protection blocks some requests. The scraper retries on new residential IPs, which keeps failures rare but not zero. Failed rows are free.
  • The tags a seller typed are not shown on Etsy's public listing page. relatedSearches holds the search phrases Etsy links instead.
  • Variation prices are summarised as price (lowest) and maxPrice (highest), not listed per option.
  • Etsy changes its pages from time to time. If something breaks, open an issue on the Issues tab.