# Carousell Scraper - Listings, Prices & Sellers (`conscious_gecko/carousell-search-scraper`) Actor

Scrape Carousell search results by keyword: listing title, price (and original price), condition, seller, images, and product URL. Clears Cloudflare reliably and paginates the full result set. Free.

- **URL**: https://apify.com/conscious\_gecko/carousell-search-scraper.md
- **Developed by:** [Naveen V](https://apify.com/conscious_gecko) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Carousell Scraper

Scrapes Carousell search results by keyword and returns each listing as structured JSON —
title, price, condition, seller, images, and URL. It clears Carousell's Cloudflare protection
on residential IPs and paginates the full result set, not just the first page. Free to use
(you pay only Apify platform + proxy usage for your own runs).

Works on all English Carousell regions: Singapore, Malaysia, Philippines, Hong Kong, Indonesia,
Taiwan, Australia.

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `searchTerms` | string[] | — | Keywords to search (peer-to-peer listings). One search per term. Use this **or** `startUrls`. |
| `startUrls` | array | — | Carousell URLs to scrape directly — paste from your browser with filters applied. Supports `/keyword/q/`, `/search/?query=`, and `/categories/…`. |
| `region` | string | `sg` | `sg`, `my`, `ph`, `hk`, `id`, `tw`, `au`. Applies to `searchTerms` (start URLs carry their own region). |
| `maxProductsPerTerm` | integer | `100` | Target listings per term. Paginates (~46/page) until reached or results end. |
| `minPrice` | integer | — | Drop listings priced below this (region currency). |
| `maxPrice` | integer | — | Drop listings priced above this. |
| `conditions` | string[] | — | Keep only these: `Brand new`, `Like new`, `Lightly used`, `Well used`, `Heavily used`. Empty = all. |
| `maxShowMoreClicks` | integer | `40` | Cap on pagination clicks per term (bounds runtime). |
| `maxRetriesPerTerm` | integer | `5` | Fresh residential IPs to try before giving up on a term. |
| `proxyConfiguration` | object | RESIDENTIAL | Apify Proxy. Residential is required; pin the country to your region for best results. |

```json
{
  "searchTerms": ["sofa", "nike air force 1"],
  "region": "sg",
  "maxProductsPerTerm": 100,
  "conditions": ["Like new", "Lightly used"],
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
````

### Supported URL formats

Paste any of these into `startUrls` (from your browser, with filters already applied):

| Format | Example | Returns |
| --- | --- | --- |
| Keyword browse | `https://www.carousell.sg/desk-lamp/q/` | Peer-to-peer listings for a keyword (recommended). |
| Search | `https://www.carousell.sg/search/?query=nike` | Search results (skews to Certified for phones). |
| Category | `https://www.carousell.sg/categories/furniture-15905/` | Listings within a category. |

The `/keyword/q/` format returns regular user listings; `/search/?query=` leans toward Carousell
Certified products. Individual listing pages (`/p/...`) are not scraped — the actor returns
search and browse results, not single-listing detail.

### Output

One dataset item per listing.

| Field | Type | Notes |
| --- | --- | --- |
| `searchTerm` | string | The term this listing came from. |
| `listingId` | string | Carousell listing id. |
| `title` | string | |
| `price` | number | Numeric price. `FREE` giveaways = `0`. |
| `originalPrice` | number | null | Strikethrough price when present. |
| `currency` | string | null | ISO code (`SGD`, `MYR`, …). Null for `FREE`. |
| `priceRaw` | string | As shown, e.g. `S$390` or `FREE`. |
| `condition` | string | null | One of the five Carousell conditions. |
| `sellerName` | string | |
| `sellerUrl` | string | Seller profile URL. |
| `image` | string | null | Main product photo. |
| `images` | string\[] | All photos on the card. |
| `productUrl` | string | Listing URL. |
| `region` | string | Region searched. |
| `scrapedAt` | string | ISO 8601 UTC. |

```json
{
  "searchTerm": "sofa",
  "listingId": "1450309471",
  "title": "L-shaped Sectional Sofa with Reclining Seats",
  "price": 390,
  "originalPrice": null,
  "currency": "SGD",
  "priceRaw": "S$390",
  "condition": "Like new",
  "sellerName": "luckymydl77",
  "sellerUrl": "https://www.carousell.sg/u/luckymydl77/",
  "image": "https://media.karousell.com/media/photos/products/.../thumbnail.jpg",
  "images": ["https://media.karousell.com/media/photos/products/...jpg"],
  "productUrl": "https://www.carousell.sg/p/l-shaped-sectional-sofa-with-reclining-seats-1450309471/",
  "region": "sg",
  "scrapedAt": "2026-07-17T18:00:00+00:00"
}
```

### Notes

- **Keyword searches return peer-to-peer listings.** Phone/electronics queries (e.g. "iphone")
  are dominated by Carousell's "Certified" resale program and return few peer listings use a
  specific model or a non-electronics keyword for full results.
- No account or login needed public search pages only. Seller username and profile URL are
  returned; private contact details are not.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search Carousell for (e.g. 'sofa', 'nike air force 1', 'pokemon cards'). One search per term — returns peer-to-peer listings. Use this or Start URLs.

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

Carousell search/browse URLs to scrape directly — paste a URL from your browser with filters already applied. Supported: keyword browse (/desk-lamp/q/), search (/search/?query=iphone), and category (/categories/...). Use this or Search terms.

## `region` (type: `string`):

Which Carousell site to search. All are English.

## `maxProductsPerTerm` (type: `integer`):

Target number of listings to collect per term. The actor clicks 'Show more results' (~46 per click) until it reaches this or the results run out.

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

Only keep listings at or above this price (in the region's currency).

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

Only keep listings at or below this price (in the region's currency).

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

Only keep listings with these conditions. Leave empty for all.

## `maxShowMoreClicks` (type: `integer`):

Safety cap on pagination clicks per term (bounds runtime). Each click loads ~46 more listings.

## `maxRetriesPerTerm` (type: `integer`):

How many fresh residential IPs to try for a term before giving up (covers IPs that Cloudflare hard-blocks).

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

Apify Proxy. RESIDENTIAL is required — Cloudflare blocks datacenter IPs. Pin the country to the region (e.g. SG) for the most consistent results.

## Actor input object example

```json
{
  "searchTerms": [
    "sofa"
  ],
  "region": "sg",
  "maxProductsPerTerm": 100,
  "maxShowMoreClicks": 40,
  "maxRetriesPerTerm": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per Carousell listing — title, price, condition, seller, images, URL.

# 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 = {
    "searchTerms": [
        "sofa"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("conscious_gecko/carousell-search-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 = {
    "searchTerms": ["sofa"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "sofa"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call conscious_gecko/carousell-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=conscious_gecko/carousell-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Carousell Scraper - Listings, Prices & Sellers",
        "description": "Scrape Carousell search results by keyword: listing title, price (and original price), condition, seller, images, and product URL. Clears Cloudflare reliably and paginates the full result set. Free.",
        "version": "0.1",
        "x-build-id": "Q85mXCjn0EckIsmMv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/conscious_gecko~carousell-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-conscious_gecko-carousell-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/conscious_gecko~carousell-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-conscious_gecko-carousell-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/conscious_gecko~carousell-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-conscious_gecko-carousell-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Keywords to search Carousell for (e.g. 'sofa', 'nike air force 1', 'pokemon cards'). One search per term — returns peer-to-peer listings. Use this or Start URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Carousell search/browse URLs to scrape directly — paste a URL from your browser with filters already applied. Supported: keyword browse (/desk-lamp/q/), search (/search/?query=iphone), and category (/categories/...). Use this or Search terms.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "region": {
                        "title": "Carousell region",
                        "enum": [
                            "sg",
                            "my",
                            "ph",
                            "hk",
                            "id",
                            "tw",
                            "au"
                        ],
                        "type": "string",
                        "description": "Which Carousell site to search. All are English.",
                        "default": "sg"
                    },
                    "maxProductsPerTerm": {
                        "title": "Max listings per term",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Target number of listings to collect per term. The actor clicks 'Show more results' (~46 per click) until it reaches this or the results run out.",
                        "default": 100
                    },
                    "minPrice": {
                        "title": "Min price",
                        "type": "integer",
                        "description": "Only keep listings at or above this price (in the region's currency)."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "type": "integer",
                        "description": "Only keep listings at or below this price (in the region's currency)."
                    },
                    "conditions": {
                        "title": "Conditions",
                        "type": "array",
                        "description": "Only keep listings with these conditions. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Brand new",
                                "Like new",
                                "Lightly used",
                                "Well used",
                                "Heavily used"
                            ]
                        }
                    },
                    "maxShowMoreClicks": {
                        "title": "Max 'Show more' clicks",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Safety cap on pagination clicks per term (bounds runtime). Each click loads ~46 more listings.",
                        "default": 40
                    },
                    "maxRetriesPerTerm": {
                        "title": "Max IP-rotation retries per term",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many fresh residential IPs to try for a term before giving up (covers IPs that Cloudflare hard-blocks).",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy. RESIDENTIAL is required — Cloudflare blocks datacenter IPs. Pin the country to the region (e.g. SG) for the most consistent results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
