# Carousell Scraper — Listings, Prices & Sellers in 9 Markets (`hipersoft/carousell-scraper`) Actor

Scrape Carousell listings in Singapore, Malaysia, Indonesia, Hong Kong, Taiwan, the Philippines, Australia, Canada and New Zealand: price, condition, location, seller, photos, date. Sort by newest or price, filter by price and condition.

- **URL**: https://apify.com/hipersoft/carousell-scraper.md
- **Developed by:** [Hipersoft](https://apify.com/hipersoft) (community)
- **Categories:** E-commerce, Other
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / listing scraped

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Carousell Scraper — Listings, Prices & Sellers in 9 Markets

**Carousell Scraper** extracts **Carousell listings** by keyword from Singapore, Malaysia, Indonesia, Hong Kong, Taiwan, the Philippines, Australia, Canada and New Zealand: **title, price, currency, condition, location, seller, photos, posting date and URL**. Sort by newest or price, filter by price, condition and age, and pay only for the listings you get.

![Carousell Scraper input — search terms, market, sort and filters](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/carousell-scraper-input.png?v=2)

### What does Carousell Scraper do?

Give it search terms or Carousell search and listing links, pick a market and get clean rows you can export or feed into your own tools. Ads are left out. Turn on **listing details** for the full description, all photos, category, likes, meet-up location and seller stats.

### What data can you scrape from Carousell?

| Data | Fields |
| --- | --- |
| Listing | `id`, `title`, `description`, `condition`, `timeCreated`, `url`, `primaryPhotoUrl` |
| Price | `price` (number), `currency`, `priceFormatted` |
| Location | `location`, `countryCode` |
| Seller | `sellerId`, `sellerUsername`, `sellerProfileUrl` |
| With details on | `photos`, `category`, `likesCount`, `status`, `meetupLocation`, `meetupAddress`, `lastModified`, `seller` (followers, positive and negative reviews, joined date) |

### Use cases

- **Resale price research:** see what used phones, car parts, bags or furniture really sell for.
- **Deal alerts:** run on a schedule sorted by newest and catch underpriced listings early.
- **Competitor monitoring:** track shops and pricing in your category.
- **Market data across Southeast Asia:** compare the same product in Singapore, Malaysia, Indonesia and the Philippines.

### How to scrape Carousell

1. Open Carousell Scraper.
2. Add **search terms**, or paste Carousell search or listing links.
3. Pick a **Country** and, if you like, a sort order and filters.
4. Click **Start**.
5. Download JSON, CSV, Excel or XML.

### Input

```json
{
  "queries": ["iphone 15"],
  "country": "sg",
  "sortBy": "recent",
  "minPrice": 400,
  "maxPrice": 900,
  "conditions": ["Like new", "Lightly used"],
  "postedWithinDays": 7,
  "maxItemsPerQuery": 100
}
```

| Field | Description |
| --- | --- |
| `queries` | Search terms. |
| `startUrls` | Carousell search or listing links. Seller and category links aren't supported yet. |
| `country` | `sg`, `my`, `id`, `hk`, `tw`, `ph`, `au`, `ca` or `nz`. |
| `sortBy` | `best_match`, `recent`, `price_low_to_high` or `price_high_to_low`. |
| `minPrice` / `maxPrice` | Price range in local currency. |
| `conditions` | Brand new, New, Like new, Lightly used, Well used, Heavily used, Used. |
| `postedWithinDays` | Only listings from the last N days. |
| `scrapeDetails` | Fetch the full listing and seller stats. Slower, with one extra request charge per listing. |
| `maxItemsPerQuery` | Listings per search (default 200). |
| `maxPagesPerQuery` | Result pages per search (default 50). |

Filters are applied as results arrive. If 10 pages in a row have no match, that search stops, and pages that delivered nothing aren't charged.

### Output

Real rows, with long values shortened.

![Carousell Scraper output example — listing, price, condition, seller and link](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/carousell-scraper-output.png?v=2)

```json
{
  "id": "1472230385",
  "title": "iPhone 15 Pro White Titanium 256GB",
  "priceFormatted": "S$688",
  "price": 688,
  "currency": "SGD",
  "description": "- Model: iPhone 15 Pro (White Titanium) 256GB - Battery health at 77% - Totally no scratches, well protected by screen protector and casing  - No wear on charging port - Extras: Glittery camera lens protectors installed",
  "condition": "Like new",
  "location": "Singapore",
  "countryCode": "SG",
  "primaryPhotoUrl": "https://media.karousell.com/media/photos/products/2026/11/4/iphone_15_pro_white_titanium_2_1793798176_fd767f19_thumbnail.jpg",
  "sellerId": "63084",
  "sellerUsername": "starsaligned",
  "sellerProfileUrl": "https://www.carousell.sg/u/starsaligned/",
  "timeCreated": "2026-11-04T13:16:16.000Z",
  "url": "https://www.carousell.sg/p/1472230385/",
  "sourceUrl": "https://www.carousell.com",
  "collectedAt": "2026-11-04T13:27:31.441Z"
}
```

With **listing details** on:

```json
{
  "id": "1469111395",
  "title": "Dyson Submarine Wet Roller Head",
  "priceFormatted": "S$130",
  "price": 130,
  "currency": "SGD",
  "description": "Dyson Submarine wet roller head attachment. Deep cleaning tool for hard floors w…",
  "condition": "Like new",
  "location": "Singapore",
  "countryCode": "SG",
  "primaryPhotoUrl": "https://media.karousell.com/media/photos/products/2026/10/19/dyson_submarine_wet_roller_hea_1792426155_0ab1174c_thumbnail.jpg",
  "sellerId": "1313480",
  "sellerUsername": "josquared2992",
  "sellerProfileUrl": "https://www.carousell.sg/u/josquared2992/",
  "timeCreated": "2026-10-19T16:09:15.000Z",
  "url": "https://www.carousell.sg/p/1469111395/",
  "sourceUrl": "https://www.carousell.com",
  "collectedAt": "2026-11-04T13:27:36.782Z",
  "category": "Vacuum Cleaner & Housekeeping",
  "likesCount": 0,
  "isPopular": false,
  "status": "L",
  "meetupLocation": "Blk 206 Pasir Ris Street 21",
  "meetupAddress": "206 Pasir Ris St. 21, 510206",
  "photos": [
    "https://media.karousell.com/media/photos/products/2026/10/19/dyson_submarine_wet_roller_hea_1792426155_0ab1174c.jpg"
  ],
  "seller": {
    "id": "1313480",
    "username": "josquared2992",
    "followers": 103,
    "listingsCount": 0,
    "soldCount": null,
    "positiveReviews": 59,
    "negativeReviews": 1,
    "feedbackScore": null,
    "feedbackCount": null,
    "responseRate": null,
    "isNewSeller": false,
    "dateJoined": "2015-02-26T09:38:02.000Z"
  },
  "lastModified": "2026-11-04T13:14:06.000Z"
}
```

#### Output schema

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Listing ID. |
| `title` | string | Listing title. |
| `price` | number | Price as a number. Some sellers use placeholders such as 0 or 88888888; use `minPrice` and `maxPrice` to filter them out. |
| `currency` | string | SGD, MYR, IDR, HKD, TWD, PHP, AUD, CAD or NZD. |
| `priceFormatted` | string | Price as displayed. |
| `description` | string | Short text on the card; full text with details on. |
| `condition` | string | Condition when listed. Some shop listings have none. |
| `location` / `countryCode` | string | Where the item is. |
| `primaryPhotoUrl` | string (URL) | Main photo. |
| `sellerId` / `sellerUsername` / `sellerProfileUrl` | string | The seller. |
| `timeCreated` | string (ISO date) | When it was posted. |
| `url` | string (URL) | Link to the listing. |
| `collectedAt` | string (ISO date) | When the row was collected. |
| `photos`, `category`, `likesCount`, `offerCount`, `status`, `meetupLocation`, `meetupAddress`, `lastModified`, `seller` | various | With `scrapeDetails` on. |

### Need other marketplace data?

- [eBay Scraper](https://apify.com/hipersoft/ebay-scraper)
- [Pinterest Scraper](https://apify.com/hipersoft/pinterest-scraper)

### FAQ

**How much does it cost?**
A small fee per listing plus a small fee per request that delivered data; see the **Pricing** tab. Set a maximum cost per run and it stops cleanly at that limit, storing only what you paid for.

**Which countries are covered?**
Singapore, Malaysia, Indonesia, Hong Kong, Taiwan, the Philippines, Australia, Canada and New Zealand.

**Can I get a seller's whole shop?**
Not yet. Search or paste listing links, and use `sellerUsername` to group results.

**Can I schedule it?**
Yes. Use Apify schedules with **Most recent** and `postedWithinDays` to catch new listings.

**Can I connect this to other tools?**
Yes, through [integrations on the Apify platform](https://apify.com/integrations): [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2) and [webhooks](https://docs.apify.com/platform/integrations/webhooks).

**Is it legal to scrape Carousell?**
It returns publicly listed data. You are responsible for how you use it, including privacy law and Carousell's terms.

### Feedback

How did it go? Good or bad, a [review](https://console.apify.com/actors/PgEszph9y5wV97Sj5/reviews) helps other users decide and tells us what to improve. Something broken or missing? Open an [issue](https://apify.com/hipersoft/carousell-scraper/issues) and we'll look at it.

### Related Actors

- [eBay Scraper](https://apify.com/hipersoft/ebay-scraper)
- [Pinterest Scraper](https://apify.com/hipersoft/pinterest-scraper)

### Notes

Independent tool, not affiliated with Carousell. Returns only public data; you are responsible for how you use it.

# Actor input Schema

## `queries` (type: `array`):

Search terms, one per line (e.g. "iphone 15", "nike shoes").

## `startUrls` (type: `array`):

Carousell search or listing URLs (e.g. https://www.carousell.sg/search/dyson/ or https://www.carousell.sg/p/1234567890/). Search URLs are paginated; listing URLs are scraped directly.

## `country` (type: `string`):

Carousell marketplace.

## `sortBy` (type: `string`):

Order of results.

## `minPrice` (type: `integer`):

Only listings at or above this price, in local currency.

## `maxPrice` (type: `integer`):

Only listings at or below this price, in local currency.

## `conditions` (type: `array`):

Keep only these conditions. Empty keeps all.

## `postedWithinDays` (type: `integer`):

Only listings posted in the last N days.

## `scrapeDetails` (type: `boolean`):

Fetch each listing's full detail: complete description, all photos, meet-up location, full seller profile (followers, reviews, feedback score, response rate, items sold) and engagement (likes, offers).

## `maxItemsPerQuery` (type: `integer`):

Cap listings per query/URL.

## `maxPagesPerQuery` (type: `integer`):

Stops a tightly filtered search from paging on and on.

## `proxyConfiguration` (type: `object`):

Optional.

## Actor input object example

```json
{
  "queries": [
    "iphone 15"
  ],
  "country": "sg",
  "sortBy": "best_match",
  "scrapeDetails": false,
  "maxItemsPerQuery": 200,
  "maxPagesPerQuery": 50
}
```

# Actor output Schema

## `listings` (type: `string`):

The scraped Carousell listings as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "iphone 15"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/carousell-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": ["iphone 15"] }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/carousell-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "iphone 15"
  ]
}' |
apify call hipersoft/carousell-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/carousell-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PgEszph9y5wV97Sj5/builds/bLU1oxeTaJSch339w/openapi.json
