Etsy Product Search Scraper
Pricing
from $1.99 / 1,000 results
Etsy Product Search Scraper
Etsy Product Search Scraper collects handmade and vintage listings by keyword - title, price, currency, shop rating, review count, processing days, return policy and image URLs. ποΈ For niche research and competitor pricing analysis.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Hub
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
ποΈ Etsy Product Search Scraper β Listing, Shop Rating & Shipping Data Extraction
The Etsy Product Search Scraper collects public Etsy listing data by keyword and returns it as clean, structured JSON β titles, prices, currency codes, listing URLs, shop ratings, origin country, processing times and return policies. Etsy is the largest marketplace for handmade, vintage and craft-supply goods, and its search results contain a dense layer of commercial signal that is tedious to read one listing at a time and very valuable in aggregate.
You supply a list of search keywords, set a total item limit, and the actor searches each keyword separately on Etsy and pushes one record per listing to your dataset. It is an HTTP-based scraper built on curl_cffi with browser-grade TLS impersonation and parsel for parsing, so there is no headless browser overhead.
One thing to be upfront about: Etsy is protected by DataDome, and it blocks non-proxied and datacenter traffic. A residential proxy group is required, which is why proxyConfiguration defaults to Apify Proxy with the RESIDENTIAL group. You can optionally supply a CapSolver API key so that solvable DataDome challenges are solved and retried automatically instead of the affected pages being skipped.
π What Data Can You Extract with This Etsy Scraper?
Every record is a flat JSON object with consistent keys, which maps directly onto a spreadsheet column layout or a database table. The fields fall into five practical groups.
| Category | Fields | What it gives you |
|---|---|---|
| Listing identity | title, url, image_urls | The listing title as published by the seller, the canonical Etsy listing URL, and the listing imagery |
| Pricing | price, currency_code | The listing price alongside its ISO currency code, so multi-region pulls can be normalised before comparison |
| Shop reputation | shop_average_rating, shop_total_rating_count | The shop's mean star rating and the number of reviews behind it β the two numbers that together indicate whether a rating is meaningful |
| Origin & fulfilment | origin_country_id, origin_postal_code, min_processing_days, max_processing_days | Where the item ships from and the seller's stated make-and-dispatch window |
| Buyer policies | are_returns_accepted, are_exchanges_accepted, return_deadline_in_days | Whether the seller accepts returns and exchanges, and how many days buyers get |
The pairing worth attention is shop_average_rating with shop_total_rating_count. A five-star average built on four reviews and a 4.8 average built on eleven thousand are not comparable signals, and any serious ranking of Etsy sellers has to weight the average by the count. Because both arrive as separate fields, you can apply a minimum-review threshold before you sort.
The second underrated pairing is min_processing_days and max_processing_days. On a handmade marketplace, processing time is often a larger share of total delivery time than shipping is, and it is the number that most directly reflects whether a seller is producing to order or shipping from stock.
π Key Features of the Etsy Scraper
| Feature | Description |
|---|---|
| π Multi-keyword search | Pass an array to keywords and each term is searched separately on Etsy, so one run can cover a whole product category |
| π― Global item cap | itemLimit caps the total number of listings returned across all keywords, giving every run a predictable ceiling |
| π Configurable residential proxies | proxyConfiguration is fully user-configurable and defaults to Apify Proxy with the RESIDENTIAL group, which Etsy's protections require |
| π Optional DataDome solving | Supply a CapSolver API key and solvable (t=fe) challenges are sent to CapSolver's DatadomeSliderTask and the returned cookie is retried automatically |
| β Rating plus review volume | Shop average rating and total rating count arrive as separate fields, so you can weight reputation properly instead of trusting a bare star figure |
| π Processing-time windows | Minimum and maximum processing days are captured per listing, exposing made-to-order lead times |
| β©οΈ Return and exchange policy | Returns accepted, exchanges accepted and return deadline in days are extracted as structured booleans and numbers |
| π± Currency-aware pricing | Prices come with an explicit currency_code, avoiding the classic mistake of comparing figures across regions |
| β‘ No headless browser | Built on curl_cffi, parsel and requests rather than a browser engine, keeping memory use and run overhead low |
π Why Choose This Etsy Scraper?
Purpose-built for Etsy's anti-bot reality. Etsy fronts its pages with DataDome, which is why generic scrapers return empty datasets against it. This Etsy scraper defaults proxyConfiguration to a residential group because datacenter traffic is blocked outright, and it adds an optional CapSolver integration so that challenges which can be solved are solved rather than causing the page to be dropped.
Fulfilment data, not just prices. min_processing_days, max_processing_days, origin_country_id and origin_postal_code describe how a listing actually gets to a buyer. For a marketplace where much of the inventory is made to order, that is often more decisive than price when you are analysing why one listing converts and another does not.
Reputation you can weight. Returning shop_average_rating and shop_total_rating_count as distinct fields means your analysis can apply a review-count floor before ranking. Scrapers that collapse reputation into a single star value throw that ability away.
Policy fields as real types. are_returns_accepted and are_exchanges_accepted come back as booleans and return_deadline_in_days as a number, so you can filter on them directly in SQL or pandas without parsing policy text.
π₯ Input
{"keywords": ["phone cover"],"itemLimit": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
π§ Etsy Scraper Input Fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
keywords | array of strings | β Yes | prefilled with ["phone cover"] | Search terms to look up on Etsy. Each keyword is searched separately. |
itemLimit | integer | No | 100 | Maximum total number of listings to return across all keywords. |
proxyConfiguration | object | No | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Etsy blocks non-proxied and datacenter traffic (DataDome). A residential proxy group is required. |
captchaSolverApiKey | string | No | β | Optional. If set, a solvable (t=fe) DataDome challenge is sent to CapSolver's DatadomeSliderTask and the returned cookie is retried automatically. Without this, pages that get a DataDome challenge are skipped. |
π‘ Input Examples
Single-keyword sample run
{"keywords": ["ceramic mug"],"itemLimit": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Category sweep across related search terms
{"keywords": ["personalised necklace","engraved bracelet","birthstone ring"],"itemLimit": 300,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
High-volume run with CapSolver enabled
{"keywords": ["macrame wall hanging", "woven wall art"],"itemLimit": 1000,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]},"captchaSolverApiKey": "CAP-XXXXXXXXXXXXXXXX"}
π€ Output
Each dataset item represents one Etsy listing found in search results.
{"title": "Personalised Leather Phone Cover - Custom Initials","price": 28.5,"currency_code": "USD","url": "https://www.etsy.com/listing/1234567890/personalised-leather-phone-cover","shop_average_rating": 4.9,"shop_total_rating_count": 3421,"origin_country_id": "209","min_processing_days": 1,"max_processing_days": 3,"origin_postal_code": "97205","are_returns_accepted": true,"are_exchanges_accepted": false,"return_deadline_in_days": 30,"image_urls": "https://i.etsystatic.com/12345678/r/il/abcdef/1234567890/il_794xN.1234567890_abcd.jpg"}
π§Ύ Etsy Scraper Output Fields
| Field | Type | Description |
|---|---|---|
title | string | null | Title of the item. |
price | string | number | Price of the item. |
currency_code | string | null | Currency code of the item. |
url | string | null | Canonical URL of the scraped item. |
shop_average_rating | number | null | Shop average rating of the item. |
shop_total_rating_count | integer | null | Number of shop total rating. |
origin_country_id | string | null | Identifier of the origin country. |
min_processing_days | number | null | Min processing days of the item. |
max_processing_days | number | null | Max processing days of the item. |
origin_postal_code | string | null | Origin postal code of the item. |
are_returns_accepted | boolean | null | Whether are returns accepted. |
are_exchanges_accepted | boolean | null | Whether are exchanges accepted. |
return_deadline_in_days | number | null | Return deadline in days of the item. |
image_urls | string | null | Image URLs of the item. |
Any field can be null when the underlying listing does not publish that attribute. Return and exchange fields in particular are frequently absent on listings from shops that have not configured a formal policy.
π» How to Use the Etsy Scraper (Step by Step)
Step 1: Open the Etsy Product Search Scraper on Apify
Sign in to Apify and open the actor page. If you are new to the platform, create a free account first β you will also need an API token later if you intend to call the Etsy scraper from your own code. Click Try for free or Start to open the input form, which renders each of the four fields described above with sensible defaults already applied.
Step 2: Enter your Etsy search keywords
keywords is the only required input. Add one search term per line in the string list editor. Each keyword is searched independently, so the run covers the union of all your terms rather than an intersection. Keywords that mirror how buyers actually search on Etsy work best β "personalised dog collar" will return a very different and generally more useful result set than a single broad noun such as "collar". If you are researching a niche, put three to six closely related long-tail terms in the list rather than one generic one.
Step 3: Set the item limit
itemLimit is a global cap across every keyword in the run, not a per-keyword cap. Start low, around 50 to 100, while you confirm the keywords return the listings you expect. Once the sample looks right, raise it. Because the limit is global, a run with six keywords and a limit of 300 will not necessarily give you 50 from each β the actor collects up to the total across the keywords it processes.
Step 4: Configure proxies for the Etsy scraper
This step matters more here than on most marketplaces. Etsy uses DataDome, and non-proxied or datacenter traffic is blocked. The default proxyConfiguration already selects Apify Proxy with the RESIDENTIAL group, and you should generally leave it that way. If your Apify plan includes residential proxy access you are ready to run. If you want to route through your own proxy provider instead, the field is a standard Apify proxy editor and accepts custom proxy URLs.
Step 5: Optionally add a CapSolver API key
Even with residential proxies, some requests will draw a DataDome challenge. Without a solver, the actor skips those pages, which quietly reduces your yield. If you supply captchaSolverApiKey, solvable challenges of type t=fe are submitted to CapSolver's DatadomeSliderTask and the returned cookie is retried automatically, recovering pages that would otherwise be dropped. This is optional and involves a third-party account and its own costs, so it is worth enabling only for larger or more yield-sensitive runs.
Step 6: Run the Etsy scraper and monitor the log
Click Start. The log reports which keyword is being processed and flags any pages that were challenged or skipped. Watching those messages on a first run tells you quickly whether your proxy configuration is working β a run producing consistent challenge messages and no items almost always points at a proxy problem rather than a keyword problem. You can open the Dataset tab mid-run to inspect records as they arrive.
Step 7: Export and analyse the Etsy listing data
When the run completes, open Storage β Dataset. Export to JSON, CSV, Excel, XML or HTML. Before analysing prices, group by currency_code or normalise to a single currency, since Etsy displays listing prices in the seller's or the viewer's currency and comparing raw price values across currencies will produce nonsense. Filter on shop_total_rating_count before ranking anything by shop_average_rating.
π API Access & Integrations
Trigger the Etsy scraper from your own code without touching the dashboard.
curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~etsy-product-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["phone cover", "ceramic mug"],"itemLimit": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}'
Python, using the official client:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run_input = {"keywords": ["personalised necklace"],"itemLimit": 200,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],},}run = client.actor("scrapers-hub/etsy-product-search-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["currency_code"], item["shop_average_rating"])
The actor also works with Zapier, Make, Google Sheets and Slack through Apify's integrations, and webhooks can fire on run completion so downstream systems pick up fresh Etsy data automatically.
π‘ Best Use Cases for Etsy Product Data
π° Competitive pricing analysis for Etsy sellers
Pull the keywords you actually compete on and build a price distribution from price and currency_code. Knowing the median and the interquartile range for a keyword tells you whether your listing sits in the premium band or the value band, which is a far more actionable framing than comparing yourself against a handful of listings you happened to click on.
π Niche and product research before launch
Before committing to a new product line, scrape three or four long-tail keywords and look at the spread of shop_average_rating and shop_total_rating_count. A niche dominated by a few shops with tens of thousands of reviews is hard to enter; one where most sellers have modest review counts and mixed ratings has room in it.
π Fulfilment benchmarking
min_processing_days and max_processing_days reveal the lead-time norms in a category. If most competitors quote five to ten days and you can dispatch in two, that is a listing-level differentiator worth stating prominently. If you quote fourteen where the norm is three, it explains conversion problems that price analysis alone will not.
β©οΈ Returns policy benchmarking
are_returns_accepted, are_exchanges_accepted and return_deadline_in_days together describe how buyer-friendly a category's sellers are. In categories where returns are near-universal, not offering them is a visible outlier; in personalised-goods categories where they are rare, offering them can be a genuine differentiator.
π Sourcing and geographic supply analysis
origin_country_id and origin_postal_code show where a category's supply actually originates. For buyers this affects shipping time and customs exposure. For sellers it reveals whether a category is dominated by domestic makers or by overseas producers, which changes the competitive dynamic entirely.
π Trend and seasonality monitoring
Schedule the same keyword set to run weekly and track how the listing count, median price and rating distribution move across the year. Seasonal craft categories shift sharply, and having your own longitudinal dataset beats reacting to changes after they have already affected your sales.
πΌοΈ Listing and merchandising research
title and image_urls across the top results for a keyword show you what the visual and copywriting conventions in that niche are. Tokenising titles across a few hundred listings quickly reveals which descriptive terms and attributes sellers consistently front-load, which is directly useful for your own Etsy SEO.
βοΈ Tips for Better Etsy Scraping Results
- Always keep a residential proxy group selected. Etsy's DataDome protection blocks datacenter and unproxied requests outright. Running without the residential group is the single most common cause of an empty dataset.
- Use long-tail keywords rather than broad nouns. "Handmade oak chopping board" returns a coherent competitive set; "board" returns noise. The Etsy scraper searches exactly what you give it, so keyword precision translates directly into data quality.
- Normalise currency before comparing prices.
priceis meaningless withoutcurrency_code. Convert to a single currency, or segment your analysis by currency, before computing any average. - Apply a review-count floor before ranking by rating. Filter on
shop_total_rating_countβ anything below about 20 reviews makesshop_average_ratingstatistically unstable and will distort a leaderboard. - Add a CapSolver key for large runs. Without it, challenged pages are skipped silently. For a 50-item exploratory run that rarely matters; for a 1,000-item competitive analysis, the lost coverage can be significant.
- Raise
itemLimitgradually. Confirm on a small run that your keywords, proxy setup and output shape are all correct before committing to a large pull, so you are not diagnosing a keyword problem halfway through a long run.
π οΈ Troubleshooting
My Etsy scraper run returned zero items β what should I check first?
Proxy configuration, before anything else. Etsy blocks non-proxied and datacenter traffic, so if proxyConfiguration was cleared or set to a non-residential group, every request will be rejected. Restore the default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} and confirm your Apify plan includes residential proxy access.
The log says pages were skipped due to a DataDome challenge.
That is expected behaviour when no solver is configured: challenged pages are skipped rather than retried. Supply a CapSolver API key in captchaSolverApiKey and solvable t=fe challenges will be solved and retried automatically. Note that not every challenge type is solvable, so a small skip rate can persist even with a key configured.
Why are min_processing_days and return_deadline_in_days null on many listings?
These values are only present when the seller has configured them on the listing or in their shop policies. Etsy does not require every seller to publish a processing window or a formal returns policy, so null is a legitimate value meaning "not stated" rather than an extraction failure.
Why did I get fewer results than my itemLimit?
itemLimit is a ceiling on the total across all keywords, not a quota. Narrow keywords simply do not have that many matching listings, and any pages skipped due to challenges also reduce the yield. Broaden the keyword set or add a CapSolver key if the shortfall is due to challenges.
Prices look inconsistent across records from the same keyword.
Check currency_code on the affected rows. Etsy serves prices in different currencies depending on listing and session context, so a set of records can legitimately mix currencies. Normalise before comparing, and treat price as a number only in combination with its currency.
β Frequently Asked Questions About Etsy Scraping
What does the Etsy Product Search Scraper do? It searches Etsy by keyword and returns structured JSON for each public listing found, including title, price, currency, URL, shop rating and rating count, origin country and postal code, processing-day window, return and exchange policy, and image URL.
Is scraping Etsy legal? This Etsy scraper collects only publicly visible search-result and listing data β the same information any visitor sees without logging in. It does not access private accounts, buyer data or paywalled content. You remain responsible for using the results in line with applicable law and Etsy's terms of service.
Do I need an Etsy account to use this scraper? No. The actor works against publicly accessible Etsy pages and does not require any Etsy credentials, cookies or seller account.
Why does the Etsy scraper require residential proxies?
Etsy is protected by DataDome, which blocks non-proxied and datacenter traffic. Residential IPs are the only reliable way to reach the pages. That is why proxyConfiguration defaults to Apify Proxy with the RESIDENTIAL group.
Can I use my own proxies with this Etsy scraper?
Yes. proxyConfiguration is a standard Apify proxy editor and is fully user-configurable, so you can point it at custom proxy URLs from another provider instead of Apify Proxy.
What is the CapSolver API key for?
It is optional. When set, solvable DataDome challenges of type t=fe are submitted to CapSolver's DatadomeSliderTask, and the returned cookie is retried automatically. Without a key, challenged pages are skipped instead.
How many Etsy listings can I scrape in one run?
itemLimit sets the total across all keywords and defaults to 100. There is no fixed platform ceiling imposed by the actor itself, though larger runs take longer and are more exposed to challenge-related skipping.
Does the Etsy scraper return shop names or seller contact details?
No. It returns shop reputation as shop_average_rating and shop_total_rating_count, plus origin location, but it does not extract seller names or contact information.
Can I scrape Etsy reviews with this actor? Not individual reviews. The actor returns the aggregate shop rating and the total rating count, which is what appears in search results, rather than review text.
What is origin_country_id?
It is Etsy's internal numeric identifier for the country a listing ships from. Combined with origin_postal_code, it tells you where the item originates, which drives both shipping time and customs treatment.
Can I export Etsy data to CSV or Google Sheets? Yes. Apify datasets export to CSV, Excel, JSON, XML and HTML from the Storage tab, and the Google Sheets integration can write results into a spreadsheet after each run.
Can I schedule the Etsy scraper to run automatically? Yes. Apify's scheduler runs the actor on any cron expression, which is how most people build weekly price-tracking or new-listing feeds. Add a webhook if you want each run to notify a downstream system.
Does this Etsy scraper use a headless browser?
No. It uses curl_cffi for browser-grade TLS impersonation together with parsel and requests for parsing, which keeps run overhead and memory requirements lower than a browser-based approach.
How do I compare Etsy prices across different countries?
Always use currency_code alongside price. Convert everything to one reference currency using rates from the date of the run, and keep the original values so the conversion can be redone later if needed.
Why do some listings have are_returns_accepted set to null instead of false?
Null means the listing did not publish a returns policy at all, which is different from explicitly declining returns. Treating null as false would misrepresent sellers who simply have not configured the field.
π Support & Feedback
If something breaks β a field stops populating, a keyword behaves unexpectedly, or a run fails β open a ticket on the Issues tab of the actor page and include the run ID. That gives the fastest path to a diagnosis.
Need something this Etsy scraper does not currently do, such as listing-detail enrichment, review extraction, or a custom output shape piped into your own warehouse? Email scraperhubapi@gmail.com with a description of what you are building.
If the Etsy Product Search Scraper is useful to you, please leave a review on its Apify page. Ratings and written feedback directly influence which improvements get built next.
βοΈ Disclaimer
The Etsy Product Search Scraper collects only publicly available information from Etsy search results β the same content any visitor can view in a browser without authenticating. It does not bypass logins, access buyer accounts, or retrieve private data.
You are responsible for how you use the data this Etsy scraper produces. That includes compliance with applicable data protection legislation such as the GDPR and the UK GDPR wherever a collected field could relate to an identifiable individual, with Etsy's terms of service, and with any sector-specific rules that apply to your business. Many Etsy sellers are sole traders, so shop-level information may constitute personal data in some jurisdictions; establish a lawful basis before processing it, particularly for marketing.
This actor is an independent tool and is not affiliated with, endorsed by, or connected to Etsy, Inc. All trademarks referenced belong to their respective owners.
If you believe data collected through this actor relates to you and you would like it removed, contact scraperhubapi@gmail.com with the details and the request will be handled promptly.