
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape public Etsy search results, shops, categories, and listing pages. Each row includes the title, USD price, photos, seller rating, review count, variations, favorites, and the date listed. No login required.
Search Etsy by keyword or paste listing, shop, category, and search URLs, and get clean product data: title, price, photos, seller and shop rating, reviews, favorites, variations, and related searches. No login, no API key. $0.0034 per listing, which is $3.40 per 1,000.
| Field | Key | Description |
|---|---|---|
| Search keyword | search | Keyword to search on Etsy. |
| Etsy URLs | startUrls | Listing, shop, category, market, or search URLs. |
| Maximum listings | maxItems | Listings to save for the whole run. Default 10. |
| Sort | sort | most_relevant, price_asc, price_desc, highest_reviews, or date_desc. |
| Minimum / maximum price | minPrice, maxPrice | US dollar range for searches. |
| Last result page | endPage | Last search, category, or market page to read. |
| Include description | includeDescription | Adds the listing description. |
| Include variation prices | includeVariationPrices | Adds the price shown for each variation option. |
| Proxy configuration | proxyConfiguration | Datacenter by default. |
{
"search": "linen napkin",
"startUrls": [],
"maxItems": 10,
"sort": "most_relevant",
"endPage": 1,
"includeDescription": false,
"includeVariationPrices": false,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One row per listing.
| Field | Description |
|---|---|
id, url, name | Listing id, link, and title |
Price, Original Price | Current price and the price before a sale |
images, videos | Photo and video URLs |
seller | Shop name, URL, rating, and review count |
numberOfReviews, favorites | Listing reviews and favorites |
listedOn | Date the listing was published or renewed |
variations, variationPrices | Option labels and values, and prices per option when requested |
highlights | Materials and badges when the page shows them |
relatedSearches | Related market searches with links |
shipping | Shipping details when the page shows them |
Example item (trimmed):
{
"id": "1485806619",
"url": "https://www.etsy.com/listing/1485806619/cork-sandals-summer-sandals-mens-slide",
"name": "Cork Sandals, Summer Sandals, Mens Slide, Handmade, Original footbed, Sandgrens, Hazel Brown Nubuck Leather, Costa",
"images": [
"https://i.etsystatic.com/8606854/r/il/e9ca0e/5864136155/il_794xN.5864136155_s8x6.jpg"
],
"seller": {
"name": "Sandgrens",
"url": "https://www.etsy.com/shop/Sandgrens",
"numberOfReviews": 1877,
"rating": 4.84
},
"numberOfReviews": 1,
"Price": "$129.00",
"variations": [
{ "label": "Primary color", "values": ["Brown"] },
{ "label": "Size", "values": ["42 EU men's", "43 EU men's", "44 EU men's"] }
],
"listedOn": "Sep 14, 2026",
"favorites": 1946,
"relatedSearches": [
{ "name": "Sandgrens Cork", "link": "https://www.etsy.com/market/sandgrens_cork?ref=lp_queries_external_top-1" }
]
}
$0.0034 per listing ($3.40 per 1,000 listings). Platform usage is billed on top at standard rates: compute $0.30 per GB-hour, datacenter proxy $1 per GB.
Worked example: 10 listings cost 10 × $0.0034 = $0.034 in listing fees. With measured platform usage, a 10-listing job came to about $0.043.
The actor reads public listing pages that anyone can open. Follow Etsy's terms and local laws for your use, and respect the rights of sellers over their photos and text.
No key and no login. Datacenter proxies are used by default and are enough for public listings.
As many as you set. Raise Last result page to read more search or category pages; a search stops when a page has no new listings.
Sale prices, videos, highlights, and shipping details only appear when the listing page shows them.
Yes. Use Schedules for recurring runs, or call the REST API and read the dataset in any format.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchstringOptionalSearch keyword
Keyword to search on Etsy, the same way you would type it into the search box.
startUrlsarrayOptionaldefault []Etsy URLs
Listing, shop, category, market, or search URLs. The keyword search is collected first. Each URL is capped by the maximum number of listings.
maxItemsintegerOptionaldefault 10Maximum listings
Maximum number of listings to save for the whole run.
Sort, price range, and how many result pages to read. Listing URLs ignore these.
sortenumOptionaldefault "most_relevant"Sort
Sort order for keyword search and for search URLs that do not already set one.
minPriceintegerOptionalMinimum price (USD)
Lowest price to include in a search, in US dollars.
maxPriceintegerOptionalMaximum price (USD)
Highest price to include in a search, in US dollars.
endPageintegerOptionaldefault 1Last result page
Last search, category, or market page to read. A URL that already has a page number starts there and continues through this page. Reading stops early when a page has no new listings.
Extra fields from each listing page. Leave these off for a faster run.
includeDescriptionbooleanOptionaldefault falseInclude description
Add the listing description to each result.
includeVariationPricesbooleanOptionaldefault falseInclude variation prices
Add the price shown for each variation option.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy used to reach Etsy. Datacenter works for public listing data.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| url | string | Listing URL |
| name | string | Listing title |
| Price | string | Current price in USD |
| Original Price | string | Price before a sale |
| numberOfReviews | integer | Reviews on this listing |
| favorites | integer | Number of favorites |
| listedOn | string | Date the listing was published or renewed |
| images | array | Photo URLs |
| seller | object | Shop name, URL, rating, and review count |
| variations | array | Variation labels and values |
| highlights | array | Materials and listing badges |
| relatedSearches | array | Related market searches |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One saved Etsy listing. | $0.0034 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/etsy-scraper').call({
"search": "linen napkin",
"startUrls": [],
"maxItems": 10,
"sort": "most_relevant",
"endPage": 1,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/etsy-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/etsy-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Etsy listings matching a keyword.
Listings from one shop page.
Listings within a price range.
Full listing details including variations.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.