# Carsales AU Scraper (`parsebird/carsales-scraper`) Actor

Scrape carsales.com.au car listings from any search, make/model page, or listing URL. Get price, odometer, specs, features, seller comments, dealer details, location, and images. Monitor new listings and price changes. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/carsales-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 listings

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

### Carsales AU Scraper

Carsales AU Scraper extracts car listings from [carsales.com.au](https://www.carsales.com.au), Australia's leading car marketplace, using any search, make/model page, or listing URL. It returns price, odometer, specs, features, seller comments, dealer details, location, and images.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Paste any carsales.com.au search URL with your filters (make, model, price, state, dealer or private, new or used) and get 70+ fields per car: full specifications, feature lists, registration and compliance dates, dealer rating, and suburb-level location. Searches beyond the site's ~440-result limit are split automatically.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```text
Apify actor "parsebird/carsales-scraper" (Carsales AU Scraper) scrapes car listings from carsales.com.au. Call it with the apify-client package: client.actor("parsebird/carsales-scraper").call(run_input={...}). Input: startUrls (array of {url}, required; carsales.com.au search URLs like https://www.carsales.com.au/cars/?q=(And.Make.Toyota._.Model.Hilux.), make/model/state pages like https://www.carsales.com.au/cars/toyota/landcruiser/, or listing URLs like https://www.carsales.com.au/cars/details/<slug>/OAG-AD-12345678/), maxItems (integer, default 100, 0 = no limit), scrapeDetails (boolean, default true; opens each listing for full specs, features, seller comments and location), monitoringMode (boolean, default false; save only cars not seen in earlier runs with the same startUrls), trackPriceChanges (boolean, default false; with monitoring, also save known cars whose price changed, with priceChanged and previousPrice), skipPriceSplitting (boolean, default false; stop at ~440 cars per search), proxy (object, default Apify RESIDENTIAL proxy, country AU). Output: one dataset item per car with networkId, url, title, make, model, badge, variant, year, condition, price, priceLabel, priceExclGovtCharges, priceRating, odometer, bodyStyle, fuelType, transmission, driveType, engine, colour, buildDate, complianceDate, registrationExpiry, stockNumber, suburb, state, postcode, sellerType, dealerName, seller (rating, reviewCount, memberSince), sellerComments, overview, specifications, features, images, scrapedAt. API docs: https://apify.com/parsebird/carsales-scraper/api. Get a token: https://console.apify.com/settings/integrations
```

### What is Carsales AU Scraper?

**Carsales AU Scraper** is a **carsales.com.au scraper** and unofficial **carsales API** alternative. Run any search on [carsales.com.au](https://www.carsales.com.au), copy the URL from your browser, and paste it into the actor. You get a clean dataset of every matching car, with the same data you see on the listing page.

When we tested in November 2026, carsales.com.au held **more than 200,000 car listings** from dealers and private sellers across Australia. The site only shows about 20 pages (~440 cars) per search. Carsales AU Scraper gets past that limit by **splitting large searches into price bands** automatically.

### What can Carsales AU Scraper do?

- 🔎 **Scrape any search.** Supports filtered search URLs (`/cars/?q=...`), make, model, state and seller-type pages (`/cars/toyota/hilux/`, `/cars/dealer/volvo/`, `/cars/private/`), and single listing URLs.
- 📈 **Go past the ~440-result limit.** Searches with more results are split into price bands so every priced car can be reached. In our test, the 1,359-car Volvo dealer search returned all 1,359 cars.
- 📋 **Full listing details.** Optionally opens every listing for seller comments, full manufacturer specifications, grouped feature lists, colours, registration expiry, build and compliance dates, dealer stock ID, suburb and postcode, and the dealer's rating.
- 🔔 **Monitor new listings.** Monitoring mode remembers which cars were already saved for your search, so scheduled runs return only new listings. It can also catch price changes, with the old price included.
- ⚡ **Search-only mode.** Turn off details to collect price, odometer, body, engine, transmission, state, seller type and images straight from the search results. This is faster and cheaper.
- 🧰 **Apify platform built in.** Schedule runs, call the actor through the [Apify API](https://docs.apify.com/api/v2), connect it to [integrations](https://apify.com/integrations) such as Google Sheets, Slack, Zapier or Make, and export the data as JSON, CSV, Excel, XML or HTML.

### What data can you extract from carsales.com.au?

| Field | Description |
|-------|-------------|
| `networkId` | carsales Network ID of the listing (for example `OAG-AD-26442865`) |
| `title`, `make`, `model`, `badge`, `variant`, `year` | Vehicle identity as shown on the listing |
| `condition` | New, Used or Demo |
| `price`, `priceText`, `priceLabel` | Price in AUD and its type, such as "Excl. Govt. Charges" or "Drive away" |
| `priceExclGovtCharges` | Price excluding government charges, when the listing shows a drive-away price |
| `priceRating` | carsales price badge, such as "Great Price" or "Fair Price" |
| `odometer` | Odometer reading in km |
| `bodyStyle`, `fuelType`, `transmission`, `driveType`, `engine`, `engineSizeCc` | Main specs |
| `electricRangeKm` | Estimated range for electric cars |
| `doors`, `seats`, `colour`, `interiorColour` | Body and colour details |
| `buildDate`, `complianceDate`, `modelYear` | Build and compliance month, model year |
| `registrationPlate`, `registrationExpiry` | Registration details, when the seller provides them |
| `stockNumber` | Dealer stock ID |
| `ancapRating`, `fuelConsumption`, `vehicleDescription` | Safety rating, combined fuel use, full variant description |
| `suburb`, `region`, `state`, `postcode` | Location of the car |
| `sellerType`, `adType`, `dealerName`, `sellerId`, `lmct` | Seller details (dealer name shows on new-car listings) |
| `seller` | Dealer profile: location, member since, current listings, rating and review count |
| `sellerComments` | The seller's full description of the car |
| `specifications` | Manufacturer specs grouped by category (engine, dimensions, fuel, warranty and more) |
| `features` | Standard features grouped by category |
| `images`, `videos` | Image and video URLs |
| `priceChanged`, `previousPrice` | In monitoring mode with price tracking: whether the price changed since the last run |

### How to scrape carsales.com.au

1. Open [carsales.com.au](https://www.carsales.com.au/cars/) and run a search with the filters you need (make, model, price, location, new or used, dealer or private).
2. Copy the URL from your browser's address bar.
3. Open [Carsales AU Scraper](https://apify.com/parsebird/carsales-scraper) on Apify and paste the URL into **Start URLs**. You can add several URLs, including single listings.
4. Set **Max cars** and choose whether to **Scrape full car details**.
5. Click **Start**. When the run finishes, open the **Output** tab and download the data as JSON, CSV or Excel, or read it through the API.

To track new listings, turn on **Save only new listings (monitoring)** and [schedule the actor](https://docs.apify.com/platform/schedules) to run daily or hourly.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | array | **Yes** | — | carsales.com.au search URLs, make/model/state pages, or listing URLs |
| `maxItems` | integer | No | 100 | Maximum cars to save across all URLs. 0 = no limit |
| `scrapeDetails` | boolean | No | true | Open each listing for full specs, features, seller comments and location |
| `monitoringMode` | boolean | No | false | Save only cars not saved by earlier runs with the same Start URLs |
| `trackPriceChanges` | boolean | No | false | With monitoring on, also save known cars whose price changed |
| `skipPriceSplitting` | boolean | No | false | Stop at the first ~440 cars of each search instead of splitting it into price bands |
| `maxConcurrency` | integer | No | 8 | Maximum parallel requests |
| `minConcurrency` | integer | No | 2 | Parallel requests at the start |
| `maxRequestRetries` | integer | No | 8 | Retries per request, each with a new IP |
| `proxy` | object | No | Residential, AU | Proxy settings. carsales.com.au works best with Australian residential IPs |

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.carsales.com.au/cars/toyota/landcruiser/" },
        { "url": "https://www.carsales.com.au/cars/?q=(And.Make.Volvo._.Model.EX30.)" }
    ],
    "maxItems": 100,
    "scrapeDetails": true
}
```

### Output example

One item per car (shortened; `specifications` and `features` hold many more groups):

```json
{
    "networkId": "OAG-AD-26442865",
    "url": "https://www.carsales.com.au/cars/details/2020-toyota-landcruiser-gxl-auto-4x4/OAG-AD-26442865/",
    "title": "2020 Toyota Landcruiser GXL Auto 4x4",
    "make": "Toyota",
    "model": "Landcruiser",
    "badge": "GXL",
    "variant": "GXL Auto 4x4",
    "year": 2020,
    "condition": "Used",
    "price": 87977,
    "priceText": "$87,977",
    "priceLabel": "Excl. Govt. Charges",
    "priceRating": "Fair Price",
    "odometer": 127751,
    "bodyStyle": "SUV",
    "fuelType": "Diesel",
    "transmission": "Automatic",
    "driveType": "4x4",
    "engine": "8cyl 4.5L T Diesel",
    "engineSizeCc": 4461,
    "doors": 5,
    "seats": 8,
    "colour": "Black",
    "vehicleDescription": "VDJ200R GXL Wagon 8st 5dr Spts Auto 6sp 4x4 610kg 4.5DTT",
    "fuelConsumption": "9.5 L/100km",
    "buildDate": "March 2020",
    "complianceDate": "April 2020",
    "stockNumber": "229812",
    "ancapRating": 5,
    "suburb": "Bentley",
    "state": "WA",
    "postcode": "6102",
    "sellerType": "Dealer",
    "adType": "Dealer used",
    "sellerId": "AGC-SELLER-10934",
    "seller": { "location": "Western Australia", "memberSince": 2017, "currentListings": 1779 },
    "sellerComments": "GVM UPGRADE! BLACK BEAUTY! V8 turbo diesel 200 series GXL, one owner with service history...",
    "specifications": {
        "Engine": { "Engine Size (cc)": "4461cc", "Cylinders": "8", "Induction": "Twin Turbo Intercooled" },
        "Fuel": { "Fuel Type": "Diesel", "Fuel Capacity": "138L" }
    },
    "features": {
        "Safety & Security": { "Airbags": ["Driver", "Passenger", "Knee driver"] }
    },
    "imageUrl": "https://carsales.pxcrush.net/carsales/car/dealer/ddec5081159a74ed4e16c0fbf3781343.jpg",
    "images": ["https://carsales.pxcrush.net/carsales/car/dealer/ddec5081159a74ed4e16c0fbf3781343.jpg"],
    "detailsScraped": true,
    "scrapedAt": "2026-11-05T12:17:42Z"
}
```

Download the dataset in JSON, CSV, Excel, XML or HTML from the **Output** tab, or read it with the [Apify API](https://apify.com/parsebird/carsales-scraper/api).

### Use cases

- **Dealer pricing research:** compare asking prices, odometer and age across makes, models and states.
- **Stock monitoring:** get alerted when new cars matching your search are listed, or when prices drop.
- **Market analytics:** track supply, prices and price badges for a segment over time.
- **Lead generation for automotive services:** build lists of dealers with their location, licence number and rating.
- **Valuation models:** feed specs, build dates and prices into pricing or residual-value models.

### How to use the Carsales API in Python and JavaScript

Python ([apify-client](https://docs.apify.com/api/client/python)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/carsales-scraper").call(run_input={
    "startUrls": [{"url": "https://www.carsales.com.au/cars/toyota/hilux/"}],
    "maxItems": 200,
    "scrapeDetails": True,
})
for car in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(car["title"], car["price"], car["odometer"])
```

JavaScript ([apify-client](https://docs.apify.com/api/client/js)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/carsales-scraper').call({
    startUrls: [{ url: 'https://www.carsales.com.au/cars/toyota/hilux/' }],
    maxItems: 200,
    scrapeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((car) => console.log(car.title, car.price, car.odometer));
```

### How much does it cost to scrape carsales.com.au?

Carsales AU Scraper uses pay-per-event pricing. You pay for the cars you get. Platform usage (compute and proxy) is included in the event price and not billed separately.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| `listing-scraped`: each car saved (per 1,000) | $0.89 | $0.79 | $0.69 | **$0.49** |
| `listing-details-scraped`: each car opened for full details (per 1,000) | $0.99 | $0.89 | $0.79 | **$0.69** |

Every saved car counts as one `listing-scraped` event. With **Scrape full car details** on, each car also counts as one `listing-details-scraped` event. For example, 1,000 cars with full details cost $1.88 on the Free plan, and 1,000 cars from search results only cost $0.89. Set a maximum cost per run in the run options, and the actor stops when that limit is reached.

### How does Carsales AU Scraper work?

1. Reads each Start URL and works out whether it is a search or a single listing.
2. Loads the search results page by page, the same way the website does.
3. If a search has more than ~440 results, it splits the search into price bands, each small enough to be fully listed.
4. With details on, it opens every listing for the full data.
5. Saves one clean record per car, with duplicates removed. Promoted listings that appear on several pages are saved once.

### FAQ

**Is there an official carsales API?**
carsales.com.au does not offer a public self-serve API for its listing data. Carsales AU Scraper is a simple alternative: paste a search URL and get structured data back through the [Apify API](https://docs.apify.com/api/v2).

**Can I scrape more than 440 cars from one search?**
Yes. carsales.com.au shows at most about 20 pages per search. The actor splits bigger searches into price bands automatically. Cars listed without a price ("POA") cannot be reached by price bands; the log tells you how many there were. To keep only the first ~440 cars in the site's own order, turn on **Turn off price splitting**.

**How does monitoring mode work?**
The actor stores the IDs and prices of cars it has saved for your exact set of Start URLs in your named key-value store `carsales-monitor`. On the next run with the same URLs, it saves only cars it has not seen before. With **Also save price changes** on, it also saves known cars whose price changed, with `priceChanged: true` and `previousPrice`. New cars are also added to your named dataset `carsales-monitor-<your user ID>`, so you get one growing feed across runs. The first run saves everything it finds. Each run checks the whole search, so keep monitored searches focused.

**Can I filter by the date a car was listed?**
No. carsales.com.au does not show the listing date publicly, so the actor cannot filter by it. Use monitoring mode with a schedule to get only new listings.

**Why is `dealerName` empty for some cars?**
carsales.com.au shows the dealer's name on new-car search results only. For used and demo cars, the actor returns the dealer's `sellerId`, licence number (`lmct`), location, rating and stock ID.

**Which proxy should I use?**
Keep the default: Apify residential proxy with country Australia. If a different proxy gets blocked, the actor switches to Australian residential automatically.

**Can I scrape bikes, boats or trucks?**
Not yet. This actor covers cars on carsales.com.au. Request other sites in the Issues tab.

**Can I schedule runs or connect the data to other apps?**
Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules) for daily or hourly runs, and [integrations](https://apify.com/integrations) to send results to Google Sheets, Slack, Zapier, Make, webhooks and more.

**Something is not working. What should I do?**
Open an issue in the Issues tab with your input and the run link, and we will look at it quickly.

### Other car and Australian scrapers

- [Mobile.de Search Scraper](https://apify.com/parsebird/mobile-de-search-scraper): German and European car listings
- [AutoTrader.co.uk Scraper](https://apify.com/parsebird/autotrader-scraper): UK car listings
- [AutoTrader Canada Scraper](https://apify.com/parsebird/autotrader-ca-scraper): Canadian car listings
- [Cars.com Scraper with Contacts](https://apify.com/parsebird/cars-com-scraper): US car listings with dealer contacts
- [Otomoto.pl Scraper with Contacts](https://apify.com/parsebird/otomoto-scraper): Polish car listings
- [Bid.cars Scraper](https://apify.com/parsebird/bid-cars-scraper): US car auction data
- [Facebook Marketplace Scraper](https://apify.com/parsebird/facebook-marketplace-scraper): Marketplace listings, including vehicles
- [Realestate.com.au Scraper](https://apify.com/parsebird/realestate-au-scraper): Australian property listings
- [Domain.com.au Property Scraper](https://apify.com/parsebird/domain-com-au-scraper): Australian property listings

### Is it legal to scrape carsales.com.au?

Carsales AU Scraper collects only publicly available listing data that anyone can see on carsales.com.au without logging in. It does not collect private seller contact details. You are responsible for how you use the data. Check carsales' terms of use and the laws that apply to you, such as the Australian Privacy Act, especially before you use any personal data. Read more in Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/carsales-scraper/changelog.md

# Actor input Schema

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

Add carsales.com.au URLs. Supported: search results with filters (https://www.carsales.com.au/cars/?q=…), make/model/state pages (https://www.carsales.com.au/cars/toyota/hilux/, https://www.carsales.com.au/cars/dealer/volvo/), and single listings (https://www.carsales.com.au/cars/details/…/OAG-AD-12345678/).

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

Maximum number of cars to save across all start URLs. Set 0 for no limit. carsales.com.au shows at most about 440 cars per search; bigger searches are split into price bands automatically to get past that limit.

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

Open each listing for the full data: seller comments, full specifications and features, colours, registration, build and compliance dates, dealer stock ID, location with suburb and postcode, dealer rating, and all images. Turn off to save only the search result card data (cheaper and faster).

## `monitoringMode` (type: `boolean`):

Remember every car this Actor has saved for the same Start URLs and, on later runs, save only cars that were not seen before. Ideal for scheduled runs. The list of known cars is kept in your named key-value store 'carsales-monitor', and new cars are also added to your named dataset 'carsales-monitor-<your user ID>'. The first run saves everything it finds.

## `trackPriceChanges` (type: `boolean`):

With monitoring on, also save known cars whose price changed since the last run. They get priceChanged: true and previousPrice.

## `skipPriceSplitting` (type: `boolean`):

By default, searches with more than ~440 results are split into price bands so every car can be reached. Turn this on to save only the first ~440 cars of each search, in the site's own order (fewer requests).

## `maxConcurrency` (type: `integer`):

Maximum number of requests sent at the same time.

## `minConcurrency` (type: `integer`):

Number of parallel requests at the start. The scraper adds more while requests succeed (up to Max concurrency) and slows down when carsales.com.au blocks requests.

## `maxRequestRetries` (type: `integer`):

How many times a failed request is retried, with a new proxy IP each time.

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

carsales.com.au only accepts Australian residential IPs, so Apify residential proxy with country Australia is the default. Other proxy settings are switched to it automatically if they get blocked.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.carsales.com.au/cars/toyota/landcruiser/"
    }
  ],
  "maxItems": 20,
  "scrapeDetails": true,
  "monitoringMode": false,
  "trackPriceChanges": false,
  "skipPriceSplitting": false,
  "maxConcurrency": 8,
  "minConcurrency": 2,
  "maxRequestRetries": 8,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [
        {
            "url": "https://www.carsales.com.au/cars/toyota/landcruiser/"
        }
    ],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AU"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/carsales-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 = {
    "startUrls": [{ "url": "https://www.carsales.com.au/cars/toyota/landcruiser/" }],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AU",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/carsales-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 '{
  "startUrls": [
    {
      "url": "https://www.carsales.com.au/cars/toyota/landcruiser/"
    }
  ],
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}' |
apify call parsebird/carsales-scraper --silent --output-dataset

```

## MCP server setup

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