Etsy Search Scraper
Pricing
from $4.99 / 1,000 results
Etsy Search Scraper
Turn any Etsy search URL into a structured dataset — prices, ratings, sale flags, seller info, and more. Paste your filtered search URL and get results in seconds.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
CRW
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Extract product listings from any Etsy search — with prices, ratings, sale flags, and seller data — in minutes, no coding required.
Just paste an Etsy search URL. Get a clean dataset. Export to CSV, JSON, or connect to your workflow.
Who is this for?
E-commerce sellers & brand managers — Monitor competitor pricing, spot trending products, and benchmark your listings against the market before launching.
Market researchers & analysts — Track pricing shifts, category trends, and seller saturation across thousands of Etsy listings at scale.
Dropshippers & product sourcers — Find high-rated, low-competition products with sale pricing and review data in one sweep.
Agencies & freelancers — Deliver Etsy market reports to clients without manual copy-paste or expensive data subscriptions.
What you get
Every listing returned includes:
| Field | Description |
|---|---|
title | Product name |
price | Current sale price |
original_price | Pre-discount price (when on sale) |
discount_pct | Discount percentage (e.g. "33% off") |
currency | Currency code |
free_shipping | Whether free shipping is offered |
rating | Star rating (0–5) |
review_count | Number of reviews |
shop_name | Seller shop name |
shop_url | Link to the seller's shop |
is_ad | Whether the listing is a paid ad |
is_sale | Whether the listing is on sale |
url | Direct link to the product page |
image_url | Product thumbnail image |
listing_id | Etsy listing ID |
shop_id | Etsy shop ID |
search_url | The search URL this result came from |
Sample output:
{"listing_id": "1234567890","title": "Personalized Wedding Gift Box for Couple","price": "34.99","original_price": "52.00","discount_pct": "33% off","currency": "USD","free_shipping": true,"rating": 4.9,"review_count": 2847,"shop_name": "WoodlandGiftCo","is_ad": false,"is_sale": true,"url": "https://www.etsy.com/listing/1234567890/...","search_url": "https://www.etsy.com/search?q=wedding+gift&order=most_relevant"}
Getting started
1. Set your search
Go to Etsy, type a keyword in the search box, apply your filters (category, price range, sort order — anything), then copy the full URL from your browser address bar.
Important: The URL must include a search keyword (the
q=part). Browse-only or category URLs without a search term will not work. For example:
- ✅
https://www.etsy.com/search?q=frog+mug&order=highest_reviews- ❌
https://www.etsy.com/search?order=highest_reviews(missing keyword)- ❌
frog mug(paste the URL, not the keyword itself)
2. Run the scraper
Paste the URL into the Search List input. Set how many results you want (10–1,000 per URL). Click Start.
3. Export your data
Download as CSV, Excel, or JSON — or connect directly to Google Sheets, Zapier, or your own pipeline via the Apify API.
Input
Search List (searches)
Paste one or more Etsy search URLs. Every filter you set in the browser — category, price range, sort order — is captured in the URL and respected by the scraper.
Plain URL (simplest):
https://www.etsy.com/search?q=wedding+gifthttps://www.etsy.com/search/home-and-living?q=candle&min=10&max=50&order=price_asc
With per-URL result limit:
[{ "url": "https://www.etsy.com/search?q=wedding+gift", "maxResults": 200 },{ "url": "https://www.etsy.com/search?q=candle&min=10", "maxResults": 50 }]
Both formats can be mixed in the same list.
Parameters
| Parameter | Default | Description |
|---|---|---|
searches | required | List of Etsy search URLs |
maxResults | 100 | Max results per URL (10–1,000) |
maxSearchPages | 10 | Max pages per URL (~48 results/page) |
For developers
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('YOUR_ACTOR_ID').call({searches: [{ url: 'https://www.etsy.com/search?q=wedding+gift&order=most_relevant', maxResults: 200 },{ url: 'https://www.etsy.com/search?q=candle&min=10&max=50', maxResults: 100 },],maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("YOUR_ACTOR_ID").call(run_input={"searches": [{ "url": "https://www.etsy.com/search?q=wedding+gift", "maxResults": 200 },],"maxResults": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
CLI
apify call YOUR_ACTOR_ID -i '{"searches": ["https://www.etsy.com/search?q=wedding+gift"],"maxResults": 100}'
Use cases
- Price monitoring — Track competitor prices across a category weekly and alert when they drop below your threshold
- Product research — Find best-selling items by rating + review count before launching a new product line
- Trend detection — Identify which products have sale flags or ad placements in your niche
- Market reports — Aggregate listings across multiple keywords to build category-level intelligence for clients
- Inventory scouting — Find high-margin wholesale opportunities by filtering for price ranges and seller ratings
FAQ
Does this require an Etsy account or API key? No. Just paste the search URL and run.
What counts as a valid URL?
A full Etsy search URL that includes a keyword — the q= parameter. Go to etsy.com, type your search term, apply any filters, then copy the URL from the address bar. Do not paste a keyword like frog mug directly — it must be a URL.
How many results can I get per search? Up to 1,000 results per URL (~48 per page, up to 10 pages by default).
Can I apply filters like price range, category, or sort order? Yes — all Etsy search filters are URL-based. Set them in your browser, copy the URL, paste it in. The scraper respects all filters.
Can I scrape multiple searches at once? Yes. Add multiple URLs to the Search List — each runs independently with its own result limit.
What happens if a listing is an ad?
It's still collected, and the is_ad field is set to true so you can filter it out downstream.