Carousell Scraper | Listings, Prices and Sellers avatar

Carousell Scraper | Listings, Prices and Sellers

Pricing

from $6.90 / 1,000 listings

Go to Apify Store
Carousell Scraper | Listings, Prices and Sellers

Carousell Scraper | Listings, Prices and Sellers

Carousell scraper (旋轉拍賣) for listings, prices and sellers in Singapore, Malaysia, Hong Kong, Taiwan, the Philippines and more. Search by keyword, URL or listing id: 20 listings in 2 seconds, 51 fields each, with full description, item details, seller ratings, meet-up points and photos. No account.

Pricing

from $6.90 / 1,000 listings

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Carousell Scraper (旋轉拍賣) | Listings, Prices and Sellers (2026)

Carousell listings, 51 fields each, from any keyword.

From SilentFlow. Creators of Facebook Search Scraper and JD Products Scraper (#1 for “jd scraper” in Apify Store search), with 890,000+ combined lifetime runs.

Every Carousell listing as one complete row: the price in local currency, the full description, the condition, the item details the seller filled in, the seller's rating and reviews, the meet-up points, the dates and every photo. Our test run returned 20 iPhone 15 listings from Carousell Singapore in 4 seconds, each one with its listing page already read, with no Carousell account.

Why choose this actor?

Opening forty Carousell tabs to check the battery health, the storage and the meet-up place of each phone? Building a price guide from search cards that stop at the title and the price? Pasting a list of listings you already track and finding no way to refresh them in one go?

  • 49 fields filled per listing, not 18. On the default run (20 listings for iphone 15 in Singapore), 49 of the 52 data fields carry a value on at least half the rows; on a 250-row run for sofa, 47 do. Every row comes with its listing page read: the full description, the category, the item details as clean pairs (Model, Storage, Color, Battery Health, Screen, Body on phones; Material, Seater on sofas), the meet-up points with address and coordinates, the posting, update and expiry dates, and every photo in full size. The most used Carousell scraper on the Store announces 18 fields, with descriptions and categories only on an opt-in that stops at 100 listings.
  • The seller, not just a username. Each row carries the seller's rating, review count split into positive, neutral and negative, followers, response rate, join date, verifications (email, mobile, Google, Facebook, ID) and the Professional Seller badge when Carousell shows it. On the default run, all 20 rows had the seller's join date and 19 had a rating; the 20th seller had no review yet, so the rating is null. Shortlist serious sellers, skip brand-new accounts, or build a lead list of shops, from the same table as the prices.
  • Keywords, URLs and listing ids, in one form. Search by keyword, paste any Carousell address (a search with its filters, a category, a single listing) from any of the nine country sites, or paste bare listing ids such as 1472055557. In our test, five ids gave five full rows in 3 seconds, and three addresses (a Malaysian search sorted by recent with a price cap, a Singapore category and a single listing) gave 30 rows in 4 seconds: the listing, 15 Malaysian sofas at 500 ringgit or less, and 14 category listings. The most used Carousell scraper takes keywords and URLs, not ids.

Try Carousell Scraper free

Try your first 20 listings

Paste this input in the JSON tab of the Input page and press Start. It reads the 20 listings Carousell Singapore ranks first for iphone 15, with the listing page of each one.

{
"keywords": ["iphone 15"],
"country": "sg",
"maxItems": 20,
"sort": "best_match"
}

It runs on the Apify Free plan. Each listing becomes one row of your dataset: open the Output tab to see the table, switch to the Sellers view to compare sellers, or export the rows as JSON, CSV or Excel. Raise maxItems when you need more: our 250-row run for sofa finished in 23 seconds.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full picture of this scraper:

You have access to the Carousell Scraper on Apify: silentflow/carousell-scraper
It reads Carousell (carousell.sg, carousell.com.my, carousell.com.hk, carousell.ph, tw.carousell.com,
id.carousell.com, au.carousell.com, nz.carousell.com, ca.carousell.com) without an account and returns
one row per listing. Every row includes the listing page: full description, item attributes,
seller rating and reviews, meet-up points, dates and all photos.
Input schema (no field is required, at least one of keywords, startUrls or ids is needed):
- keywords (array of strings): searches, one per entry ("iphone 15", "sofa", "road bike").
- startUrls (array of {url}): Carousell addresses from any country site.
/search/{keyword}/ keeps sort_by, price_start, price_end and layered_condition from the address.
/categories/{name}-{id}/ reads a category (add ?search= to search inside it).
/p/{title}-{id}/ or /p/{id} reads one listing.
- ids (array of strings): listing ids ("1472055557"). A pasted listing URL also works.
- country (string, default "sg"): sg, my, hk, ph, tw, id, au, nz, ca. Names and 3-letter codes also work
("malaysia", "mys"). Used for keywords and ids; a URL keeps its own country.
- maxItems (integer, default 100): max rows for the whole run. Ids and listing URLs are read first, then the
rest of the cap is shared evenly between keywords and search URLs.
- sort (string, default "best_match"): best_match, recent, popular, price_low_to_high, price_high_to_low.
- priceMin, priceMax (integers, local currency): price band. Empty means no bound.
- condition (array): any of brand_new, like_new, lightly_used, well_used, heavily_used.
Filters written in a URL win over the form filters for that URL.
Output per listing (52 data fields + 2 meta, null when absent):
- id (string), url (string), title (string)
- description (string), condition (string), category (string), categoryId (string),
attributes (object, label -> value, e.g. {"Storage": "256GB"}), status (string, "active" for a live listing)
- sellerId, sellerUsername, sellerName, sellerUrl, sellerAvatarUrl, sellerType (strings),
sellerJoinedAt (RFC 3339), sellerRating (number, 0-5), sellerReviewsCount, sellerPositiveReviews,
sellerNeutralReviews, sellerNegativeReviews, sellerFollowersCount (integers),
sellerResponseRate (high | medium | low), isSellerIdVerified (boolean), sellerVerifications (array)
- price (number), priceText (string, as shown), originalPrice (number, before a price drop),
currency (ISO code), likesCount, commentsCount (integers), isFree, isFixedPrice, isBuyerProtection (booleans)
- country, countryCode, city, locationName, locationAddress (strings), latitude, longitude (numbers),
meetups (array of {name, address, latitude, longitude, note}), hasMeetup, hasDelivery (booleans),
dealOptions (array), postedAt, updatedAt, bumpedAt, expiresAt (RFC 3339 UTC)
- imageUrl (string), images (array of strings), imagesCount (integer)
- searchQuery (string, the keyword, URL or id that found the row), scrapedAt (RFC 3339)
Use apify-client for Python or JavaScript: client.actor("silentflow/carousell-scraper").call(run_input=...).

How to scrape Carousell listings

Three inputs, from the simplest to the most complete. Each one runs as is.

Get the top listings for a keyword in Singapore

The default form. One keyword, the country, a cap.

{
"keywords": ["iphone 15"],
"country": "sg",
"maxItems": 20
}

Pull the cheapest like-new road bikes in Hong Kong

Sort by price, set a floor to skip accessories and parts, and keep only two conditions. In our test this input returned 25 rows in 4 seconds, every one of them in the asked conditions.

{
"keywords": ["road bike"],
"country": "Hong Kong",
"sort": "price_low_to_high",
"priceMin": 500,
"condition": ["like_new", "lightly_used"],
"maxItems": 25
}

Read a search, a category and a single listing from their addresses

Paste what you see in your browser. Each address keeps its own country and filters: the Malaysian search below stays sorted by recent with a ceiling of 500 ringgit. The single listing is read first, then the cap is shared by the two searches: in our test, 1 + 15 + 14 rows in 4 seconds.

{
"startUrls": [
{ "url": "https://www.carousell.com.my/search/sofa/?sort_by=3&price_end=500" },
{ "url": "https://www.carousell.sg/categories/mobile-phones-gadgets-215/" },
{ "url": "https://www.carousell.sg/p/1469653290" }
],
"maxItems": 30
}

Input parameters

FieldTypeWhat it does
keywordsarray of stringsSearches, one keyword per line. Each one is searched in the selected country.
startUrlsarray of URLsCarousell search, category or listing addresses, from any of the nine country sites.
idsarray of stringsListing ids, the number at the end of a listing address.
countrystringThe Carousell site for keywords and ids: Singapore by default. Code, 3-letter code or English name.
maxItemsintegerMax rows for the whole run, across keywords, URLs and ids, shared evenly between searches. 100 by default, 20 in the prefilled form, no fixed limit.
sortstringBest match, Recent, Popular, Price low to high, Price high to low.
priceMinintegerLowest price, in the local currency of the country.
priceMaxintegerHighest price, in the local currency of the country.
conditionarrayBrand new, Like new, Lightly used, Well used, Heavily used. Several can be combined.

No field is required: the prefilled form runs as is. At least one keyword, URL or id is needed.

Accepted address formats

  • Search: https://www.carousell.sg/search/iphone%2015/, with ?sort_by=, price_start=, price_end= and layered_condition= when you set them on the site.
  • Search by query string: https://www.carousell.sg/search/?search=road+bike.
  • Category: https://www.carousell.sg/categories/mobile-phones-gadgets-215/, or a sub-category such as /categories/mobile-phones-gadgets-215/iphones-1235/. Add ?search=sofa to search inside a category.
  • Listing: https://www.carousell.sg/p/iphone-15-pro-max-1450222721/ or the share link https://www.carousell.sg/p/1450222721.
  • Hosts: www.carousell.sg, www.carousell.com.my, www.carousell.com.hk, www.carousell.ph, tw.carousell.com, id.carousell.com, au.carousell.com, nz.carousell.com, ca.carousell.com. Links from www.carousell.com use the selected country.

Countries. Type the code (my), the 3-letter code (mys) or the English name (Malaysia): all three work.

What data can you extract from Carousell?

Each row is one listing, with 52 data fields grouped the way you read them, plus searchQuery and scrapedAt. A field Carousell does not publish for a listing is null, never an empty text.

GroupFields
Identity (3)id, url, title
Content (6)description, condition, category, categoryId, attributes, status
Seller (16)sellerId, sellerUsername, sellerName, sellerUrl, sellerAvatarUrl, sellerType, sellerJoinedAt, sellerRating, sellerReviewsCount, sellerPositiveReviews, sellerNeutralReviews, sellerNegativeReviews, sellerFollowersCount, sellerResponseRate, isSellerIdVerified, sellerVerifications
Measures (9)price, priceText, originalPrice, currency, likesCount, commentsCount, isFree, isFixedPrice, isBuyerProtection
Place and time (15)country, countryCode, city, locationName, locationAddress, latitude, longitude, meetups, hasMeetup, hasDelivery, dealOptions, postedAt, updatedAt, bumpedAt, expiresAt
Media (3)imageUrl, images, imagesCount
Meta (2)searchQuery, scrapedAt

A few facts that help you use the data:

  • id is Carousell's listing id and never changes. url is the share link Carousell itself hands out, on the listing's own country site.
  • price is a number in the local currency named in currency (SGD, MYR, HKD, PHP, TWD, IDR, AUD, NZD, CAD). priceText is the price as printed on the listing. originalPrice is the price before a drop, when the seller lowered it.
  • attributes holds the item details the seller filled in for the category: phones carry model, storage, color, battery health and screen and body condition; furniture carries material and seats; other categories carry their own. Categories without such details (bicycles, for example) leave it null.
  • postedAt, updatedAt and expiresAt are RFC 3339 timestamps in UTC. bumpedAt is set when the listing reached the search through a recent bump by its seller. Some country sites do not publish an expiry date.
  • meetups lists every place the seller offers to meet, each with its address and coordinates; latitude and longitude are the listing's main location.
  • images are full-size photos in the seller's order; imageUrl is the first one.

Output example

One complete row from the default run (iphone 15, Singapore):

{
"id": "1472059871",
"url": "https://www.carousell.sg/p/1472059871",
"title": "iPhone 15 Black 128GB",
"description": "Comes with casing.",
"condition": "Heavily used",
"category": "iPhone 15 Series",
"categoryId": "6359",
"attributes": {
"Battery Health": "75.0%",
"Body": "Scratches visible from 20cm away, may have dents",
"Color": "Black",
"Model": "iPhone 15",
"Screen": "Micro scratches, barely visible even when the screen is switched off",
"Storage": "128GB"
},
"status": "active",
"sellerId": "56138206",
"sellerUsername": "zenly_zones",
"sellerName": "Zenly Zones",
"sellerUrl": "https://www.carousell.sg/u/zenly_zones/",
"sellerAvatarUrl": "https://media.karousell.com/media/photos/profiles/2025/10/04/zenly_zones_1759541849_f8209cfd.jpg",
"sellerType": null,
"sellerJoinedAt": "2025-10-04T01:30:46Z",
"sellerRating": 5,
"sellerReviewsCount": 3,
"sellerPositiveReviews": 3,
"sellerNeutralReviews": 0,
"sellerNegativeReviews": 0,
"sellerFollowersCount": 1,
"sellerResponseRate": "low",
"isSellerIdVerified": true,
"sellerVerifications": ["email", "mobile", "google", "id"],
"price": 520,
"priceText": "S$520",
"originalPrice": null,
"currency": "SGD",
"likesCount": 0,
"commentsCount": 0,
"isFree": false,
"isFixedPrice": false,
"isBuyerProtection": false,
"country": "Singapore",
"countryCode": "SG",
"city": "Singapore",
"locationName": "Tengah Garden Walk",
"locationAddress": "Tengah Garden Walk",
"latitude": 1.361446,
"longitude": 103.731463,
"meetups": [
{
"name": "Tengah Garden Walk",
"address": "Tengah Garden Walk",
"latitude": 1.361446,
"longitude": 103.731463,
"note": null
}
],
"hasMeetup": true,
"hasDelivery": false,
"dealOptions": ["meetup"],
"postedAt": "2026-11-03T16:25:40Z",
"updatedAt": "2026-11-03T16:26:13Z",
"bumpedAt": null,
"expiresAt": "2027-02-01T16:25:40Z",
"imageUrl": "https://media.karousell.com/media/photos/products/2026/11/3/iphone_15_black_128gb_1793723140_c8864d94.jpg",
"images": [
"https://media.karousell.com/media/photos/products/2026/11/3/iphone_15_black_128gb_1793723140_c8864d94.jpg"
],
"imagesCount": 1,
"searchQuery": "iphone 15",
"scrapedAt": "2026-11-03T16:30:33Z"
}

Advanced usage

Five recipes for the jobs teams run most often. Each one runs as is.

Catch new deals every morning under your target price

Sort by recent and cap the price, then schedule the run daily in the Schedules tab. Each morning's dataset holds the freshest listings first, freshly bumped ones included (bumpedAt tells them apart).

{
"keywords": ["ps5", "nintendo switch oled"],
"country": "sg",
"sort": "recent",
"priceMax": 400,
"maxItems": 100
}

Compare one model across three countries in one run

Addresses keep their own country, so three search links give you Singapore, Malaysia and the Philippines side by side, each in its own currency. Group the export by countryCode and condition to get a price grid. With a cap of 60 in our test, each country returned 20 like-new rows in its own currency, in 7 seconds.

{
"startUrls": [
{ "url": "https://www.carousell.sg/search/iphone%2015%20pro/" },
{ "url": "https://www.carousell.com.my/search/iphone%2015%20pro/" },
{ "url": "https://www.carousell.ph/search/iphone%2015%20pro/" }
],
"condition": ["like_new"],
"maxItems": 300
}

Sweep a whole category, newest first

A category address reads everything Carousell files there, across keywords you would never think of. Our Singapore phones and gadgets sweep came back with cases, smart watches, Samsung, Huawei and iPhone listings in the same table.

{
"startUrls": [
{ "url": "https://www.carousell.sg/categories/mobile-phones-gadgets-215/?sort_by=3" }
],
"maxItems": 500
}

Refresh the listings you already track

Keep a list of listing ids in your sheet and paste it here: each id comes back with today's price, status, likes and dates. A listing that was sold and removed gives no row, which is your signal to drop it.

{
"ids": ["1471526192", "1471990470", "1470210718", "1471989781", "1444301374"],
"maxItems": 50
}

Build a shortlist of trusted sellers for a product

Search only brand-new stock, then sort the export by sellerReviewsCount and keep rows where sellerType is Professional Seller or sellerRating is above 4.8. The Sellers view of the dataset shows rating, reviews, followers, response rate and join date next to each listing.

{
"keywords": ["dyson v15", "dyson airwrap"],
"country": "Malaysia",
"condition": ["brand_new"],
"maxItems": 200
}

FAQ

What does this Carousell scraper extract? One row per listing with 52 data fields: title, full description, condition, category, item details, status, the seller's profile, rating and reviews, price in local currency and the price before a drop, likes and comments, meet-up points with coordinates, delivery options, posting, update, bump and expiry dates, and every photo.

What is Carousell? Carousell is one of South-East Asia's largest classifieds marketplaces for new and second-hand goods, founded in Singapore in 2012. People sell phones, furniture, fashion, cars and services there, and meet up or ship to close the deal. In Taiwan it is known as 旋轉拍賣.

Which countries does it cover? Nine Carousell sites: Singapore, Malaysia, Hong Kong, the Philippines, Taiwan, Indonesia, Australia, New Zealand and Canada. Pick the country in the form for keywords and ids; a pasted address always keeps its own country. Every country returned rows in our tests, in its own currency.

Do I need a Carousell account? No. The scraper reads public listings only. No login, no account, no API key.

How many listings can I get? There is no fixed limit: the run stops at maxItems or when Carousell has no more results. With several keywords or search addresses, the cap is shared between them and what one search cannot fill passes to the next, so no keyword is left out. Our 250-row run for sofa in Singapore read three pages in 23 seconds. A broad keyword holds thousands of listings (Carousell counted 7,000+ for iphone 15 and 10,000+ for sofa).

Can I combine filters? Yes, they stack. sort set to price_low_to_high, priceMin 500 and condition set to like_new and lightly_used returns the cheapest like-new or lightly used items above 500 in local currency, cheapest first. Filters written in a pasted address win over the form for that address; the form fills in what the address leaves out.

Can I scrape several keywords, URLs and ids in one run? Yes. Put them all in the same input. The run reads ids first, then addresses, then keywords, so a broad keyword never crowds out the listings you pasted, and it never returns the same listing twice: a listing found by two keywords appears once.

How fresh is the data? Live. Every run reads Carousell at that moment, with no cache. Schedule the actor to track prices, new listings or sold items over time.

Why are some fields empty? Carousell does not publish every field for every listing. attributes exists only in categories with item details, originalPrice only after a price drop, bumpedAt only for bumped listings, sellerType only for professional sellers, and some country sites give no expiry date. An absent value is null, never an empty text or a made-up 0.

Are the links permanent? id never changes and url is Carousell's own share link for the listing. Once a listing is sold and removed, its page and photos go away with it, so keep the fields you need in your own storage.

More SilentFlow scrapers

🛒 E-commerce

💼 Jobs

🏠 Real estate

📣 Social media

🏢 Business data

✈️ Travel

🎯 Lead generation

🔎 SEO

🎬 Video

📰 News

🧰 More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available data from Carousell (carousell.sg and its sister sites). It does not bypass any login, paywall or CAPTCHA, and never uses a Carousell account. Users are responsible for complying with Carousell's terms of service and applicable data protection laws (GDPR, CCPA, Singapore's PDPA, and PIPL where relevant). Rows carry seller usernames, display names, profile links, avatars and meet-up places, which can be personal data: handle them accordingly, keep only what you need, and honor removal requests. The data returned is informational; verify accuracy for regulated use cases.

Carousell Scraper by SilentFlow: Carousell listings, prices and sellers from nine countries, ready for your spreadsheet.