Etsy Scraper — Products, Prices, Reviews & Shop Data
Pricing
from $3.00 / 1,000 etsy product extracteds
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
Maintained by CommunityActor stats
3
Bookmarked
298
Total users
16
Monthly active users
5 hours ago
Last modified
Categories
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
| Field | Type | Purpose |
|---|---|---|
searchQueries | array of string | Etsy search keywords. Each keyword becomes a separate search. |
startUrls | array of request sources | Direct Etsy URLs, including search result pages, product pages, and shop pages. |
maxResults | integer | Maximum total results to extract. |
category | string | Etsy category filter such as jewelry-and-accessories or home-and-living. |
sortOrder | string | Sort search results by relevance, price, or recency. |
minPrice | string | Minimum product price in USD. |
maxPrice | string | Maximum product price in USD. |
freeShippingOnly | boolean | Returns products offering free shipping. |
onSaleOnly | boolean | Returns products currently on sale. |
includeProductDetails | boolean | Adds product-page fields such as description, materials, tags, images, variations, shipping origin, and processing time. |
includeReviews | boolean | Adds review rows and requires includeProductDetails. |
maxReviewsPerProduct | integer | Caps review rows per product listing. |
proxyConfiguration | object | Proxy 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.
| Field | Type | Meaning |
|---|---|---|
listing_id | string or null | Unique Etsy listing identifier extracted from the product URL. |
title | string or null | Product title as shown on Etsy. |
url | string or null | Product listing URL. |
price | number or null | Current listing price. |
original_price | number or null | Original price before discount. |
currency | string or null | ISO currency code. |
is_on_sale | boolean or null | Whether the listing is discounted. |
rating | number or null | Average star rating out of 5. |
review_count | integer or null | Total customer review count. |
num_favorers | integer or null | Number of Etsy favorites. |
shop_name | string or null | Seller shop name. |
shop_url | string or null | Seller shop URL. |
shop_location | string or null | Seller location as displayed on Etsy. |
shop_sales_count | integer or null | Shop sales count. |
thumbnail_url | string or null | Main listing thumbnail image. |
images | array of string or null | All product images when product details are enabled. |
is_free_shipping | boolean or null | Free shipping status. |
badge_star_seller | boolean or null | Star Seller badge status. |
badge_bestseller | boolean or null | Bestseller badge status. |
badge_etsy_pick | boolean or null | Etsy's Pick badge status. |
description | string or null | Full product description when product details are enabled. |
materials | array of string or null | Materials list when product details are enabled. |
tags | array of string or null | Seller tags when product details are enabled. |
variations | array or null | Product variations when product details are enabled. |
shipping_from | string or null | Shipping origin when product details are enabled. |
processing_time | string or null | Processing time when product details are enabled. |
review_id | string or null | Review identifier for review rows. |
review_rating | integer or null | Review star rating for review rows. |
review_text | string or null | Review text for review rows. |
reviewer_name | string or null | Reviewer display name for review rows. |
review_date | string or null | Review date for review rows. |
scrape_mode | string | listing, product, shop, or review. |
scraped_at | string | ISO 8601 extraction timestamp. |
source_url | string | URL 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-startis charged once per run.result-itemis charged once for each product, search-card or shop-item row saved to the dataset.- Review rows are saved without a
result-itemcharge. - 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, andshoprows describe Etsy listings from their respective source types.reviewrows represent individual customer reviews.source_urltells you which Etsy page was scraped.scraped_atgives the extraction timestamp.- Fields such as
description,materials,tags,images, andvariationsappear when product details are enabled. - Review rows place review content in
review_id,review_rating,review_text,reviewer_name, andreview_date.
Provenance and scope:
- Records come from public Etsy pages and public search-index fallback behavior described in the live contract.
- Diagnostics live in
OUTPUTandRUN_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
- Then use Etsy Keyword Research with Listing Evidence to extend Etsy Scraper — Products, Prices, Reviews & Shop Data research with a complementary discovery contract.
- Then use Etsy Listings Scraper - Search Results & URLs to extend Etsy Scraper — Products, Prices, Reviews & Shop Data research with a complementary discovery contract.
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.