# Carousell Listings Scraper (`parseforge/carousell-scraper`) Actor

Scrapes Carousell listings from search results or direct URLs across Singapore, Philippines, Malaysia, Hong Kong, Indonesia, Taiwan, Australia, Canada, and New Zealand. Returns each listing with price, condition, description, and seller details.

- **URL**: https://apify.com/parseforge/carousell-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Lead generation, Other
- **Stats:** 61 total users, 4 monthly users, 98.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $16.99 / 1,000 result items

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Carousell Listings Scraper

**Scrape Carousell listings from any search, category, or direct URL across nine countries.** Each listing returns with its title, price, currency, condition, seller and photo. Filter by country, price range, condition and sort order. Export to CSV, JSON, Excel, or XML.

Carousell's mobile-first marketplace makes it hard to track listings at scale across its nine country sites. This Actor reads the public search and category pages directly, letting you collect listings by keyword or URL while filtering by condition, price, and sort order. No API key or login needed.

| Who uses it | What they scrape Carousell for |
|---|---|
| Second-hand resellers | Monitor competitor pricing for the same items across Carousell markets. |
| Market researchers | Track supply and demand trends for specific product categories in Southeast Asia. |
| Deal hunters | Get alerts when a rare item is listed below a target price in their country. |
| E-commerce analysts | Build datasets of listing volumes and price distributions by category and condition. |

### What it does

This Actor collects Carousell listings by search term or direct URL and returns each one as a flat row: title, price, currency, condition, photo, listing URL and the seller's name, handle and profile.

Those come off the search results themselves. Fields that only exist on the individual listing page, such as the full description, the category or the view count, are not collected: fetching one page per listing would cost more than the listing is sold for.

- 🔍 **Keyword search:** feed a product name or search term and collect matching listings across any supported country.
- 🔗 **Direct URL input:** paste a Carousell search or category page URL to scrape exactly that view, ignoring other filters.
- 🌏 **Nine country markets:** target Singapore, Philippines, Malaysia, Hong Kong, Indonesia, Taiwan, Australia, Canada, or New Zealand.
- 💰 **Price and condition filters:** narrow results to new or used items within a min-max price range before they hit your dataset.
- 📊 **Sort control:** collect listings ordered by most recent, price low-to-high, or price high-to-low.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Carousell data

**📈 Track competitor pricing.**

A reseller runs the Actor daily with a keyword like 'iPhone 15' and a max price filter to spot underpriced listings before they sell.

**📊 Analyze category trends.**

A market researcher scrapes a category URL across three countries to compare listing volumes and average prices for used furniture.

**🔔 Monitor rare items.**

A collector sets up a scheduled run for a specific search term and price ceiling, exporting new matches to a Google Sheet via Apify integration.

**🗂️ Build a product catalog.**

An e-commerce analyst collects hundreds of listings from a search to study condition labels, price distributions and which sellers list the most.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API registration** | Reads public Carousell pages directly, no developer app or OAuth flow required. |
| **Multi-country support** | One Actor covers nine Carousell regions with a single country selector. |
| **Built-in Cloudflare bypass** | Residential proxies are pre-configured to keep your runs stable. |
| **Fixed output schema** | Every listing arrives with the same fields, ready for analysis or upload. |
| **Past the 45-result wall** | A single Carousell search stops at ~45 listings. This Actor slices by price band to return several hundred. |

### How it compares

No other Store actor targets Carousell the same way, so the honest comparison is with the alternatives teams actually weigh.

| | Carousell Listings Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Carousell changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor with a search keyword or a direct Carousell URL, and apply country, condition, price range, and sort filters so only matching listings reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "keyword": "iphone",
  "maxItems": 10,
  "country": "sg",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

A larger pull:

```json
{
  "keyword": "iphone",
  "maxItems": 200,
  "country": "sg",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

### Pricing

Pay-per-result: **$0.02266 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.27 |
| 1,000 results | $22.66 |
| 10,000 results | $226.60 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 100 results. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to lift the cap.

### How many listings a search can return

Carousell answers any single search with about 45 listings and then stops: there is no page 2, and scrolling does not load more. This Actor gets past that by slicing the search across price bands and merging the results, so a broad term returns several hundred listings instead of 45. Measured on 08/09/2026: `iphone` in Singapore returned 600, `sofa` returned 300.

How far it goes depends on the term. A narrow search that genuinely has 40 matches returns 40, and the run stops there rather than spending your credit re-reading the same rows. Set `maxItems` to the number you actually want and the run stops as soon as it reaches it.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Carousell Listings Scraper](https://apify.com/parseforge/carousell-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Carousell through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/carousell-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your keyword or URL is valid on the selected country domain. Try broadening the search term or removing price and condition filters to see if any listings exist.

**The Actor returns fewer listings than my maxItems setting.**

This is normal when the search has fewer total results than your limit. The Actor stops when it runs out of matching listings on Carousell.

**I'm getting timeout or Cloudflare errors.**

Ensure residential proxies are enabled in the Advanced Options. If errors persist, try reducing the maxItems or running during off-peak hours.

**Prices are in the wrong currency.**

Prices are returned in the local currency of the selected country. Change the country input to scrape a different region's listings.

**The startUrl input is ignoring my keyword and filters.**

This is by design. When you provide a direct URL, the Actor scrapes that exact page and ignores the keyword, country, and filter fields.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Carousell account to scrape listings? | No. The Actor reads publicly accessible search and category pages. No login, account, or API key is required. |
| Which countries does this Actor support? | It supports nine Carousell regions: Singapore, Philippines, Malaysia, Hong Kong, Indonesia, Taiwan, Australia, Canada, and New Zealand. Select the country in the input settings. |
| Can I scrape a specific seller's listings? | The Actor is designed for keyword searches and category URLs. It does not have a dedicated seller filter, but you can try including the seller's username in the keyword field. |
| How do I filter by price or condition? | Use the Min Price, Max Price, and Condition fields in the input. These filters are applied during the search and only matching listings are returned. |
| What proxy configuration should I use? | Residential proxies are pre-selected and required to bypass Carousell's Cloudflare protection. Keep the default proxy settings for reliable runs. |
| Can I scrape sold or completed listings? | The Actor collects active listings from search and category pages. It does not access historical or sold listing data. |
| What output formats are supported? | You can export your dataset in CSV, JSON, Excel, or XML format from the Apify storage tab. |
| How many listings can I scrape in one run? | As many as the search can reach. Carousell caps a single search at roughly 45 listings, so the Actor slices the search by price band to get past that: broad terms return several hundred. Narrow terms return what exists and stop. |
| Does the Actor handle Carousell's infinite scroll? | Yes. It automatically scrolls through search result pages to collect listings up to your defined maximum. |
| Can I run this on a schedule? | Yes. Use Apify's scheduler to run the Actor hourly, daily, or at any custom interval and receive new listings automatically. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Carousell Pte. Ltd. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `keyword` (type: `string`):

Search keyword or product name to find listings on Carousell (e.g. 'iphone 15', 'sofa'). If provided, filters below are applied alongside the keyword search.

## `startUrl` (type: `string`):

Direct URL to a Carousell search or category page. If provided, keyword and filter inputs are ignored.

## `maxItems` (type: `integer`):

How many listings to collect per run.

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

Country/region to search in. Options: sg (Singapore), ph (Philippines), my (Malaysia), hk (Hong Kong), id (Indonesia), tw (Taiwan), au (Australia), ca (Canada), nz (New Zealand).

## `condition` (type: `string`):

Filter by item condition.

## `priceMin` (type: `integer`):

Minimum price filter (in local currency).

## `priceMax` (type: `integer`):

Maximum price filter (in local currency).

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

Sort order for search results.

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

Proxy settings. Residential proxies required for Cloudflare bypass.

## Actor input object example

```json
{
  "keyword": "iphone",
  "maxItems": 10,
  "country": "sg",
  "sortBy": "3",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with all scraped 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 = {
    "keyword": "iphone",
    "maxItems": 10,
    "country": "sg",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "keyword": "iphone",
    "maxItems": 10,
    "country": "sg",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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 '{
  "keyword": "iphone",
  "maxItems": 10,
  "country": "sg",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/carousell-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/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/zsJG831ENaQUwqtCO/builds/tcyv6yesJDl7qzW9V/openapi.json
