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

Scrape public eBay search and category pages for active listings. Each row includes the title, price, condition, seller, photos, and listing URL. No login required.
Search eBay by keyword, or paste a search, category, or listing URL, and get clean rows for active listings: title, price, condition, seller, brand, photos, location, quantity, and sold count. No eBay account or API key needed, $4 per 1,000 listings.
| Field | Key | What it does |
|---|---|---|
| Search keyword | keyword | What to search on eBay. Active listings only. |
| eBay URLs | startUrls | Search, category, or listing URLs. Sold and completed search URLs are skipped. |
| Maximum listings | maxItems | Listings to save for the whole run. Default 10. |
| Minimum price, Maximum price | minPrice, maxPrice | Price bounds in the site's currency. Keyword searches send them to eBay, pasted URLs are filtered after the page is read. |
| Proxy configuration | proxyConfiguration | Datacenter by default. |
{
"keyword": "usb c cable",
"startUrls": [],
"maxItems": 10,
"minPrice": 5,
"maxPrice": 50,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
The keyword is collected first, then each URL. Category pages work as search URLs (/sch/..., including a category id).
One dataset row per listing.
| Field | Description |
|---|---|
title, subTitle, url, itemNumber | Listing title, link, and item number. |
price, priceWithCurrency | Current price as a number and with currency. |
wasPrice, wasPriceWithCurrency | Previous price when eBay shows one. |
condition | The real label, such as Brand New or Open Box. |
available, availableText, sold | Quantity, its text, and sold count. |
seller | Seller name. |
brand, type, upc, ean, mpn | Product attributes when listed. |
categories | Category path. |
image, images | Main photo and all photos. |
itemLocation, shipsTo, shippingCost | Location and shipping details when shown. |
{
"url": "https://www.ebay.com/itm/376333169457",
"itemNumber": "376333169457",
"title": "NOCO XGrid XC3: 240W USB-C to USB-C Cable with E-Marker Chip - 10-Foot (White)",
"categories": ["Cables & Adapters"],
"condition": "Brand New",
"price": 16.95,
"priceWithCurrency": "US $16.95",
"available": 10,
"availableText": "More than 10 available 109 sold",
"sold": 109,
"image": "https://i.ebayimg.com/images/g/jswAAeSw0l5qsW12/s-l1600.webp",
"seller": "officialnoco",
"itemLocation": "Solon, Ohio, United States",
"upc": "046221240146",
"brand": "NOCO",
"type": "USB-C Cable",
"shipsTo": "United States"
}
(Trimmed: the extra photos and several empty fields are removed.)
You pay $0.004 per listing saved, which is $4.00 per 1,000 listings. Platform usage (compute and proxy) is billed on top.
Worked example: a 10-listing run costs 10 × $0.004 = $0.04 in events plus about $0.013 of platform usage, around $0.053 in total.
The actor reads only public listing pages. You are responsible for using the data in line with eBay's terms and applicable law.
No. A datacenter proxy is built in and the bot check is handled by the actor.
No. Sold and completed search URLs are skipped. Only active listings are returned, but each row shows how many of the item have sold.
eBay shows different details per listing. shipsTo is filled when the page shows a short destination, and lastUpdated is not available on the pages checked.
An empty keyword or an invalid URL finishes with no rows.
Yes, from the console or through the API.
/b/ browse URLs can stay on eBay's challenge page. Use a search or category search (/sch/) URL instead.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.
keywordstringOptionalSearch keyword
Keyword to search on eBay, the same way you would type it into the search box. Active listings only.
startUrlsarrayOptionaldefault []eBay URLs
Search, category, or listing URLs. The keyword is collected first. Sold and completed search URLs are skipped.
maxItemsintegerOptionaldefault 10Maximum listings
Maximum number of active listings to save for the whole run.
Optional price bounds. A keyword search sends them to eBay. Pasted URLs are filtered after the page is read.
minPriceintegerOptionalMinimum price
Lowest price to keep, in the site's currency. Leave empty for no minimum.
maxPriceintegerOptionalMaximum price
Highest price to keep, in the site's currency. Leave empty for no maximum.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy used to reach eBay. Datacenter is enough for public active listings.
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 |
|---|---|---|
| title | string | null | Listing title |
| priceWithCurrency | string | null | Price as shown on the page |
| price | number | null | Price as a number |
| condition | string | null | Item condition |
| seller | string | null | Seller username |
| itemLocation | string | null | Item location |
| shippingCostWithCurrency | string | null | Shipping cost as shown |
| url | string | null | Listing URL |
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 active eBay listing. | $0.004 |
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/ebay-scraper').call({
"keyword": "usb c cable",
"startUrls": [],
"maxItems": 10,
"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/ebay-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/ebay-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.
eBay listings within a price range.
Listings from a pasted eBay search.
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.