Etsy Shop Details Scraper
Pricing
from $15.00 / 1,000 etsy shop profile extracteds
Etsy Shop Details Scraper
Extract public Etsy shop profiles by URL or shop name. Returns seller identity, ratings, reviews, catalog size, location, branding, and provenance as flat, MCP-ready JSON.
Pricing
from $15.00 / 1,000 etsy shop profile extracteds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract clean, structured public profiles for known Etsy shops. Provide Etsy shop URLs, exact shop names, or both and receive one validated JSON record per matched shop with seller identity, public description, owner, location, rating, review count, active-listing count, branding, and collection provenance.
Use this Actor for competitor research, seller enrichment, supplier shortlists, catalog monitoring, and AI-agent workflows that begin with a known Etsy seller. Do not use it for product keyword search, individual listing details, or customer reviews; use khadinakbar/etsy-all-in-one-scraper for those broader jobs.
What changed in version 0.2
The earlier implementation tried Etsy's public shop page first. Etsy returned a DataDome challenge to that route in cloud runs, so every useful request paid the latency and residential-proxy cost of a guaranteed 403 before starting a separate fallback Actor. Bulk input also launched the fallback serially, one cold start per shop.
Version 0.2 removes that dead route. It now runs focused rich-profile lookups concurrently, validates only recordType: "shop" records, derives a location only when the public description explicitly says “located in …,” and uses a second mobile-API route only when the primary profile is missing or incomplete. The result is faster, cheaper, more honest, and more reliable. Missing values remain null; the Actor never turns unavailable sections into a fake empty list or invents a sales estimate.
Output fields
| Field | Meaning |
|---|---|
shop_id, shop_name, shop_url | Canonical public Etsy shop identity |
title, description, shop_slogan | Public profile copy when available |
shop_owner, shop_location | Public seller name and location when exposed |
shop_rating, shop_review_count | Aggregate public reputation metrics |
total_active_listings | Current public catalog size when available |
total_sales_count | Lifetime sales only if an upstream route publishes it; otherwise null |
is_star_seller, on_etsy_since | Mobile-route badge and opening year when available |
shop_logo_url, shop_banner_url | Public branding image URLs |
shop_sections | Public section names when requested and exposed; otherwise null |
source, data_sources | Exact collection route or merged provider evidence |
source_url, scraped_at | Canonical lookup URL and ISO 8601 normalization time |
Every row uses a stable, flat shape suitable for Apify MCP, JSON, CSV, spreadsheets, warehouses, and LLM tool calls. Optional values are explicit nulls rather than omitted keys.
Input
Lookup by URL
{"shopUrls": [{ "url": "https://www.etsy.com/shop/HunchbackLeather" },{ "url": "https://www.etsy.com/shop/LindyLonghurst" }],"maxShops": 2,"includeShopSections": true}
Lookup by exact shop name
{"shopNames": ["HunchbackLeather", "LindyLonghurst"],"maxShops": 2}
You may combine shopUrls and shopNames. Inputs are canonicalized and deduplicated case-insensitively before the maxShops cap is applied. A valid Etsy shop handle starts with a letter or number and may contain letters, numbers, or hyphens.
maxShops defaults to 10 and cannot exceed 100. It is the hard ceiling for stored and billed shop-profile rows. The legacy proxyConfiguration field remains visible so old saved tasks continue to run, but version 0.2 uses managed provider routes and ignores that legacy setting.
Output example
{"record_type": "shop","shop_id": "34829689","shop_name": "HunchbackLeather","shop_url": "https://www.etsy.com/shop/HunchbackLeather","title": "HunchbackLeather","description": "Shop Handmade leather goods from our Indiana shop, USA by HunchbackLeather located in Goshen, Indiana.","shop_owner": "Randy Johnson","shop_location": "Goshen, Indiana","shop_rating": 5,"shop_review_count": 483,"total_sales_count": null,"total_active_listings": 19,"is_star_seller": null,"on_etsy_since": null,"shop_logo_url": "https://i.etsystatic.com/34829689/r/isla/example.jpg","shop_banner_url": null,"shop_slogan": "Handmade leather goods from our Indiana shop, USA","shop_sections": null,"source_url": "https://www.etsy.com/shop/HunchbackLeather","source": "cirkit_profile","data_sources": ["cirkit_profile"],"scraped_at": "2026-07-18T00:00:00.000Z"}
Pricing and cost controls
$0.015for each validated shop profile stored in the default dataset$0.00005Actor-start event- Apify platform usage is passed through separately
Before collection begins, the log and status message show the maximum possible shop-detail event charge. Ten requested shops therefore cap this Actor's shop-detail events at $0.150. A row is normalized and validated before it is written and billed through the same Apify SDK call. Invalid input, nonexistent shops, blocked routes, and rejected records do not trigger a shop-detail event.
The Actor stops writing as soon as maxShops or the caller's Apify charge limit is reached. OUTPUT and RUN_SUMMARY report the number of stored profiles, logical billed-event count, provider runs, warnings, and whether a charge cap stopped the run.
Terminal outcomes
Every run writes both OUTPUT and RUN_SUMMARY and uses one explicit outcome:
COMPLETE: all matched profiles were stored.PARTIAL: at least one useful profile was stored, but another target or write failed.VALID_EMPTY: the inputs were valid, the routes ran, but no public shops matched.INVALID_INPUT: no valid Etsy shop URL or name was supplied; the message includes a working example.UPSTREAM_FAILED: every required route failed before any useful row could be returned.CONFIG_ERROR: deployment or runtime configuration prevented the Actor from operating.
User-correctable input and genuine empty results finish successfully. Required-provider and configuration outages fail honestly rather than hiding an outage behind a green run with an empty dataset.
Reliability and data quality
The primary route is optimized for Etsy shop profiles and returns descriptions, ownership, ratings, reviews, listing counts, and branding. Requests run concurrently with a bounded worker pool, so batches avoid the former one-shop-at-a-time bottleneck. When a primary record is absent or lacks location or catalog-size evidence, a mobile-API fallback is queried and merged by canonical shop name.
The Actor ignores listing-card rows returned alongside a profile. It never charges those rows, and they never enter this Actor's dataset. Complete candidates pass code-level validation that mirrors the dataset schema before persistence. Provider failures, validation failures, and storage failures are counted separately in RUN_SUMMARY.
Etsy may close, rename, suspend, or hide a shop. In those cases the Actor returns VALID_EMPTY when functioning routes agree that no public profile exists. Check spelling and current shop status before retrying. A transient provider outage is reported separately as UPSTREAM_FAILED only when every available route fails.
AI-agent guidance
Use this tool when the agent already has an Etsy shop name or shop URL and needs structured seller-profile facts. Good requests include “compare the ratings, review counts, and active listings of these Etsy shops,” “enrich this supplier list with Etsy owner and location,” and “monitor catalog-size changes for these sellers.”
Do not use this tool for broad Etsy product discovery, listing prices, listing descriptions, or review text. It returns one compact record per shop and costs $0.015 per stored profile plus platform usage.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~etsy-shop-details-scraper/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"shopNames":["HunchbackLeather"],"maxShops":1}'
Never place an Apify token in a URL or commit it to source control.
Related Etsy Actors
khadinakbar/etsy-all-in-one-scraperfor mixed listing, product, shop-catalog, and review workflowskhadinakbar/etsy-listings-scraperfor Etsy listing search results and direct listing URLskhadinakbar/etsy-reviews-scraperfor structured customer-review recordskhadinakbar/etsy-product-search-scraperfor keyword-led Etsy product discovery
FAQ
Can I integrate this with the Apify API?
Yes. Start runs through the REST API, JavaScript client, Python client, schedules, webhooks, or integrations. The default dataset contains shop rows; OUTPUT and RUN_SUMMARY are in the run's default key-value store.
Can an AI agent call it through MCP?
Yes. Add khadinakbar/etsy-shop-details-scraper to the Apify MCP server, call it with exact shop names or URLs, then read the default dataset. The flat nullable schema is designed to be predictable for LLM tool consumers.
Why is a field null?
Etsy and the active provider routes do not expose every profile field for every seller. A null means unavailable, not zero. In particular, the Actor never estimates lifetime sales or fabricates shop sections.
Is it legal to scrape public Etsy shop data?
Public accessibility does not remove your compliance obligations. Review Etsy's terms, applicable privacy and database laws, your purpose, and your retention practices. Obtain professional advice for regulated or high-risk use cases.
Legal and responsible use
This Actor collects publicly accessible Etsy shop metadata. You are responsible for complying with Etsy's terms, applicable law, contractual restrictions, and your own privacy and retention obligations. Do not use the output for harassment, discrimination, unauthorized profiling, or attempts to access private seller information.
Your feedback
If a public shop returns incomplete or stale data, open an Apify issue with the shop URL and run ID. Do not include private credentials, cookies, or personal data in the report.