# Carousell Scraper \[From $1💰] | 9 Markets | Seller Data (`ahmed_jasarevic/carousell-scraper`) Actor

Extract Carousell listing data across all 9 markets — SG, MY, PH, HK, ID, TW, AU, CA, NZ. Get price, condition, seller rating, location, likes and images via Carousell's own JSON API. No login, no CAPTCHA. Built for price monitoring, reseller sourcing and market research.

- **URL**: https://apify.com/ahmed\_jasarevic/carousell-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 — Second-Hand Marketplace Data for 9 Markets

Extract Carousell listing and seller data for second-hand price monitoring, reseller sourcing and marketplace research across **all 9 Carousell country markets** — Singapore, Malaysia, Philippines, Hong Kong, Indonesia, Taiwan, Australia, Canada and New Zealand — including AU, CA and NZ that most Carousell scrapers skip. No browser, no login, no CAPTCHA solving: this actor replays the same JSON API surfaces Carousell's own web and mobile apps use, so runs are fast and cheap on compute.

### Main Use Cases

- **Second-hand price monitoring** — numeric prices plus posted/bumped timestamps for time-series price tracking and drop alerts.
- **Reseller & dropshipper inventory sourcing** — source second-hand inventory by keyword across SG, MY, PH and beyond.
- **Marketplace & consumer research** — category, condition mix, likes and seller stats per market; compare 9 regional Carousell markets.
- **Seller intelligence** — rating, review counts, followers, response rate and join date attached to every listing (detail mode).
- **Structured second-hand product databases** — clean JSON records you can download as JSON, CSV or Excel for dashboards, apps and models.

### How It Works

Carousell's search pages server-render an empty shell and load results client-side, so plain HTML scraping returns nothing. This actor replays the two structured JSON surfaces Carousell's own web and mobile apps use (reverse-engineered from the `mweb-cdn.karousell.com` JS bundles):

1. **Keyword search — internal DataService relay.** GET the market homepage to harvest the `_csrf` cookie + `csrf-token` header, then POST the same search payload the apps use. Each response returns up to ~100 listing cards with title, price, condition, seller mini-profile, likes, geo and all photo URLs.
2. **Listing details — internal relay, ~25 kB JSON per listing.** Returns the complete record: exact numeric price, condition, full description, seller reputation (rating, reviews, followers, response rate, join date), meet-up locations with lat/lng, buyer-protection flag, timestamps and all photos. A server-rendered HTML fallback covers relay gaps automatically.

No DOM is ever built (`HttpCrawler`, raw bytes) — less CPU, less memory, cheaper runs.

### Scrape Carousell Listings Without Login or CAPTCHA Solving

All data comes from **publicly visible pages and public JSON responses** — no accounts, no private messages, no CAPTCHA bypass, no paid anti-bot API. The site's Cloudflare edge only requires a clean residential/mobile egress IP (see Proxy section below).

### Monitor Second-Hand Prices and Build a Price History

The API delivers **numeric prices** (`price`), the original display string (`priceDisplay`), ISO currency, item condition and both `postedAt` and `bumpedAt` timestamps. Run this actor daily on the Apify scheduler and append each run's dataset to build a price history for any keyword — phones, sneakers, designer furniture, watches, cards. Because prices are numeric and consistent, time-series analysis, drop alerts and percentile reporting are straightforward.

### Research 9 Carousell Markets from One Actor

One input picks the market: `sg`, `my`, `ph`, `hk`, `id`, `tw`, `au`, `ca`, `nz`. The same keyword can be compared across Singapore, Malaysia, Philippines, Hong Kong, Indonesia, Taiwan, Australia, Canada and New Zealand marketplaces — regional price gaps, condition mix and seller behavior are the classic signals for second-hand market research and arbitrage scouting.

### Carousell Seller Data for Sourcing and Due Diligence

Detail mode returns seller rating, review count, followers, response rate and join date, plus the seller profile URL. That turns raw listings into **seller leads** — for sourcing reliable inventory, checking buyer risk, or building a seller-reputation dataset for the marketplace.

### Input

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `keywords` | array of strings | no¹ | — | Keyword(s) to search; **one search is run per keyword**. Specific phrases (e.g. `iphone 15 pro 256gb`) beat head terms. |
| `listingUrls` | array of strings | no¹ | — | Direct Carousell `/p/...` listing URLs to scrape in full detail. Market is auto-detected from the URL hostname. |
| `market` | string | no | `sg` | One of `sg`, `my`, `ph`, `hk`, `id`, `tw`, `au`, `ca`, `nz`. Applies to keywords only. |
| `maxItems` | integer | no | 50 | Max listings returned in total (min 1, max 2000). **Free-plan runs are capped at 10 items.** |
| `fetchDetails` | boolean | no | `true` | `true` = full record (description, seller reputation, meet-up, category, all images). `false` = fast card data straight from the search JSON. |
| `concurrency` | integer | no | 8 | Parallel requests (max 20). Detail pages are network-bound; higher = faster but more proxy load. |
| `maxRequestsPerCrawl` | integer | no | 500 | Safety cap on total HTTP requests (search + detail). |
| `proxy` | object | no² | SG residential | Apify proxy picker. Carousell blocks datacenter IPs with 403 — residential/mobile, ideally geo-matched. |

¹ At least one of `keywords` or `listingUrls` is required.
² Technically optional — but without a residential/mobile egress IP the run returns zero items (site blocks datacenter IPs).

### Output

One dataset record per listing (detail mode fills every field; card mode fills the card-level subset). All 33 fields:

| Field | Type | Description |
|---|---|---|
| `id` / `title` / `url` | string | Listing id, title, canonical URL |
| `price` / `priceDisplay` / `currency` | number / string | Numeric price, original display string (e.g. `S$730`), ISO currency (e.g. `SGD`) |
| `condition` / `conditionCode` | string | Condition text (detail) + raw code |
| `description` | string | Full description (detail) or search snippet (card) |
| `sellerUsername` / `sellerProfileUrl` / `sellerId` / `sellerProfileImage` | string | Seller identity + avatar |
| `sellerRating` / `sellerReviewCount` / `sellerFollowers` / `sellerResponseRate` / `sellerJoinedAt` | number / string | Seller reputation (detail mode) |
| `location` / `meetups` / `latitude` / `longitude` | string / number | Meet-up location + geo (lat/lng already in card mode) |
| `category` / `categorySlug` | string | Category (detail mode) |
| `likes` / `status` | number / string | Engagement + listing state |
| `buyerProtection` | boolean | `is_caroupay_enabled` buyer-protection flag (detail mode) |
| `postedAt` / `bumpedAt` | string | Creation / last-bump timestamps (ISO 8601) |
| `images` | array | All photo URLs (detail) or thumbnails (card) |
| `market` / `keyword` | string | Source market code + matched keyword |

### Example Input

```json
{
    "keywords": ["iphone 15 pro", "herman miller aeron"],
    "market": "sg",
    "maxItems": 50,
    "fetchDetails": true,
    "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "SG" }
}
```

### Example Output

```json
{
    "id": "1433031784",
    "title": "Apple AirPods Max 2 - Midnight",
    "url": "https://www.carousell.sg/p/apple-airpods-max-2-midnight-1433031784/",
    "price": 730,
    "priceDisplay": "S$730",
    "currency": "SGD",
    "condition": "Brand new",
    "conditionCode": "1",
    "description": "Sealed unit, purchased from Apple SG...",
    "sellerUsername": "stylestitch",
    "sellerProfileUrl": "https://www.carousell.sg/u/stylestitch/",
    "sellerId": "123456",
    "sellerProfileImage": "https://media.karousell.com/...jpg",
    "sellerRating": 5,
    "sellerReviewCount": 6,
    "location": "Woodlands MRT Interchange (NS9/TE2)",
    "latitude": 1.436,
    "longitude": 103.786,
    "category": "Headphones & Headsets",
    "likes": 3,
    "status": "L",
    "buyerProtection": true,
    "postedAt": "2026-04-19T03:46:17Z",
    "bumpedAt": "2026-09-15T17:14:33Z",
    "images": ["https://media.karousell.com/...jpg"],
    "market": "sg",
    "keyword": "airpods max 2"
}
```

### Integrations & Automation

- **Apify REST API** — start runs programmatically from any app or CI pipeline.
- **Scheduler** — for price monitoring, run daily (small `maxItems`); for market research, run weekly and export the dataset.
- **Webhooks / Zapier / Make** — push new-listing and price-change data into Sheets, Slack, databases or alerting tools via Apify's standard integrations.
- **Output formats** — every run's dataset downloads as JSON, CSV, Excel, HTML or XML.

Recurring scheduled runs are also the single best lever for Apify Store recommendations: the platform weighs how often an actor is re-run.

### Related Actors

Second-hand marketplace data cluster (relevance first):

- [Carousell Listings Scraper (piotrv1001)](https://apify.com/piotrv1001/carousell-listings-scraper) — the most-used Carousell actor; URL-based, carousell.sg focus.
- [Carousell Listings Scraper (automation-lab)](https://apify.com/automation-lab/carousell-listings-scraper) — keyword/URL-based Carousell scraping with optional detail enrichment.
- [Vinted Scraper (crawlerbros)](https://apify.com/crawlerbros/vinted-scraper) — second-hand fashion marketplace data across 19 countries.
- [Xianyu Goofish Product Scraper (sian.agency)](https://apify.com/sian.agency/xianyu-goofish-product-scraper) — China's largest second-hand resale marketplace.
- [Wallapop Product Search (alvaraaz)](https://apify.com/alvaraaz/wallapop-product-search) — Spain's leading second-hand marketplace.

### FAQ

#### Is there an official Carousell API?

No. Carousell Group does not publish a documented public API for marketplace data (there is no official Carousell API endpoint for third parties as of Sep 2026). This actor is a Carousell data API of its own: it replays the same public JSON surfaces Carousell's web and mobile apps use, and exposes them through the Apify REST API — so you get programmatic access, scheduling and dataset download without maintaining a scraper yourself.

#### Do I need a Carousell account or login to scrape listings?

No. The actor collects only publicly visible listing data — the same information any visitor sees without logging in. No accounts, no private messages, no CAPTCHA solving.

#### Why use this actor instead of an official Carousell API?

There is no official public API, and third-party reseller APIs charge per-request subscription fees. This actor is pay-per-event, covers all 9 country markets, and card mode returns ~100 listings per search request with no per-item charge (only detail fetches are billed).

#### What are the alternatives to this actor for Carousell data?

On Apify: the piotrv1001 and automation-lab Carousell scrapers above. Off-platform: RapidAPI resellers (paid subscriptions) or self-built scrapers (Selenium/BeautifulSoup, e.g. the public GitHub projects) — which break whenever Carousell changes its markup and need their own IP management. For second-hand marketplace data beyond Carousell, see the Related Actors section (Vinted, Goofish, Wallapop).

#### How does Carousell compare to Facebook Marketplace for second-hand data?

Both are classifieds marketplaces; in Singapore's inter-ministry e-commerce safety ratings they rank lowest, while Amazon/Lazada/Shopee score highest (Straits Times, 2023). For data work the practical differences: Carousell offers structured search JSON (which this actor uses), buyer-protection flags and seller reputation fields; Facebook Marketplace is harder to scrape consistently and prohibits scraping in its terms. Sellers often list on both — running this actor for Carousell plus a separate marketplace actor captures the overlap.

#### What is Carousell Certified and does the actor scrape it?

Carousell Certified is the platform's inspected/recommended resale program (inspection + money-back guarantee on certified bags, phones and cars). The search API returns whatever a keyword search surfaces — including Certified listings. Tip: head terms (e.g. `iphone`) skew toward Certified program listings; use specific phrases (e.g. `iphone 15 pro 256gb`) to reach regular user listings.

#### How can I scrape Carousell without getting blocked?

Carousell's Cloudflare edge blocks datacenter and most proxy-ASN IPs with HTTP 403. Enable the `proxy` input with **residential or mobile IPs geo-matched to the market** (e.g. SG exits for the Singapore market — this is the input default). Without an accepted egress IP a run returns zero items — that is the site blocking the IP, not an actor bug.

#### How do I track Carousell prices over time?

Prices are numeric with ISO currency and `postedAt`/`bumpedAt` timestamps. Schedule the actor daily with a fixed `maxItems`, append each run's dataset, and compute price changes, drop alerts or percentile stats. Card mode is cheap enough for daily scans.

#### What is the most reliable measurement for Carousell market research?

Per-market category and condition mix, likes, seller reputation distribution and bump cadence across the 9 markets give a comparable regional picture. Taiwan (`tw`) server-renders thinner results than SG/MY/PH — treat small TW result sets as expected.

#### How much does it cost to scrape Carousell?

The actor is pay-per-event: listing details fetched with **Fetch details** on are charged per event, plus a small actor-start fee per GB of memory. Card mode (fetchDetails off) uses ~1 request per 100 listings and no per-item detail charge. Runs on the free plan return up to 10 items as a preview. Keep `maxItems` small for cheap runs.

#### How do I get Carousell data into Excel or CSV?

Every run writes to an Apify dataset, downloadable as JSON, JSONL, CSV, Excel or HTML — no post-processing needed. Scheduled runs accumulate history for time-series analysis.

### SEO Keywords

carousell scraper, carousell api, scrape carousell listings, carousell data extraction, carousell price monitoring, carousell price tracker, carousell seller data, carousell seller leads, second hand phone price tracker, carousell market research, carousell singapore, carousell malaysia, carousell philippines, carousell indonesia, carousell hong kong, carousell taiwan, carousell australia, carousell canada, carousell new zealand, second-hand marketplace data, resale price tracking southeast asia, used goods market research, carousell alternative api, carousell dataset, carousell certified used phones

### For AI Agents & LLM Apps

This actor can be called from any LLM app or MCP client via the Apify API. Minimal reference:

**Purpose:** return structured Carousell listing records (price, condition, seller, geo, likes, timestamps, images) for keyword searches or direct listing URLs across 9 markets.

**Minimal working input:**

```json
{ "keywords": ["iphone 15"], "market": "sg", "maxItems": 10 }
```

**Variant — card mode (fast, no detail requests):**

```json
{ "keywords": ["iphone 15"], "market": "sg", "maxItems": 50, "fetchDetails": false }
```

**Variant — direct listing URLs (market auto-detected from hostname):**

```json
{ "listingUrls": ["https://www.carousell.sg/p/apple-airpods-max-2-midnight-1433031784/"] }
```

**Output field list:** `id`, `title`, `url`, `price`, `priceDisplay`, `currency`, `condition`, `conditionCode`, `description`, `sellerUsername`, `sellerProfileUrl`, `sellerId`, `sellerProfileImage`, `sellerRating`, `sellerReviewCount`, `sellerFollowers`, `sellerResponseRate`, `sellerJoinedAt`, `location`, `meetups`, `latitude`, `longitude`, `category`, `categorySlug`, `likes`, `status`, `buyerProtection`, `postedAt`, `bumpedAt`, `images`, `market`, `keyword`.

**Behaviors an agent should know:**

- **Proxy is effectively mandatory:** Carousell 403s datacenter IPs. Leave the default `proxy` (`useApifyProxy: true`, `apifyProxyGroups: ["RESIDENTIAL"]`, `apifyProxyCountry` matching the market) in place — removing it yields zero items.
- Free-plan runs are capped at **10 items** (`maxItems` above that is honored only for paying users).
- Each entry in `keywords` triggers its own search; `market` applies to keywords only — `listingUrls` markets are auto-detected from the URL hostname. Both can be set in the same input.
- If neither `keywords` nor `listingUrls` is set, the run fails with an input error.
- `fetchDetails` defaults to **true**: every collected listing then triggers an additional detail request, slower and billed per event. Set `false` for fast card-level scans (no seller reputation, description, meet-up, category or `buyerProtection` — only title, price, condition, seller + avatar, geo, likes, status, timestamps).
- `maxItems` caps total output (1–2000, default 50); `concurrency` (default 8, max 20) trades speed against proxy load; `maxRequestsPerCrawl` (default 500) is a hard HTTP-request safety cap.
- Specific search phrases outperform head terms (head terms skew toward Carousell Certified listings); `tw` market renders thinner results than SG/MY/PH.
- Only public data is collected; seller contact details are never exposed.

**Billing:** pay-per-event — a base actor-start event (~USD 0.00005 per GB), a per-result event (USD 0.001), and a `listing-detail` event (USD 0.002) per listing fetched with `fetchDetails: true`. Card mode avoids the detail event. Keep `maxItems` small when cost-bounding.

### Legal & Compliance Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Carousell Group** (an independent entity). Carousell is a registered trademark of its respective owner; this actor is not an official Carousell product.

The actor accesses **only publicly available Carousell pages and public JSON responses** — no login, no private-message data, no CAPTCHA bypass, no seller contact details. If you use a proxy, use one you are authorized to use.

You are responsible for your own compliance with Carousell's Terms of Use and applicable data-protection law (e.g. Singapore PDPA, and any law applicable in the market you target) when using the extracted data. Public seller handles and ratings are returned for identification and research purposes, not for harassment, impersonation or other unlawful use.

### Competitive Positioning

Verified against public Apify Store pages (Sep 2026): the most-used Carousell actor (`piotrv1001/carousell-listings-scraper`, ~84 users) is `carousell.sg`-only and URL-based, priced per listing ($0.01 listing / $0.04 detail); `automation-lab/carousell-listings-scraper` adds a keyword input with browser rendering ($0.005 start + ~$0.007/item).

| Capability | This actor | piotrv1001 (most-used) | automation-lab |
|---|---|---|---|
| Market coverage | 9 markets (SG, MY, PH, HK, ID, TW, AU, CA, NZ) | carousell.sg only | keyword + market select |
| Keyword search | native `keywords` array (one search per keyword) | via search URLs in `startUrls` only | keywords or startUrls |
| Direct listing URLs | `listingUrls` array, market auto-detected | via `startUrls` | via `startUrls` |
| Card-mode cost | no per-item charge (detail events only) | $0.01 per listing | ~$0.007 per item |
| Detail-mode data | full seller profile (rating, reviews, followers, response rate, join date), buyer-protection flag, lat/lng, bump timestamps | seller profile basics | optional `includeDetails` |

**Switching from the most-used Carousell scraper?** It requires you to construct search-URL strings (`startUrls`) and only covers the Singapore domain. Here you type plain keywords, pick any of 9 markets, and card mode scans ~100 listings per request without per-item charges.

# Actor input Schema

## `keywords` (type: `array`):

Keyword(s) to search for on Carousell (e.g. iphone 15, herman miller, pokemon cards). One search is run per keyword.

## `listingUrls` (type: `array`):

Direct Carousell listing URLs (/p/... links) to scrape in full detail. Market is auto-detected from the URL hostname.

## `market` (type: `string`):

Which Carousell country market to search (applies to keywords). SG = Singapore, MY = Malaysia, PH = Philippines, HK = Hong Kong, ID = Indonesia, TW = Taiwan, AU = Australia, CA = Canada, NZ = New Zealand.

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

Maximum number of listings to return in total (across all keywords). Each listing costs one detail-page request when Fetch details is on.

## `fetchDetails` (type: `boolean`):

Open each listing page for the full record (full description, seller rating/reviews, meet-up location, category, all images). Turn off for fast card-level data straight from the search JSON API: title, price, condition, seller, profile picture, geo, likes, status and timestamps — ~48 listings per request, no HTML.

## `concurrency` (type: `integer`):

How many requests to run in parallel. Detail pages are network-bound (~420 KB each, ~5-8s via residential proxy), so higher values finish faster. Raise carefully to avoid triggering blocks.

## `maxRequestsPerCrawl` (type: `integer`):

Safety cap on total HTTP requests (search pages + detail pages).

## `proxy` (type: `object`):

Carousell blocks datacenter IPs, so SG-located residential proxies are required for runs on Apify. Override the country to match a different market (e.g. MY for Malaysia).

## Actor input object example

```json
{
  "keywords": [
    "iphone 15"
  ],
  "market": "sg",
  "maxItems": 50,
  "fetchDetails": true,
  "concurrency": 8,
  "maxRequestsPerCrawl": 500,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SG"
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "keywords": [
        "iphone 15"
    ],
    "market": "sg",
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "SG"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "keywords": ["iphone 15"],
    "market": "sg",
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "SG",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "keywords": [
    "iphone 15"
  ],
  "market": "sg",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SG"
  }
}' |
apify call ahmed_jasarevic/carousell-scraper --silent --output-dataset

```

## MCP server setup

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