Etsy Scraper — Products, Prices, Reviews & Shop Data avatar

Etsy Scraper — Products, Prices, Reviews & Shop Data

Pricing

from $3.00 / 1,000 etsy product extracteds

Go to Apify Store
Etsy Scraper — Products, Prices, Reviews & Shop Data

Etsy Scraper — Products, Prices, Reviews & Shop Data

Scrape Etsy product listings, prices, ratings, seller info, Star Seller & Bestseller badges, materials, tags, shop catalogs & customer reviews. MCP/API-ready.

Pricing

from $3.00 / 1,000 etsy product extracteds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

3

Bookmarked

298

Total users

16

Monthly active users

5 hours ago

Last modified

Share

What is Etsy Scraper?

This Apify Actor is built for people who need structured Etsy marketplace data from search keywords, direct Etsy URLs, or both. It accepts Etsy search queries, product pages, search result pages, and shop pages, and returns one dataset record per extracted Etsy listing, shop item, or customer review row. Each record includes stable fields such as title, URL, price, currency, ratings, review counts, seller info, badges, thumbnails, and source metadata so you can analyze products, compare shops, or feed the results into AI and reporting workflows.

Coverage note: Etsy often challenges automated browsers. When that happens for a search keyword, the Actor reads the same search through a fallback route that returns search-card fields (title, URL, price, sale price, rating, review count, shop, thumbnail, free-shipping flag). Product-page details, badges and review rows need the browser route, so on blocked runs those fields stay null. OUTPUT.indexedResults tells you how many rows came from the fallback.

Best fit and connected workflows

This Actor fits workflows where Etsy data needs to stay structured from the first query through the last dataset row:

  • Keyword research on Etsy search pages, with filtering by category, price range, sale status, and free shipping.
  • Product research from direct listing URLs, including optional full product details such as description, materials, tags, images, variations, shipping origin, and processing time.
  • Shop catalog extraction from Etsy shop URLs for seller-level research.
  • Review collection when you need customer review rows alongside product data.
  • AI and automation pipelines through Apify MCP, APIs, spreadsheets, and downstream analytics.

For review-specific follow-up work, pair this Actor with the Etsy Reviews Scraper when your next step is focused on review depth from a returned Etsy record.

Practical scenario

Maya, a marketplace analyst, starts with handmade necklace and a few shop URLs from a competitor shortlist. She enables includeProductDetails for a sample of listings and keeps includeReviews on for the products she wants to compare. The dataset returns title, price, rating, review_count, shop_name, shop_location, badge_star_seller, badge_bestseller, and tags. Maya uses those fields to compare pricing, identify badge patterns, and decide which shop catalog to inspect next.

Input

FieldTypePurpose
searchQueriesarray of stringEtsy search keywords. Each keyword becomes a separate search.
startUrlsarray of request sourcesDirect Etsy URLs, including search result pages, product pages, and shop pages.
maxResultsintegerMaximum total results to extract.
categorystringEtsy category filter such as jewelry-and-accessories or home-and-living.
sortOrderstringSort search results by relevance, price, or recency.
minPricestringMinimum product price in USD.
maxPricestringMaximum product price in USD.
freeShippingOnlybooleanReturns products offering free shipping.
onSaleOnlybooleanReturns products currently on sale.
includeProductDetailsbooleanAdds product-page fields such as description, materials, tags, images, variations, shipping origin, and processing time.
includeReviewsbooleanAdds review rows and requires includeProductDetails.
maxReviewsPerProductintegerCaps review rows per product listing.
proxyConfigurationobjectProxy settings, with Apify residential proxies as the default.

Focused input example:

{
"searchQueries": ["handmade necklace"],
"startUrls": [
{ "url": "https://www.etsy.com/shop/MoonCraftStudio" }
],
"maxResults": 25,
"category": "jewelry-and-accessories",
"sortOrder": "most_relevant",
"minPrice": "10",
"maxPrice": "80",
"freeShippingOnly": true,
"onSaleOnly": false,
"includeProductDetails": true,
"includeReviews": true,
"maxReviewsPerProduct": 5
}

Output

Each dataset record is a flat JSON object. The required fields are scrape_mode, scraped_at, and source_url. Other fields are populated when the source and scrape mode provide them.

FieldTypeMeaning
listing_idstring or nullUnique Etsy listing identifier extracted from the product URL.
titlestring or nullProduct title as shown on Etsy.
urlstring or nullProduct listing URL.
pricenumber or nullCurrent listing price.
original_pricenumber or nullOriginal price before discount.
currencystring or nullISO currency code.
is_on_saleboolean or nullWhether the listing is discounted.
ratingnumber or nullAverage star rating out of 5.
review_countinteger or nullTotal customer review count.
num_favorersinteger or nullNumber of Etsy favorites.
shop_namestring or nullSeller shop name.
shop_urlstring or nullSeller shop URL.
shop_locationstring or nullSeller location as displayed on Etsy.
shop_sales_countinteger or nullShop sales count.
thumbnail_urlstring or nullMain listing thumbnail image.
imagesarray of string or nullAll product images when product details are enabled.
is_free_shippingboolean or nullFree shipping status.
badge_star_sellerboolean or nullStar Seller badge status.
badge_bestsellerboolean or nullBestseller badge status.
badge_etsy_pickboolean or nullEtsy's Pick badge status.
descriptionstring or nullFull product description when product details are enabled.
materialsarray of string or nullMaterials list when product details are enabled.
tagsarray of string or nullSeller tags when product details are enabled.
variationsarray or nullProduct variations when product details are enabled.
shipping_fromstring or nullShipping origin when product details are enabled.
processing_timestring or nullProcessing time when product details are enabled.
review_idstring or nullReview identifier for review rows.
review_ratinginteger or nullReview star rating for review rows.
review_textstring or nullReview text for review rows.
reviewer_namestring or nullReviewer display name for review rows.
review_datestring or nullReview date for review rows.
scrape_modestringlisting, product, shop, or review.
scraped_atstringISO 8601 extraction timestamp.
source_urlstringURL that was scraped.

Illustrative output record:

{
"listing_id": "1234567890",
"title": "Handmade Silver Moonstone Ring - Boho Jewelry Gift for Her",
"url": "https://www.etsy.com/listing/1234567890/handmade-silver-moonstone-ring",
"price": 34.99,
"original_price": 45,
"currency": "USD",
"is_on_sale": true,
"rating": 4.8,
"review_count": 312,
"num_favorers": 1847,
"shop_name": "MoonCraftStudio",
"shop_url": "https://www.etsy.com/shop/MoonCraftStudio",
"shop_location": "United States",
"shop_sales_count": 4821,
"thumbnail_url": "https://i.etsystatic.com/12345678/r/il/abc123/1234567890/il_340x270.1234567890_abc1.jpg",
"images": null,
"is_free_shipping": true,
"badge_star_seller": true,
"badge_bestseller": false,
"badge_etsy_pick": false,
"description": null,
"materials": null,
"tags": null,
"variations": null,
"shipping_from": null,
"processing_time": null,
"review_id": null,
"review_rating": null,
"review_text": null,
"reviewer_name": null,
"review_date": null,
"scrape_mode": "listing",
"scraped_at": "2026-04-09T12:30:00.000Z",
"source_url": "https://www.etsy.com/search?q=handmade+necklace"
}

How it works

This Actor accepts Etsy search keywords, direct Etsy URLs, or both in one run. Search keywords create separate Etsy searches. Direct URLs can point to search result pages, individual listings, or shop pages. The actor can extract core listing fields from search results, and when includeProductDetails is enabled it visits individual product pages for richer fields such as descriptions, materials, tags, all images, variations, shipping origin, and processing time. When includeReviews is enabled, it adds customer review rows and uses maxReviewsPerProduct to cap the review count per listing.

Residential proxies are configured by default through Apify, which matches the live contract's proxy setup and helps the actor run against Etsy's public pages. The actor also stores execution diagnostics separately in OUTPUT and RUN_SUMMARY, while the product dataset contains the extracted records.

Pricing

This Actor uses Pay per event pricing, plus Apify platform usage.

  • apify-actor-start is charged once per run.
  • result-item is charged once for each product, search-card or shop-item row saved to the dataset.
  • Review rows are saved without a result-item charge.
  • Runs that save no rows are not charged result-item.

Event prices are shown on the Pricing tab. Example: a run that saves 100 product rows plus their review rows is charged 100 result-item events and one apify-actor-start event, plus platform usage. maxResults caps the billed rows.

Use with AI agents (MCP)

This Actor is usable through Apify MCP and exposes a typed Etsy extraction tool for agents that need marketplace data in structured JSON. It is the Actor khadinakbar/etsy-all-in-one-scraper.

Scrape Etsy search results for handmade necklaces and recent shop listings. Return product titles, prices, ratings, seller names, badge fields, and review rows when available. Use residential proxies and keep the result set focused on the provided keywords and URLs.

Output interpretation:

  • listing, product, and shop rows describe Etsy listings from their respective source types.
  • review rows represent individual customer reviews.
  • source_url tells you which Etsy page was scraped.
  • scraped_at gives the extraction timestamp.
  • Fields such as description, materials, tags, images, and variations appear when product details are enabled.
  • Review rows place review content in review_id, review_rating, review_text, reviewer_name, and review_date.

Provenance and scope:

  • Records come from public Etsy pages and public search-index fallback behavior described in the live contract.
  • Diagnostics live in OUTPUT and RUN_SUMMARY, not in the dataset rows.
  • Pagination follows the provided keyword, URL, and result cap settings.
  • Cost scales with billed product rows (review rows are free) plus Apify platform usage.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/etsy-all-in-one-scraper').call({
searchQueries: ['handmade necklace'],
maxResults: 20,
includeProductDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Best results and outcome guidance

Use searchQueries for keyword-led discovery and startUrls for known Etsy pages. Keep maxResults aligned with the segment you want to inspect, especially when running multiple search terms. Turn on includeProductDetails when title, price, shop metadata, badges, materials, tags, and product media need to be compared from the product page. Turn on includeReviews when review rows are part of the analysis and set maxReviewsPerProduct to a focused value for the review sample size you need. For category-led research, pair category with sortOrder and a price range to keep the dataset centered on a specific market slice.

Each run writes OUTPUT.outcome: COMPLETE when the requested rows were saved, PARTIAL when the run time budget ran out after saving some rows (the run still succeeds and keeps them), VALID_EMPTY when Etsy has no matching listings, and UPSTREAM_FAILED (run fails, nothing charged) when every route was blocked. The Actor stops about 30 seconds before the run timeout so saved rows are never lost to a timeout.

Continue the workflow

Design note

I found that the dataset contract keeps diagnostics outside the product rows: scrape_mode, scraped_at, and source_url are required in every record, while run status and diagnostics are stored in OUTPUT and RUN_SUMMARY.

FAQ

How should I choose between searchQueries and startUrls?
Use searchQueries when you have keywords or product names. Use startUrls when you already have an Etsy search page, product page, or shop page.

Which workflow is the right next step after shop extraction?
If you need customer reactions for a returned product or shop item, send the result to the Etsy Reviews Scraper.

When does the Actor return review rows?
review rows appear when includeReviews is enabled together with includeProductDetails.

How can I keep the dataset centered on one Etsy niche?
Combine a search keyword with category, sortOrder, and a price range so the results stay focused on the niche you want to analyze.

What records come from a shop URL?
A shop URL produces shop-catalog records with the same flat output schema, and the dataset row includes scrape_mode: "shop".

Responsible use

This Actor is intended for lawful extraction of publicly available Etsy data. Use it in ways that respect Etsy's terms, applicable privacy rules, and your local laws. Keep requests focused on the data you need, and review downstream handling before storing, sharing, or automating the output.