{
  "openapi": "3.0.1",
  "info": {
    "title": "Copart Auction Scraper — Salvage Lots in 8 Countries",
    "description": "Scrape Copart salvage and used-vehicle auction lots in 8 countries: USA, Canada, UK, Ireland, Germany, Spain, Finland, Middle East. Paste a search URL or a single lot URL, or filter by make, model, year, odometer. Flat JSON/CSV: specs, damage, bids, dates, images, VIN decoding.",
    "version": "0.0",
    "x-build-id": "3jBlElqDJaEKe0bUO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~copart-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-copart-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/memo23~copart-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-copart-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/memo23~copart-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-copart-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": {
          "startUrls": {
            "title": "Copart search URLs or single lot URLs",
            "type": "array",
            "description": "<b>Use this OR Option B below — not both.</b> Two kinds of link are accepted, and they can be mixed:<br><br><b>1. Search URLs</b> — run your search on any Copart site, then copy the whole address bar, e.g.<br><code>https://www.copart.com/lotSearchResults?searchCriteria=...</code><br><br><b>2. Single lot URLs</b> — scrape one specific vehicle, no search needed, e.g.<br><code>https://www.copart.com/lot/73672065/salvage-2021-kia-forte-gt-line-tx-dallas</code><br><br>Works with <b>copart.com</b>, <b>copart.ca</b>, <b>copart.co.uk</b>, <b>copart.ie</b>, <b>copart.de</b>, <b>copart.es</b>, <b>copart.fi</b> and <b>copartmea.com</b>. The site is detected from each URL’s host, so links from different countries can go in the same run.<br><br><b>If this list has any URL, Option B is ignored.</b> Leave it empty to use Option B instead.",
            "items": {
              "type": "string"
            }
          },
          "site": {
            "title": "Copart site",
            "enum": [
              "uk",
              "de",
              "us",
              "es",
              "fi",
              "mea",
              "ca",
              "ie"
            ],
            "type": "string",
            "description": "<b>Only applies when Option A (URLs) is empty.</b> Which storefront the filters below run against: <b>USA</b> (copart.com, USD/miles), <b>Canada</b> (copart.ca, CAD), <b>United Kingdom</b> (copart.co.uk, GBP/miles), <b>Ireland</b> (copart.ie, EUR/km), <b>Germany</b> (copart.de, EUR/km), <b>Spain</b> (copart.es, EUR/km), <b>Finland</b> (copart.fi, EUR/km) or <b>Middle East</b> (copartmea.com, AED/km). For URL-based scraping this is ignored — the site comes from each URL's host.",
            "default": "uk"
          },
          "searchAllVehicles": {
            "title": "Search all vehicles (year range only)",
            "type": "boolean",
            "description": "<b>Only applies when Option A (URLs) is empty.</b><br><br>When <b>on</b>, runs a very broad search on the selected <i>site</i> (default long year list only—add make/model below if you want to narrow).<br><br>When <b>off</b>, set at least one of: make, model, year, odometer, or a featured chip.<br><br><b>Everything in Option B combines</b> into one <code>searchCriteria</code>, like ticking several filters on the Copart site.",
            "default": false
          },
          "make": {
            "title": "Make",
            "type": "string",
            "description": "Manufacturer as Copart lists it (uppercase is typical). Maps to <code>filter.MAKE</code> → <code>lot_make_desc:\"YOUR_VALUE\"</code>.<br><br><b>Examples:</b> <code>VOLVO</code>, <code>BMW</code>, <code>FORD</code>.<br><br>Clear the field if you don’t want to filter by make. Ignored when <b>Start URLs</b> is non-empty."
          },
          "model": {
            "title": "Model",
            "type": "string",
            "description": "Model keyword as on Copart (often a short token, not the full description). Maps to <code>filter.MODL</code> → <code>manufacturer_model_desc:\"YOUR_VALUE\"</code>.<br><br><b>Examples:</b> <code>XC60</code>, <code>3 SERIES</code>, <code>FOCUS</code>.<br><br>Clear if not needed."
          },
          "yearMin": {
            "title": "Year (minimum)",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Minimum model year. Together with <i>Year (maximum)</i> builds <code>filter.YEAR</code> → <code>lot_year:[min TO max]</code>.<br><br>If you only set one bound, the other side defaults to a wide range (floor 1940 / ceiling current calendar year + 1).<br><br><b>Example pair:</b> 2018 and 2024 → only vehicles in that year band (plus your other filters)."
          },
          "yearMax": {
            "title": "Year (maximum)",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Maximum model year; see <i>Year (minimum)</i>."
          },
          "odometerMin": {
            "title": "Odometer (minimum)",
            "minimum": 0,
            "maximum": 9999999,
            "type": "integer",
            "description": "Minimum odometer reading (miles on UK listings). With <i>Odometer (maximum)</i> builds <code>filter.ODM</code> → <code>odometer_reading_received:[min TO max]</code>.<br><br>Single bound only: open end uses 0 or 9,999,999 as appropriate.<br><br><b>Example pair:</b> 75000 and 100000 = vehicles showing roughly 75k–100k miles."
          },
          "odometerMax": {
            "title": "Odometer (maximum)",
            "minimum": 0,
            "maximum": 9999999,
            "type": "integer",
            "description": "Maximum odometer (miles); see <i>Odometer (minimum)</i>."
          },
          "featuredChips": {
            "title": "Featured filters (multi-select)",
            "uniqueItems": true,
            "type": "array",
            "description": "Same idea as Copart’s <i>Featured items</i> on the search page. Selected chips add extra search constraints <b>together with</b> the visible fields above.<br><br><b>Fully wired in code:</b> Vehicles for Auction, Buy it Now, High Value Items, Hot Items. Other labels are accepted in the form but currently log a warning and are skipped until mapped in code.<br><br><b>Example:</b> select <i>Buy it Now</i> with Make <code>VOLVO</code> above to require both.",
            "items": {
              "type": "string",
              "enum": [
                "vehiclesForAuction",
                "featuredCars",
                "buyItNow",
                "highValueItems",
                "newListings",
                "usedVehiclesDamaged",
                "pureSaleItems",
                "runsAndDrives",
                "doesNotRun",
                "hotItems",
                "usedVehicles",
                "fleetLease",
                "repossessions",
                "partSales"
              ],
              "enumTitles": [
                "Vehicles for Auction",
                "Featured Cars",
                "Buy it Now",
                "High Value Items",
                "New Listings",
                "Used Vehicles - Damaged",
                "Pure Sale Items",
                "Runs and Drives",
                "Does Not Run",
                "Hot Items",
                "Used Vehicles",
                "Fleet / Lease",
                "Repossessions",
                "Part Sales"
              ]
            },
            "default": []
          },
          "enrichVin": {
            "title": "✨ Decode each VIN: manufacturer, country of origin, engine & specs",
            "type": "boolean",
            "description": "Turn on to add flat <code>vin*</code> columns to every lot: <b>manufacturer</b>, <b>country of origin</b>, <b>model year</b>, <b>model &amp; trim</b>, <b>body class</b>, <b>engine cylinders</b>, <b>displacement</b>, <b>fuel type</b>, <b>transmission</b>, <b>drive type</b> and <b>assembly plant</b>.<br><br>Copart masks the last 6 characters of the VIN on public lots — only the first 11 are needed, so this still works on masked VINs (e.g. <code>3KPF44AC0ME******</code> → 2021 Kia Forte GT, built in Mexico). Lots where the VIN is fully masked get <code>vinDecoded: false</code> instead.<br><br>Uses the free public <b>NHTSA vPIC</b> database. No API key, no extra charge, cached per run.",
            "default": false
          },
          "includeOffsiteLots": {
            "title": "Include offsite partner lots (NPA / Purple Wave)",
            "type": "boolean",
            "description": "Copart's <b>US</b> search index mixes in lots auctioned on partner platforms — <b>NPA</b> and <b>Purple Wave</b> — and Copart's lot-details API returns an error for every one of them. On a default copart.com search these are the <b>majority</b> of results (a live sample of the first 20 hits was 11 Purple Wave, 7 NPA, 2 Copart), so leaving this <b>off</b> means you are not billed for records that can never carry lot details.<br><br>Turn it <b>on</b> to keep them anyway — they arrive with <code>lotDetailsAvailable: false</code> and the search-index fields under <code>searchResult</code>.<br><br>UK, Ireland, Germany, Spain, Finland, Canada and Middle East searches contain no partner lots, so this setting has no effect there.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum number of lots",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of lot detail records to save.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of API requests that can be processed at the same time.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of API requests that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 60
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}