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

Scrape Carousell marketplace listings in Singapore, Malaysia, Hong Kong, the Philippines, Taiwan and Indonesia by keyword, category or URL: title, price, condition, full description, likes, photos, seller username and profile, posted and bumped times, plus optional seller rating, attributes and meet-up location.
Scrape Carousell, Southeast Asia's largest marketplace, into clean, spreadsheet-ready rows. Search by keyword or paste search, category or listing URLs from Singapore, Malaysia, Hong Kong, the Philippines, Taiwan or Indonesia. Each row has the title, price, condition, full description, likes, photos, seller username and profile link, and posted or bumped time. Optionally the actor also opens each listing page for the seller's rating, item attributes and meet-up location. No login and no browser needed.
| Field | What it does |
|---|---|
searchQueries | Keywords to search, one per line. |
startUrls | Carousell search pages (any filters), category pages, or listing pages (/p/...). |
maxItems | Maximum listings across all inputs (default 20, 0 = no limit). |
market | sg, my, hk, ph, tw or id for keyword searches. |
sortBy | best-match, recent, popular, price-low, price-high. |
condition | Any of brand-new, like-new, lightly-used, well-used, heavily-used. |
minPrice / maxPrice | Price range in the market's currency. |
includeDetails | Open each listing page for the seller rating, attributes, all photos, location and deal options (default off). |
proxyConfiguration | Residential proxies (default), pinned to the market's country. |
{
"searchQueries": ["nintendo switch", "dyson v15"],
"market": "sg",
"sortBy": "recent",
"condition": ["like-new", "lightly-used"],
"minPrice": 100,
"maxPrice": 600,
"maxItems": 200,
"includeDetails": false
}
| Field | Description |
|---|---|
id, url, market | Listing ID, link and country site. |
title, description | Title and full description. |
price, priceFormatted, originalPrice, currency | Price as a number, as shown, the struck-through original price, and the currency code. |
condition, status | Brand new / Like new / Lightly used / Well used / Heavily used; live, reserved or sold. |
likesCount, isBuyerProtection, tags | Likes and badges. |
postedAt, bumpedAt, isBumped | When the listing was posted, or when it was last bumped to the top. |
photos, photoCount, thumbnail | Photo URLs (all photos with listing details on). |
sellerUsername, sellerName, sellerId, sellerProfileUrl, sellerPhoto | Seller. |
sellerRating, sellerReviewCount, sellerVerified | Seller reputation (listing details). |
category, categoryId, attributes | Category and item attributes such as brand, size or model (listing details). |
locationName, latitude, longitude, meetup, meetupDetails, delivery, deliveryDetails, dealOptions | Deal and location info (listing details). |
createdAt, updatedAt, commentsCount | Exact times and comment count (listing details). |
searchQuery, searchUrl, scrapedAt | Where the row came from. |
Example (trimmed; seller is fictional):
{
"id": "1459445197",
"url": "https://www.carousell.sg/p/castlery-lucas-performance-boucle-sofa-3-seater-1459445197/",
"market": "SG",
"title": "Castlery Lucas Performance Bouclé Sofa - 3 Seater",
"price": 799,
"priceFormatted": "S$799",
"currency": "SGD",
"condition": "Like new",
"description": "Well maintained, no pets. Castlery Lucas 3-Seater Sofa, light beige textured bouclé ...",
"likesCount": 41,
"status": "live",
"bumpedAt": "2026-10-15T14:29:32Z",
"isBumped": true,
"photos": ["https://media.karousell.com/media/photos/products/2026/9/3/castlery_lucas_performance_bou_1788450169_c795e7b6.jpg"],
"sellerUsername": "jane.doe.sells",
"sellerProfileUrl": "https://www.carousell.sg/u/jane.doe.sells/",
"sellerRating": 4.97,
"sellerReviewCount": 220,
"category": "Sofas",
"attributes": { "sofas_seater": "3-seater", "l_shaped": "No" },
"delivery": true,
"meetup": false,
"searchQuery": "sofa"
}
You pay $6.00 per 1,000 listings saved ($0.006 each), with or without listing details. Platform usage (compute and residential proxy traffic) is billed separately and is small.
Worked example: 1,000 listings cost $6.00 in listing fees plus a few cents of usage in search mode.
Is it legal to scrape Carousell? The actor collects publicly visible listings only, without logging in. You are responsible for using the data in line with Carousell's terms and local data protection laws.
Do I need an account, cookies or a proxy? No login or cookies. The actor uses the platform's residential proxies in the market's country by default, because Carousell's Cloudflare challenges datacenter IPs.
How many listings can I get? Carousell reports up to "10,000+" results per search and the actor pages through them 48 at a time. Narrow big searches with filters, or use several keywords.
Why is a field empty?
Seller rating, attributes, location and deal options come from listing pages: turn on Open each listing page. postedAt is empty in search mode when Carousell shows the bump time instead; listing details always add the exact creation time.
Can I schedule it or use the API? Yes. Schedule runs in the console, or start them through the API and read the dataset as JSON, CSV or Excel.
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.
searchQueriesarrayOptionalSearch keywords
What to search for, one keyword per line (e.g. sofa, iphone 15, nintendo switch). Each keyword is searched in the market below with the filters below.
startUrlsarrayOptionalCarousell URLs
Carousell search result pages (with any filters and sort), category pages, or single listing pages (/p/...). Works for carousell.sg, carousell.com.my, carousell.com.hk, carousell.ph, tw.carousell.com and carousell.co.id. Pasted URLs keep their own filters.
maxItemsintegerOptionaldefault 20Max listings
Maximum number of listings to save across all keywords and URLs. 0 means no limit.
Used for keyword searches. Pasted URLs keep their own site and filters.
marketenumOptionaldefault "sg"Market
Which Carousell country site to search.
sortByenumOptionaldefault "best-match"Sort by
Order of the results.
conditionarrayOptionalCondition
Only listings in these conditions. Leave empty for any condition.
minPriceintegerOptionalMin price
Minimum price in the market's currency (SGD, MYR, HKD, PHP, TWD or IDR).
maxPriceintegerOptionalMax price
Maximum price in the market's currency.
includeDetailsbooleanOptionaldefault falseOpen each listing page
Visit every listing page to add the seller's rating and review count, verification, exact category and item attributes (size, brand, model ...), all photos, meet-up location and coordinates, delivery and deal options, and exact created / updated times. Slower; search results already include title, price, condition, full description, likes, seller and photos.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential proxies are the default: Carousell's Cloudflare challenges datacenter IPs. Exits are pinned to each listing's country unless you set one.
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 |
|---|---|---|
| thumbnail | any | Photo |
| url | any | Listing |
| title | any | Title |
| market | any | Market |
| price | any | Price |
| currency | any | Currency |
| condition | any | Condition |
| likesCount | any | Likes |
| sellerUsername | any | Seller |
| isBuyerProtection | any | Buyer Protection |
| postedAt | any | Posted |
| bumpedAt | any | Bumped |
| status | any | Status |
| searchQuery | any | Keyword |
| id | any | ID |
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 |
|---|---|---|
| Listing | One Carousell listing saved to the dataset. | $0.006 |
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/carousell-scraper').call({
"searchQueries": [
"sofa"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// 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/carousell-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/carousell-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.
Listings from search, category and item URLs in Singapore.
Newest listings with full details.
Search results from Carousell Indonesia.
Cheapest listings within a price range.
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.