Carousell listings from six Southeast Asian markets, one API
The Carousell API returns Carousell, the Southeast Asian classifieds marketplace, as clean JSON for six countries: Singapore, Malaysia, Hong Kong, the Philippines, Taiwan and Indonesia.
4 active endpoints, on 1 and 2 credit tiers.
- POST/carousell/v1/search
- POST/carousell/v1/listing
- POST/carousell/v1/seller_listings
- POST/carousell/v1/suggest
What Carousell endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Carousell API
3 of 4 endpoints, ready to run
Listings in one country: id, title, price in local currency with the earlier price when lowered, free or no-price flag, condition, status, posting or bump time, likes, seller, photos, and car and property card facts - 48 per page with a cursor.
{ "ok": true, "meta": { "api": "carousell", "endpoint": "search", "mode": "live", "latency_ms": 3510.2, "record_count": 48, "cache_hit": false }, "data": { "results": [ { "listing_id": "1462165282", "title": "iPhone 15 Pro Blue Titanium 256GB", "url": "https://www.carousell.sg/p/1462165282/", "price": 650, "price_text": "S$650", "is_free": false, "price_not_published": false, "original_price": null, "price_dropped": false, "currency": "SGD", "condition": "well_used", "condition_label": "Well used", "status": "active", "posted_at": "2026-09-16T12:36:22Z", "is_bumped": false, "bumped_at": null, "last_bumped_at": null, "likes_count": 0, "card_type": null, "vertical": null, "is_certified": false, "buyer_protection_tag": false, "deal_label": null, "tags": [], "attributes": [], "card_lines": [ "Good Condition 8.5/10 Perfectly functioning" ], "image": "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_pro_blue_titanium_25_1789562181_e6632e40_thumbnail.jpg", "images": [ "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_pro_blue_titanium_25_1789562181_e6632e40_thumbnail.jpg" ], "country": "sg", "is_promoted": false }, { "listing_id": "1462158572", "title": "iPhone 15 · 256GB · Green", "url": "https://www.carousell.sg/p/1462158572/", "price": 613, "price_text": "S$613", "is_free": false, "price_not_published": false, "original_price": null, "price_dropped": false, "currency": "SGD", "condition": "like_new", "condition_label": null, "status": "active", "posted_at": "2026-09-16T12:09:07Z", "is_bumped": false, "bumped_at": null, "last_bumped_at": null, "likes_count": 0, "card_type": "certified_product", "vertical": null, "is_certified": true, "buyer_protection_tag": false, "deal_label": null, "tags": [ "3M Batt Promo" ], "attributes": [], "card_lines": [ "Like new · Free delivery" ], "image": "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_256gb_green_1789560546_5cbd7b74_thumbnail", "images": [ "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_256gb_green_1789560546_5cbd7b74_thumbnail" ], "country": "sg", "is_promoted": false }, { "listing_id": "1462158531", "title": "iPhone 15 · 256GB · Black", "url": "https://www.carousell.sg/p/1462158531/", "price": 613, "price_text": "S$613", "is_free": false, "price_not_published": false, "original_price": null, "price_dropped": false, "currency": "SGD", "condition": "lightly_used", "condition_label": null, "status": "active", "posted_at": "2026-09-16T12:08:56Z", "is_bumped": false, "bumped_at": null, "last_bumped_at": null, "likes_count": 0, "card_type": "certified_product", "vertical": null, "is_certified": true, "buyer_protection_tag": false, "deal_label": null, "tags": [ "3M Batt Promo" ], "attributes": [], "card_lines": [ "Lightly used · Free delivery" ], "image": "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_256gb_black_1789560536_a638ad66_thumbnail", "images": [ "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_256gb_black_1789560536_a638ad66_thumbnail" ], "country": "sg", "is_promoted": false } ], "count": 48, "total_results": 7000, "total_is_lower_bound": true, "has_more": true, "next_cursor": "eyJhZ2dyZWdhdGVfY291bnQiOjQ4LCJhcHBsaWVkX2NjaWQiOiIiLCJjb250ZW50Ijp7ImJhbm5lcl9jY2lkIjoiNjM1OSIsImN1cnJlbnRfY291bnQiOjQ4LCJzcmNfcGFnaW5nX2luZm8iOnsiaW50ZXJuYWxfYWRzIjp7InBhZ2VfbnVtYmVyIjoxfSwibGlzdGluZ19jYXJkLWJsb2NrIjp7ImNodW5rX251bWJlciI6MCwiY2h1bmtfc3RhcnRfb2Zmc2V0IjowLCJjcmVhdGVkX2F0IjoiMjAyNi0wOS0xNlQxMzo0MDo0NVoiLCJvZmZzZXQiOjQ4LCJ2ZXJzaW9uIjoiODJiOWFkYzctMTA4Mi00M2Y2LWIyOGQtNDFjOTc5OWE4OWFlIn19fSwiZW5mb3JjZV9jYXRlZ29yeV9maWx0ZXIiOmZhbHNlLCJmaWVsZHNldF9jY2lkIjoiNjM1OSIsInBhZ2Vfc2l6ZSI6NDgsInF1c3ZjX3Jlc3AiOiJJazBLQ1dsd2FHOXVaU0F4TlJJSmFYQm9iMjVsSURFMVNBSmFDeElKYVhCb2IyNWxJREUxYWdscGNHaHZibVVnTVRXS0FRbHBjR2h2Ym1VZ01UV1NBUXNTQ1dsd2FHOXVaU0F4TmFBQkFUSUNDQUZDRUFvRU5qTTFPUlhGQzNrL0hRQUFnRDlLRGdvRE1qRTFFZ2ROYjJKcGJHVnpXaEFLQkRZek5Ua1Z4UXQ1UHgwQUFJQS9ZaEFLQkRZek5Ua1ZBQUNBUHgwQUFJQS9haEFLQkRZek5Ua1ZBQUNBUHgwQUFJQS8iLCJyZXFfaGFzX2NoYW5nZWQiOmZhbHNlLCJzZWFyY2hfcGFyYW1zIjoiR2dJSU1Db0VDTHZoY2pJTkNnbHBjR2h2Ym1VZ01UVjRBVUlFQ0FGNEFVb0NHQXRTQkFnQkVBRmFCaUFCS0FGQUFXQUJhZ0lJQVE9PSIsInNlc3Npb25faWQiOiI4ODNhM2ZiMS02ZTI1LTRjMzAtOTQzZS0wZTNkZTJjNjYxODgiLCJzdWdnZXN0ZWRfY2F0ZWdvcnlfdHlwZSI6Miwic3VnZ2VzdGVkX2NjaWQiOiI2MzU5In0=", "bumped_count": 12, "bumped_dropped": 0, "non_listing_cards_dropped": 1, "country": "sg", "currency": "SGD", "sort_applied": "best_match", "filters_applied": [], "query": "iphone 15", "autocorrect": false } }
How the Carousell API works
Carousell is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 252 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Track second-hand iPhone prices in three countries without free ads and bumps distorting them
Carousell mixes free give-aways, listings without a price and paid bumps into the same results. Filter them out with the fields the API returns, then open the listings you want to compare.
{"query": "iphone 15 pro", "country": "my", "sort": "newest", "condition": "like_new", "exclude_bumped": true}Like-new iPhone 15 Pro listings in Malaysia, newest first, without bumped listings. Skip rows where price is null; original_price shows sellers who lowered their price. Repeat with country sg and ph.
{"listing_id": <listing_id from above>, "country": "my"}Full description, storage and colour, battery health where the seller gave it, status (reserved or sold means the offer is gone), and the seller's rating and review count.
A like-for-like asking-price series per country with condition, storage and seller quality attached - two credits per call.
curl -X POST https://api.reefapi.com/carousell/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","country":"sg"}'{
"ok": true,
"data": { … },
"meta": {
"api": "carousell",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What a Carousell price and date actually mean - four listings, four answers
On Carousell a listing card can show S$0 for two different reasons, and the time on a card is not always when the item was posted. This engine returns price only when there is a real asking price, says whether a zero is a give-away or a missing price, and keeps the bump time apart from the posting time.
| Listing (measured 2026-09-15) | What the card shows | price / flags | dates |
|---|---|---|---|
| 'White Leather Natuzzi Sofa', Singapore | FREE, bumped | null / is_free true | posted_at null, bumped_at set |
| 'iPhone 13 PRO MAX … Repair', Singapore phone repair shop | S$0 | null / price_not_published true | - |
| 'iPhone 14 Plus Starlight 128GB', Singapore | S$500 | 500 / SGD | posted_at 2026-09-15 |
| 'iPhone 15 Pro Max Natural Titanium 512GB', Singapore | S$950, bumped | 950 / is_bumped true | posted_at null, bumped_at set (posted 2026-09-04) |
A 'sofa' search sorted by lowest price returned 31 free sofas and 17 listings without a price before the first priced one; checked against the listings' own pages, 10 of 10 zero-price cards were classified correctly.
Six countries, one platform, and what a zero and a date do not mean
Measured on 2026-09-15 with 64 live calls across all four actions in six countries, 61 end-to-end cases, a 16-listing check against the listings' own pages and 30 no-match searches. Two of these lines go against us.
Singapore, Malaysia, Hong Kong, the Philippines, Taiwan and Indonesia, with prices as numbers in SGD, MYR, HKD, PHP, TWD and IDR. Car and property listings are included in the same search and listing actions.
Free give-aways come back with is_free true and listings without an asking price with price_not_published true; both have price null. 10 of 10 zero-price listings were classified the same way as on their own pages.
Bumped listings carry is_bumped and bumped_at; posted_at is only set when the card shows the posting time. exclude_bumped drops them and counts how many were removed.
On 16 listings across phones, furniture, fashion, gaming, cars and property in five countries, title, price, free flag, currency, status and likes matched the listing page 16 of 16, and the search row matched the full listing 16 of 16.
22 real searches in six countries returned only matching listings and none came back empty; 8 nonsense searches returned empty pages rather than unrelated listings.
Carousell rounds large result counts (10,000+, 100,000+), so total_results is a lower bound there. Category, condition and detail labels come back in English; titles and descriptions stay as the seller wrote them.
Search filters by keyword, category id, price and condition; area, distance and car or property-specific filters (make, bedrooms) are not available. Category ids come from suggest or a listing, not from a category tree.
What people build with Carousell
The jobs this data is most often used for.
endpoints
credits per call
Resale and recommerce teams track second-hand prices for phones, consoles and furniture across Singapore, Malaysia and the Philippines with search sorted by newest and filtered by condition.
Used-car and property analysts read Carousell's car and rental listings with their registration, depreciation, COE, bedrooms and district details from listing.
Marketplace sellers and agencies monitor competitors' shops with seller_listings, including what is reserved and what has sold.
Price-intelligence tools separate free give-aways, services without a price and real asking prices instead of averaging zeros.
What Carousell data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 252 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/carousell/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","country":"sg"}'import requests
r = requests.post(
"https://api.reefapi.com/carousell/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone",
"country": "sg"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Carousell.
Get a free key →Which Carousell countries does the API cover?▾
Six: Singapore (SGD), Malaysia (MYR), Hong Kong (HKD), the Philippines (PHP), Taiwan (TWD) and Indonesia (IDR), selected with country sg, my, hk, ph, tw or id. Prices come back as numbers in that country's currency. On 2026-09-15 every action was tested live in all six.
Why is price null on some listings?▾
Because the listing has no asking price. Carousell shows a zero both for free give-aways and for listings that publish no price, such as repair services. Free items come back with price null and is_free true, listings without a price with price null and price_not_published true, so a zero never enters your averages.
What does is_bumped mean?▾
The seller paid to push the listing back up the results. A bumped card shows when it was bumped, not when it was posted, so bumped rows carry bumped_at and posted_at is null (listing still returns the original posting date). Bumped listings still match your search - on 'tuition' 44 of 48 were bumped - so they stay in results; set exclude_bumped true to drop them.
Does it cover cars and property?▾
Yes. Car and property listings come back from search with their card facts - registration date, depreciation and mileage for cars, bedrooms, bathrooms, size and nearest MRT for property - and listing adds the full details, such as engine capacity, OMV, ARF, COE and road tax, or property name, lease, furnishing and district.
How do I page through results, and how many are there?▾
Each page has 48 listings (40 for seller_listings) and a next_cursor; pass it as cursor to get the next page. Carousell rounds large totals - 10,000+ or 100,000+ - and total_results then carries that number with total_is_lower_bound true. Narrow a big query with category_id, price or condition.
Can I see sold and reserved items?▾
Yes. seller_listings returns a seller's reserved and sold items with their status, and listing reads them too, with status reserved or sold and is_active false.
What happens with a misspelled keyword?▾
By default the search runs exactly what you typed, so 'iphnoe' returns nothing. Set autocorrect true to let Carousell correct it. A keyword with no matches returns an empty page - in 8 nonsense searches on 2026-09-15 none came back padded with unrelated listings.
What is the Carousell API?▾
Carousell API is a ReefAPI endpoint group for southeast asia's classifieds: listings in six countries, local prices, free and bumped ads marked. It returns live JSON through POST requests under /carousell/v1.
Is the Carousell API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Carousell calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Carousell login or account?▾
No login to Carousell is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Carousell data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Carousell API use?▾
Carousell actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Carousell from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call carousell actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Carousell API a Carousell scraper?▾
It is the managed alternative to a DIY Carousell scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same southeast asia's classifieds: listings in six countries, local prices, free and bumped ads marked back as clean JSON.
16 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Carousell, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.