Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Carousell API page →
Classifieds & Second-hand

Carousell API & Scraper

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 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search takes a keyword or a category and returns 48 listings per page with a cursor for the next one: listing id, title, price in the local currency, the seller's earlier price when it was lowered, condition, status, when it was posted, whether the seller paid to bump it and when, likes, seller username, photos, and for cars and property the key facts from the card (registration, depreciation, mileage, bedrooms, size). Filter by price range, condition and category; sort by best match, newest or price. listing returns the full ad: description, price or a free / no-price flag, fixed price or open to offers, status (active, reserved, sold), every attribute, car and property details, all photos, dates, meet-up points, mailing and Carousell shipping options, Buyer Protection, and the seller's type, verification, rating and review counts. seller_listings lists everything a seller has up, including reserved and sold items, and suggest completes keywords with the categories they map to. On 2026-09-15, 64 live calls across all four actions and six countries returned 64 answers with values, and 16 listings checked against their own pages matched on title, price, currency, status and likes 16 of 16. No account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

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 showsprice / flagsdates
'White Leather Natuzzi Sofa', SingaporeFREE, bumpednull / is_free trueposted_at null, bumped_at set
'iPhone 13 PRO MAX … Repair', Singapore phone repair shopS$0null / price_not_published true-
'iPhone 14 Plus Starlight 128GB', SingaporeS$500500 / SGDposted_at 2026-09-15
'iPhone 15 Pro Max Natural Titanium 512GB', SingaporeS$950, bumped950 / is_bumped trueposted_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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/carousell/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "iphone",
    "country": "sg"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "carousell",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 4003,
    "record_count": 48,
    "bytes": 280145,
    "cache_hit": false,
    "country": "sg",
    "pagination": {
      "has_more": true,
      "page_size": 48,
      "total": 10000
    },
    "upstream_requests": 2,
    "session_mints": "[redacted-secret]"
  },
  "data": {
    "results": [
      {
        "listing_id": "1462180531",
        "title": "iPhone 15 Pro Max 256GB Natural Titanium",
        "url": "https://www.carousell.sg/p/1462180531/",
        "price": 850,
        "price_text": "S$850",
        "is_free": false,
        "price_not_published": false,
        "original_price": null,
        "price_dropped": false,
        "currency": "SGD",
        "condition": "heavily_used",
        "condition_label": "Heavily used",
        "status": "active",
        "posted_at": "2026-09-16T13:37:27Z",
        "is_bumped": false,
        "bumped_at": null,
        "last_bumped_at": null,
        "likes_count": 0,
        "seller": {
          "id": "58025977",
          "username": "pureshark.e914df",
          "display_name": "alvin"
        },
        "card_type": null,
        "vertical": null,
        "is_certified": false,
        "buyer_protection_tag": false,
        "deal_label": null,
        "tags": [],
        "attributes": [],
        "card_lines": [
          "Meet at marsilling mrt deal fast 790"
        ],
        "image": "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_pro_max_256gb_natura_1789565847_2e86aa77_thumbnail.jpg",
        "images": [
          "https://media.karousell.com/media/photos/products/2026/9/16/iphone_15_pro_max_256gb_natura_1789565847_2e86aa77_thumbnail.jpg"
        ],
        "country": "sg",
        "is_promoted": false
      },
      {
        "listing_id": "1462180421",
        "title": "iPhone 17 Pro Max Silver 256GB",
        "url": "https://www.carousell.sg/p/1462180421/",
        "price": 1550,
        "price_text": "S$1,550",
        "is_free": false,
        "price_not_published": false,
        "original_price": null,
        "price_dropped": false,
        "currency": "SGD",
        "condition": "like_new",
        "condition_label": "Like new",
        "status": "active",
        "posted_at": "2026-09-16T13:36:58Z",
        "is_bumped": false,
        "bumped_at": null,
        "last_bumped_at": null,
        "likes_count": 0,
        "seller": {
          "id": "2880037",
          "username": "hypebeast88",
          "display_name": null
        },
        "card_type": null,
        "vertical": null,
        "is_certified": false,
        "buyer_protection_tag": false,
        "deal_label": null,
        "tags": [],
        "attributes": [],
        "card_lines": [
          "- Apple iPhone 14 Pro - Colour: Silver - Includes original box - Equipped with USB-C port - Ideal for everyday use"
        ],
        "image": "https://media.karousell.com/media/photos/products/2026/9/16/iphone_17_pro_max_silver_256gb_1789565818_34ab2005_thumbnail.jpg",
        "images": [
          "https://media.karousell.com/media/photos/products/2026/9/16/iphone_17_pro_max_silver_256gb_1789565818_34ab2005_thumbnail.jpg"
        ],
        "country": "sg",
        "is_promoted": false
      },
      {
        "listing_id": "1458064575",
        "title": "iPhone 12 Blue 128GB",
        "url": "https://www.carousell.sg/p/1458064575/",
        "price": 318,
        "price_text": "S$318",
        "is_free": false,
        "price_not_published": false,
        "original_price": null,
        "price_dropped": false,
        "currency": "SGD",
        "condition": "lightly_used",
        "condition_label": "Lightly used",
        "status": "active",
        "posted_at": null,
        "is_bumped": true,
        "bumped_at": "2026-09-16T13:34:57Z",
        "last_bumped_at": null,
        "likes_count": 1,
        "seller": {
          "id": "16771340",
          "username": "al.c2007",
          "display_name": "Al"
        },
        "card_type": null,
        "vertical": null,
        "is_certified": false,
        "buyer_protection_tag": false,
        "deal_label": null,
        "tags": [],
        "attributes": [],
        "card_lines": [
          "iPhone 12 • 128GB • Blue Well‑maintained and fully functional iPhone 12, perfect for daily use. Selling because upgraded to a newer device. Condition • ✔️ Good physical condition (no cracks, no major scratches) • ✔️ All original parts • ✔️ Cameras, Face ID, speakers, buttons all working perfectly •"
        ],
        "image": "https://media.karousell.com/media/photos/products/2026/8/27/iphone_12_blue_128gb_1787848652_350ccd76_thumbnail.jpg",
        "images": [
          "https://media.karousell.com/media/photos/products/2026/8/27/iphone_12_blue_128gb_1787848652_350ccd76_thumbnail.jpg"
        ],
        "country": "sg",
        "is_promoted": false
      }
    ],
    "count": 48,
    "total_results": 10000,
    "total_is_lower_bound": true,
    "has_more": true,
    "next_cursor": "eyJhZ2dyZWdhdGVfY291bnQiOjQ4LCJhcHBsaWVkX2NjaWQiOiIiLCJjb250ZW50Ijp7ImJhbm5lcl9jY2lkIjoiNjM5MCIsImN1cnJlbnRfY291bnQiOjQ4LCJzcmNfcGFnaW5nX2luZm8iOnsiaW50ZXJuYWxfYWRzIjp7InBhZ2VfbnVtYmVyIjoxfSwibGlzdGluZ19jYXJkLWJsb2NrIjp7ImNodW5rX251bWJlciI6MCwiY2h1bmtfc3RhcnRfb2Zmc2V0IjowLCJjcmVhdGVkX2F0IjoiMjAyNi0wOS0xNlQxMzo0MDoxMVoiLCJvZmZzZXQiOjQ4LCJ2ZXJzaW9uIjoiYWNiMGU1ZDctOTMyZi00MjI1LTlkZTktZDYzODkzNTE5NTM4In19fSwiZW5mb3JjZV9jYXRlZ29yeV9maWx0ZXIiOmZhbHNlLCJmaWVsZHNldF9jY2lkIjoiNjM5MCIsInBhZ2Vfc2l6ZSI6NDgsInF1c3ZjX3Jlc3AiOiJJanNLQm1sd2FHOXVaUklHYVhCb2IyNWxTQUZhQ0JJR2FYQm9iMjVsYWdacGNHaHZibVdLQVFacGNHaHZi",
    "bumped_count": 17,
    "bumped_dropped": 0,
    "non_listing_cards_dropped": 1,
    "country": "sg",
    "currency": "SGD",
    "sort_applied": "best_match",
    "filters_applied": [],
    "query": "iphone",
    "autocorrect": false
  }
}
Actions

What the Carousell API does

ActionDescriptionConcrete use caseKey params
searchSearch Carousell listings in one country by keyword or category, 48 per page: listing id, title, price in local currency with the seller's earlier price when it was lowered, condition, status, posting time, whether the seller paid to bump it (and when), likes, seller username, photos, and for cars and property the card's key facts (mileage, registration, bedrooms, size). Filter by price range, condition and category; sort by best match, newest or price; page with a cursor.Price-intelligence teams call search to search Carousell listings in one country by keyword or category, 48 per page.query, country, category_id, sort, price_min, ...
listingThe full listing by id or URL: title, full description, price and currency (free items and no-price services marked), fixed price or open to offers, status (active, reserved, sold), condition, category, every attribute (model, storage, size…), car and property details (engine, COE, depreciation, bedrooms, lease, district), all photos, likes, posting / edit / expiry dates, meet-up points, mailing and Carousell shipping options, Buyer Protection, and the seller: username, business or private, verification, rating with review counts, followers, join date.Classifieds aggregators call listing to get the full listing by id or URL.listing_id, country, max_rotations
seller_listingsA seller's listings on one storefront, newest first, 40 per page, including reserved and sold items: the same row fields as search, plus the seller's total listing count.Resale and arbitrage tools call seller_listings to get a seller's listings on one storefront, newest first, 40 per page, including reserved and sold….username, country, cursor, max_rotations
suggestCarousell's keyword autocomplete for one country, with the categories each suggestion maps to (their ids work as search category_id).Lead-generation teams call suggest to get carousell's keyword autocomplete for one country, with the categories each suggestion maps to….query, country, max_rotations
Code samples

Call search from your stack

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"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.carousell.search with {"query":"iphone","country":"sg"}.
Use cases

Who uses this API and why

  • 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.
FAQ

Questions developers ask before integrating

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.

docs / carousell

Carousell

Southeast Asia's classifieds: listings in six countries, local prices, free and bumped ads marked.

base /carousell/v14 endpoints
post/carousell/v1/listing2 credits

The full listing by id or URL: title, full description, price and currency (free items and no-price services marked), fixed price or open to offers, status (active, reserved, sold), condition, category, every attribute (model, storage, size…), car and property details (engine, COE, depreciation, bedrooms, lease, district), all photos, likes, posting / edit / expiry dates, meet-up points, mailing and Carousell shipping options, Buyer Protection, and the seller: username, business or private, verification, rating with review counts, followers, join date.

ParameterAllowed / rangeDescription
listing_idrequiredListing id (the number at the end of a carousell listing URL, …/p/iphone-15-pro-1459547251/) or the full URL — a URL also sets the country.
country = sgoptionalsg · my · hk · ph · tw · idWhich Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.
max_rotations = 4optional1–6Advanced: how many fresh exits to try for a difficult request (1-6).
Try in playground →
post/carousell/v1/seller_listings2 credits

A seller's listings on one storefront, newest first, 40 per page, including reserved and sold items: the same row fields as search, plus the seller's total listing count.

ParameterAllowed / rangeDescription
usernamerequiredSeller username (search rows: seller.username), or the profile URL …/u/<username>/.
country = sgoptionalsg · my · hk · ph · tw · idWhich Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.
cursoroptionalThe `next_cursor` of the previous page. Omit for the first page.
max_rotations = 4optional1–6Advanced: how many fresh exits to try for a difficult request (1-6).
Try in playground →
post/carousell/v1/suggest1 credit

Carousell's keyword autocomplete for one country, with the categories each suggestion maps to (their ids work as search category_id).

ParameterAllowed / rangeDescription
queryrequiredThe beginning of a keyword.
country = sgoptionalsg · my · hk · ph · tw · idWhich Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.
max_rotations = 4optional1–6Advanced: how many fresh exits to try for a difficult request (1-6).
Try in playground →