Carousell Scraper — SG MY HK PH Listings & Prices
Pricing
from $1.19 / 1,000 listings
Carousell Scraper — SG MY HK PH Listings & Prices
Carousell scraper for Singapore, Malaysia, Hong Kong, Philippines, Taiwan and Indonesia. Extract listing prices, conditions, images, meetup locations, deal methods and seller ratings. Carousell API alternative — JSON via Python, Node.js, MCP.
Pricing
from $1.19 / 1,000 listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Carousell Scraper — Singapore, Malaysia, Hong Kong & Philippines Listings
Disclaimer: Unofficial tool developed independently. Not affiliated with, sponsored by, or endorsed by Carousell Group Pte. Ltd. Carousell and related trademarks belong to their respective owners. Data is read from publicly accessible listing surfaces. Provided for informational and research use; you must comply with Carousell terms and applicable law.
Carousell scraper for Southeast Asia’s largest C2C marketplace — scrape Carousell listings into JSON/CSV via Apify. Pull keyword browse, category pages, seller profiles, or listing URLs across Singapore, Malaysia, Hong Kong, Philippines, Taiwan, and Indonesia. Each row can include title, numeric price + currency, condition, images, description, meetup location, deal methods, likes, and seller rating / reviews / tenure. Fast HTTP path (no heavy browser) with residential proxy for Cloudflare. Use it as a Carousell API alternative from Python, Node.js, cURL, or MCP / AI assistants.
Best for: Carousell Singapore / Malaysia price tracking, sourcing, seller monitoring, and regional secondhand research.
Crawloop classifieds suite — marketplace scrapers for SEA / EU / US.
| Carousell Scraper ◄── you are here | Leboncoin Scraper | Kleinanzeigen Scraper | Marktplaats Scraper | Facebook Marketplace Scraper |
|---|---|---|---|---|
| SEA C2C listings + sellers | France classifieds | Germany classifieds | Netherlands marketplace | Facebook Marketplace |
When to use this Actor
- Carousell search scraping — Keywords (peer-to-peer browse) plus
/search/fallback - Category inventory — Most reliable mode: Computers & Tech, luxury, fashion, furniture, cars, or any public category URL / slug
- Listing detail enrichment — Full description, image gallery, meetup address, deal method, category path, seller stats
- Seller monitoring — All public ads for a username (
/u/…) - Regional coverage — One Actor for SG / MY / HK / PH / TW / ID (AU / NZ / CA storefronts still selectable)
When not to use this Actor
- Private chat, offers, or phone numbers — Only public listing and profile fields
- Authenticated CarouBiz dashboards — No login
- Shopee / Lazada retail search — Different platforms; this Actor is Carousell C2C only
Key features
- Keywords + URLs + sellers — Mix search terms, category slugs, listing URLs, and usernames in one run
- Stable HTML parse — Listing cards via
data-testid="listing-card-{id}"(not hashed CSS class names) - Deep pagination — HTML pages cap around 40–48 cards with no
?page=; price-band partitioning finds more unique IDs - Optional detail pass —
fetchDetailsadds meetup, deal methods, attributes, seller rating / reviews / years on Carousell - Cloudflare-ready HTTP — Chrome TLS impersonation; residential proxy in the target country required
- MCP / AI ready — Call from Claude, Cursor, and other tools via Apify MCP
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
country | String | SG | SG, MY, HK, PH, TW, ID, AU, NZ, CA |
searchQueries | Array | — | Keywords (peer-to-peer /q/ browse) |
startUrls | Array | — | Category, search, listing, or seller URLs |
categoryUrls | Array | — | Full category URL or slug (computers-tech-213) |
sellerUsernames | Array | — | Public usernames without @ |
sortBy | String | recent | recent, popular, price_asc, price_desc |
minPrice / maxPrice | Integer | — | Price range in local currency |
condition | String | any | brand_new, like_new, lightly_used, well_used, heavily_used |
fetchDetails | Boolean | false | Visit each listing page for full fields |
deepPagination | Boolean | true | Split by price band after a full first page |
maxItems | Integer | 100 | Maximum dataset rows |
requestDelayMs | Integer | 400 | Delay between HTTP requests |
proxyConfiguration | Object | Residential | Apify Proxy — residential in the selected country required |
Input example
{"country": "SG","searchQueries": ["iphone 15"],"maxItems": 50,"fetchDetails": true,"sortBy": "recent","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "SG"}}
Category crawl:
{"country": "SG","categoryUrls": ["computers-tech-213"],"maxItems": 100,"deepPagination": true}
Direct listing / seller URLs (example strings for copy-paste into Start URLs):
{"startUrls": [{ "url": "https://www.carousell.sg/categories/luxury-20/" },{ "url": "https://www.carousell.sg/p/example-listing-1234567890/" },{ "url": "https://www.carousell.sg/u/example_seller/" }],"fetchDetails": true,"maxItems": 25}
Output Format
Each dataset row = one Carousell listing.
| Field | Type | Description |
|---|---|---|
id | String | Numeric listing ID |
url | String | Canonical /p/{slug}-{id}/ URL |
title | String | Headline |
description | String | Body (full with fetchDetails) |
price | Number | Numeric price |
priceFormatted | String | Display price (S$80) |
currency | String | ISO code (SGD, MYR, HKD, PHP, TWD, IDR) |
condition | String | Brand new / Like new / Lightly used / Well used / Heavily used |
category / subcategory / categoryPath | String / Array | Taxonomy breadcrumbs |
attributes | Object | Type, brand, model, storage, CO2 saved, … |
country / countryName | String | Marketplace |
location / meetupLocation | String | Area and meetup address |
dealMethods | Array | Meet-up, mailing / delivery |
isNegotiable / isFixedPrice | Boolean | Offer vs fixed price |
isSold / isBumped / isCertified / buyerProtection | Boolean | Status and badges |
likesCount | Integer | Likes when visible |
postedAtRelative / listedAt | String | Relative time + estimated ISO |
images / imageUrl | Array / String | Product photos |
seller.username / url / avatarUrl | String | Public profile |
seller.rating / reviewCount / tenureYears | Number | Reputation (detail pass) |
sourceUrl / searchQuery / scrapedAt | String | Provenance |
Output example
{"id": "1456947036","url": "https://www.carousell.sg/p/corsair-vengeance-lpx-16gb-3200mhz-ddr4-1456947036/","title": "Corsair Vengeance LPX 16GB 3200Mhz DDR4","description": "2 sets of Corsair Vengeance LPX 2x8GB (16GB) 3200Mhz. Self collection only.","price": 80,"priceFormatted": "S$80","currency": "SGD","condition": "Well used","category": "Computers & Tech","subcategory": "Computer Parts","categoryPath": ["Computers & Tech", "Parts & Accessories", "Computer Parts"],"attributes": { "type": "Memory RAM", "brand": "Corsair", "co2SavedKg": 22.9 },"country": "SG","countryName": "Singapore","location": "Blk 528a Pasir Ris Street 51","meetupLocation": "Blk 528a Pasir Ris Street 51","dealMethods": ["Meet-up"],"isNegotiable": false,"isFixedPrice": true,"isSold": false,"isBumped": false,"isCertified": false,"buyerProtection": false,"likesCount": 3,"postedAtRelative": "2 hours ago","images": ["https://media.karousell.com/media/photos/products/2026/8/21/example.jpg"],"seller": {"username": "spideypiastri","url": "https://www.carousell.sg/u/spideypiastri/","rating": 5.0,"reviewCount": 30,"tenureYears": 8},"searchQuery": "","scrapedAt": "2026-08-21T21:50:00Z"}
Use cases
- Secondhand price intelligence — Track iPhone / luxury / laptop comps across SG and MY
- Sourcing & arbitrage — Sort by lowest price, filter condition, watch meetup vs delivery
- Seller research — Rating, review count, and tenure for active listings
- Category supply — How many Well used vs Brand new units sit in a vertical
- Lead lists — Public seller usernames and profile URLs for outreach (no private contacts)
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/carousell-scraper').call({country: 'SG',searchQueries: ['iphone 15'],maxItems: 50,fetchDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("crawloop/carousell-scraper").call(run_input={"country": "SG","searchQueries": ["iphone 15"],"maxItems": 50,"fetchDetails": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["url"])
cURL
curl -X POST "https://api.apify.com/v2/acts/crawloop~carousell-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"country":"SG","searchQueries":["iphone 15"],"maxItems":20}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID crawloop/carousell-scraper.
Example prompts:
- "Run Carousell Scraper for iphone 15 in Singapore, fetch details, and return the 20 cheapest rows as JSON"
- "Scrape Carousell Malaysia listings in computers-tech and summarize median price by condition"
- "Chain Carousell Scraper then Leboncoin Scraper to compare secondhand laptop prices SG vs FR"
Suite next step
After Carousell listings, run Leboncoin Scraper or Kleinanzeigen Scraper for European classifieds comps, or Facebook Marketplace Scraper for another C2C channel.
FAQ
Which countries work? Live storefronts: Singapore, Malaysia, Hong Kong, Philippines, Taiwan, Indonesia. Australia, New Zealand, and Canada paused new sign-ups in 2023; the domains are still selectable if pages resolve.
Is this a Carousell Malaysia / Hong Kong / Taiwan scraper? Yes — set country to MY, HK, TW, PH, or ID. Category slugs differ by region.
Keyword browse vs /search/?query=? /{keyword}/q/ targets peer-to-peer listings. Carousell’s /search/?query= surface often skews toward Certified products for phones. Category URLs are the most stable SSR path; keywords try /q/ then /search/.
Why residential proxy? Cloudflare challenges datacenter IPs (403 / “Just a moment…”). Pin Apify residential to the same country as country.
Does it paginate? The first HTML page has no ?page=. With deepPagination the Actor partitions by price band (and subdivides saturated bands) so you get more than the first ~48 cards.
Personal data? Only public listing/profile fields a logged-out visitor can see. No inbox, phone, or email harvesting.