{
  "openapi": "3.0.1",
  "info": {
    "title": "Carsales.com.au $0.9 Bypass 440 Limit · Search by URL · Filters",
    "description": "Scrape Carsales.com.au — Australia's #1 car marketplace — with the only Apify actor that bypasses the 20-page (440-car) cap per search. Rich rows: make, model, year, price, location, seller, transmission, fuel, odometer, photos, specs. JSON + CSV.",
    "version": "0.0",
    "x-build-id": "sHCEPXSefTjP5LCkD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~carsales-cheerio/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-carsales-cheerio",
        "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/memo23~carsales-cheerio/runs": {
      "post": {
        "operationId": "runs-sync-memo23-carsales-cheerio",
        "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/memo23~carsales-cheerio/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-carsales-cheerio",
        "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": {
          "mode": {
            "title": "Search mode",
            "enum": [
              "url",
              "search"
            ],
            "type": "string",
            "description": "How to find listings. <b>Direct URLs</b> — paste any carsales URL and the scraper paginates through it. <b>Search by filters</b> — pick a few dropdowns and the scraper builds the URL. Fields belonging to the other mode are ignored.",
            "default": "url"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "One or more carsales URLs to scrape. Each URL is processed independently — internally split into price-range chunks if it returns more than ~400 listings, then paginated to completion. Copy a URL straight from your carsales browser tab, or use the example below as a template.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "all",
              "new",
              "used",
              "demo"
            ],
            "type": "string",
            "description": "New, used, or demo stock. Pick <i>All</i> to include every condition.",
            "default": "used"
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "all",
              "dealer",
              "private"
            ],
            "type": "string",
            "description": "Limit to dealer-only or private-only listings, or include both.",
            "default": "all"
          },
          "make": {
            "title": "Make",
            "type": "string",
            "description": "Manufacturer name, e.g. <i>Toyota</i>, <i>Ford</i>, <i>BMW</i>. Leave blank to include every brand."
          },
          "model": {
            "title": "Model",
            "type": "string",
            "description": "Model name, e.g. <i>Corolla</i>, <i>Ranger</i>, <i>X5</i>. Only used when a Make is also set."
          },
          "bodyType": {
            "title": "Body type",
            "enum": [
              "",
              "suv",
              "sedan",
              "hatch",
              "wagon",
              "coupe",
              "convertible",
              "ute",
              "van",
              "bus",
              "cab-chassis",
              "people-mover"
            ],
            "type": "string",
            "description": "Restrict to a single body shape — useful for narrowing very generic queries.",
            "default": ""
          },
          "state": {
            "title": "State or territory",
            "enum": [
              "",
              "nsw",
              "vic",
              "qld",
              "sa",
              "wa",
              "tas",
              "act",
              "nt"
            ],
            "type": "string",
            "description": "Limit results to one Australian state/territory. Pick <i>All Australia</i> for a national search.",
            "default": ""
          },
          "transmission": {
            "title": "Transmission",
            "enum": [
              "",
              "automatic",
              "manual"
            ],
            "type": "string",
            "description": "Manual gearbox, automatic, or both.",
            "default": ""
          },
          "fuelType": {
            "title": "Fuel type",
            "enum": [
              "",
              "petrol",
              "diesel",
              "hybrid",
              "plug-in-hybrid",
              "electric",
              "dual-fuel"
            ],
            "type": "string",
            "description": "Restrict by powertrain — covers regular ICE, hybrids, plug-in hybrids, and EVs.",
            "default": ""
          },
          "colour": {
            "title": "Colour",
            "type": "string",
            "description": "Exterior colour as a free-text word — e.g. <i>black</i>, <i>white</i>, <i>silver</i>. Carsales matches loosely."
          },
          "cylinders": {
            "title": "Cylinders",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Engine cylinder count. Common values: 3, 4, 6, 8, 12."
          },
          "doors": {
            "title": "Doors",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of doors. Common values: 2, 3, 4, 5."
          },
          "priceMin": {
            "title": "Minimum price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Set either bound on its own or combine with Maximum price. Setting any price bound lets the scraper split the search efficiently — recommended for large catalogues."
          },
          "priceMax": {
            "title": "Maximum price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper price cap. Leave empty for no upper limit."
          },
          "yearMin": {
            "title": "Minimum year",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Oldest model year to include. Pair with Maximum year for an exact range."
          },
          "yearMax": {
            "title": "Maximum year",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Newest model year to include."
          },
          "odometerMin": {
            "title": "Minimum odometer (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound on kilometres on the clock."
          },
          "odometerMax": {
            "title": "Maximum odometer (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound on kilometres on the clock — useful for filtering out high-km stock."
          },
          "postcode": {
            "title": "Postcode",
            "pattern": "^[0-9]{4}$",
            "type": "string",
            "description": "4-digit Australian postcode. Combine with Radius to find cars near you instead of by state."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How far from the postcode to search. Defaults to 25 km when a postcode is set without a radius. Ignored if no postcode is provided."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "featured",
              "price-asc",
              "price-desc",
              "km-asc",
              "km-desc",
              "year-desc",
              "year-asc"
            ],
            "type": "string",
            "description": "Order of results returned. The scraper still walks every page regardless of sort — this is mostly relevant when combined with Maximum listings to grab \"the top N cheapest\" etc. (URL mode honours whatever sort is in the URL.)",
            "default": "featured"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "How many detail pages to fetch in parallel. Higher is faster but burns proxy budget quicker; lower is gentler on the proxy pool.",
            "default": 5
          },
          "minConcurrency": {
            "title": "Min concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Floor on parallel detail fetches — keeps the run moving even if some requests slow down.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 1,
            "type": "integer",
            "description": "How many times to retry a single failed request before giving up. The scraper scales this internally for pagination (2x) and trips a circuit breaker after 3 consecutive blocked pages — increase this if you're on a flaky proxy pool.",
            "default": 5
          },
          "monitoringMode": {
            "title": "Monitoring mode — deliver only new listings since last run",
            "type": "boolean",
            "description": "Turn on for scheduled runs that should only deliver listings <b>new since the last run</b>. A persistent seen-IDs set is consulted before pushing each item, so listings already delivered in a prior run are filtered out. Best paired with a scheduled run on Apify (e.g. every 3 hours) — each run produces a small delta instead of re-scraping the whole catalogue. <b>First-run tip:</b> set <code>maxItems</code> to a small number (e.g. 500) for the very first scheduled run — there are no seen IDs yet, so without a cap the actor would scrape the whole catalogue. From the second run onward <code>maxItems</code> is just a ceiling. <b>Pricing note:</b> each listing the actor evaluates against the seen-IDs set is charged as one <code>additional-details</code> event — this reflects the dedup work performed, including on runs where 0 new items are delivered.",
            "default": false
          },
          "skipPriceSplitting": {
            "title": "Skip price-range splitting",
            "type": "boolean",
            "description": "When on, the actor skips the internal price-range splitter that breaks large queries into chunks. Instead, it paginates a single query and stops at carsales' natural cap (~400 items). Useful for monitoring scheduled runs where you only want a small fresh sample rather than the full catalogue — ~10x cheaper compute per run. Off by default; turn on if you've enabled monitoring mode and don't need exhaustive scraping.",
            "default": false
          },
          "monitoringWindow": {
            "title": "Monitoring window",
            "enum": [
              "since-last-run",
              "today-aest",
              "last-24h",
              "last-6h",
              "last-3h"
            ],
            "type": "string",
            "description": "How far back to look for new listings on each run (used only when monitoring mode is on). <b>since-last-run</b> (default): cutoff = the previous successful run's start time — bootstraps to midnight AEST on the very first run. <b>today-aest</b>: midnight today in Australian Eastern Time. <b>last-24h / last-6h / last-3h</b>: rolling window.",
            "default": "since-last-run"
          },
          "flatten": {
            "title": "Flatten output",
            "type": "boolean",
            "description": "<b>Off (default)</b>: every item is a nested object with grouped fields (<code>specs</code>, <code>seller</code>, <code>location</code>, <code>media</code>, <code>meta</code>, <code>resources</code>) plus the most-used identity fields at the top level. Apify's dataset table view automatically flattens nested keys into columns like <code>specs.fuelType</code>. <b>On</b>: each item is a single-level object with ~110 keys — useful when piping straight into a spreadsheet that doesn't follow dotted paths.",
            "default": false
          },
          "payload": {
            "title": "Payload",
            "type": "object",
            "description": "Advanced: extra payload data passed verbatim to carsales' internal API. Most users can leave this empty. Example: <pre>{\"data\": {}, \"sharedGroupPostBack\": \"...\"}</pre>"
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify <b>RESIDENTIAL</b> proxy with country <b>AU</b> is strongly recommended and is the default. Datacentre and free-tier proxy groups get blocked by carsales' bot defence and will return 0 listings. If your plan doesn't include residential credit, paste your own residential proxy URLs.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}