{
  "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": "Nbs0s1yX4Wce10wa1"
  },
  "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, e.g. <code>FORD</code>, <code>BMW</code>. Matched as a prefix, so <code>CHEV</code> also finds <code>CHEVROLET</code> and <code>NISS</code> also finds <code>NISSAN</code> — Copart stores several makes under both forms.<br><br>Maps to <code>lot_make_desc</code>."
          },
          "model": {
            "title": "Model",
            "type": "string",
            "description": "Model as Copart lists it, e.g. <code>CAMRY</code>, <code>F150</code>. Matched as a prefix. Best combined with a make.<br><br>Maps to <code>manufacturer_model_desc</code>."
          },
          "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": []
          },
          "damageTypes": {
            "title": "Primary damage",
            "uniqueItems": true,
            "type": "array",
            "description": "Copart's primary damage category. Pick several to widen — they OR together. Verified against the live index: every code here returns only lots carrying it.<br><br>Maps to <code>damage_type_code</code>.",
            "items": {
              "type": "string",
              "enum": [
                "DAMAGECODE_FR",
                "DAMAGECODE_RR",
                "DAMAGECODE_SD",
                "DAMAGECODE_MN",
                "DAMAGECODE_MC",
                "DAMAGECODE_WA",
                "DAMAGECODE_RO",
                "DAMAGECODE_HL",
                "DAMAGECODE_NW",
                "DAMAGECODE_VN",
                "DAMAGECODE_UN",
                "DAMAGECODE_TP",
                "DAMAGECODE_AO",
                "DAMAGECODE_BN",
                "DAMAGECODE_ST",
                "DAMAGECODE_FD",
                "DAMAGECODE_BE",
                "DAMAGECODE_UK",
                "DAMAGECODE_VI",
                "DAMAGECODE_BC",
                "DAMAGECODE_BI",
                "DAMAGECODE_DH",
                "DAMAGECODE_PR",
                "DAMAGECODE_RJ",
                "DAMAGECODE_VP"
              ],
              "enumTitles": [
                "Front End",
                "Rear End",
                "Side",
                "Minor Dent/Scratches",
                "Mechanical",
                "Water/Flood",
                "Rollover",
                "Hail",
                "Normal Wear",
                "Vandalism",
                "Undercarriage",
                "Top/Roof",
                "All Over",
                "Burn",
                "Stripped",
                "Frame Damage",
                "Burn - Engine",
                "Unknown",
                "Missing/Altered VIN",
                "Biohazard/Chemical",
                "Burn - Interior",
                "Damage History",
                "Partial Repair",
                "Rejected Repair",
                "Replaced VIN"
              ]
            },
            "default": []
          },
          "secondaryDamageTypes": {
            "title": "Secondary damage",
            "uniqueItems": true,
            "type": "array",
            "description": "Secondary damage category, when Copart records one. Maps to <code>secondary_damage_code</code>.",
            "items": {
              "type": "string",
              "enum": [
                "SCDAMCODE_FR",
                "SCDAMCODE_RR",
                "SCDAMCODE_SD",
                "SCDAMCODE_MN",
                "SCDAMCODE_MC",
                "SCDAMCODE_WA",
                "SCDAMCODE_RO",
                "SCDAMCODE_HL",
                "SCDAMCODE_NW",
                "SCDAMCODE_VN",
                "SCDAMCODE_UN",
                "SCDAMCODE_TP",
                "SCDAMCODE_AO",
                "SCDAMCODE_BN",
                "SCDAMCODE_ST",
                "SCDAMCODE_FD",
                "SCDAMCODE_BE",
                "SCDAMCODE_UK",
                "SCDAMCODE_VI",
                "SCDAMCODE_BC",
                "SCDAMCODE_BI",
                "SCDAMCODE_DH",
                "SCDAMCODE_PR",
                "SCDAMCODE_RJ",
                "SCDAMCODE_VP"
              ],
              "enumTitles": [
                "Front End",
                "Rear End",
                "Side",
                "Minor Dent/Scratches",
                "Mechanical",
                "Water/Flood",
                "Rollover",
                "Hail",
                "Normal Wear",
                "Vandalism",
                "Undercarriage",
                "Top/Roof",
                "All Over",
                "Burn",
                "Stripped",
                "Frame Damage",
                "Burn - Engine",
                "Unknown",
                "Missing/Altered VIN",
                "Biohazard/Chemical",
                "Burn - Interior",
                "Damage History",
                "Partial Repair",
                "Rejected Repair",
                "Replaced VIN"
              ]
            },
            "default": []
          },
          "vehicleTypes": {
            "title": "Vehicle type",
            "uniqueItems": true,
            "type": "array",
            "description": "Automobiles, motorcycles, boats, trailers, RVs, farm and industrial equipment. Maps to <code>vehicle_type_code</code>.<br><br>Three real codes carry no public name — they sit in Copart's heavy/industrial groups — so they are offered by code rather than under an invented label.",
            "items": {
              "type": "string",
              "enum": [
                "VEHTYPE_V",
                "VEHTYPE_K",
                "VEHTYPE_R",
                "VEHTYPE_B",
                "VEHTYPE_A",
                "VEHTYPE_C",
                "VEHTYPE_M",
                "VEHTYPE_L",
                "VEHTYPE_J",
                "VEHTYPE_D",
                "VEHTYPE_S",
                "VEHTYPE_F",
                "VEHTYPE_H",
                "VEHTYPE_I",
                "VEHTYPE_T",
                "VEHTYPE_U",
                "VEHTYPE_N",
                "VEHTYPE_E"
              ],
              "enumTitles": [
                "Automobile",
                "Medium Duty / Box Truck",
                "Recreational Vehicle (RV)",
                "Bus",
                "ATV",
                "Motorcycle",
                "Boat",
                "Trailer",
                "Jet Ski",
                "Dirt Bike",
                "Snowmobile",
                "Agriculture / Farm Equipment",
                "Other Goods",
                "Inspection",
                "Transport",
                "VEHTYPE_U (Copart does not publish a name)",
                "VEHTYPE_N (Copart does not publish a name)",
                "VEHTYPE_E (Copart does not publish a name)"
              ]
            },
            "default": []
          },
          "titleGroups": {
            "title": "Title group",
            "uniqueItems": true,
            "type": "array",
            "description": "Clean, salvage, or non-repairable. Maps to <code>title_group_code</code>.",
            "items": {
              "type": "string",
              "enum": [
                "TITLEGROUP_C",
                "TITLEGROUP_S",
                "TITLEGROUP_J"
              ],
              "enumTitles": [
                "Clean title",
                "Salvage (non-clean)",
                "Non-repairable / junk"
              ]
            },
            "default": []
          },
          "lossTypes": {
            "title": "Loss type (advanced)",
            "uniqueItems": true,
            "type": "array",
            "description": "Copart's loss/sale type. Only three carry a name Copart actually publishes; the rest are listed by raw code with their share of inventory, because a guessed label on a filter that silently returns the wrong cars is worse than an honest code.<br><br>Maps to <code>loss_type_code</code>.",
            "items": {
              "type": "string",
              "enum": [
                "LOSSCODE_R",
                "LOSSCODE_W",
                "LOSSCODE_L",
                "LOSSCODE_C",
                "LOSSCODE_M",
                "LOSSCODE_N",
                "LOSSCODE_D",
                "LOSSCODE_P",
                "LOSSCODE_T",
                "LOSSCODE_Y",
                "LOSSCODE_H",
                "LOSSCODE_E",
                "LOSSCODE_S",
                "LOSSCODE_B",
                "LOSSCODE_I",
                "LOSSCODE_X",
                "LOSSCODE_K",
                "LOSSCODE_O",
                "LOSSCODE_U",
                "LOSSCODE_G",
                "LOSSCODE_Z"
              ],
              "enumTitles": [
                "Repossession",
                "Water / flood",
                "Certificate of destruction",
                "LOSSCODE_C (~73% of US inventory, unnamed by Copart)",
                "LOSSCODE_M (~7%, unnamed)",
                "LOSSCODE_N (~7%, unnamed)",
                "LOSSCODE_D (~2%, unnamed)",
                "LOSSCODE_P (~2%, unnamed)",
                "LOSSCODE_T (~2%, unnamed)",
                "LOSSCODE_Y (~2%, unnamed)",
                "LOSSCODE_H (~1%, unnamed)",
                "LOSSCODE_E (unnamed)",
                "LOSSCODE_S (unnamed)",
                "LOSSCODE_B (unnamed)",
                "LOSSCODE_I (unnamed)",
                "LOSSCODE_X (unnamed)",
                "LOSSCODE_K (unnamed)",
                "LOSSCODE_O (unnamed)",
                "LOSSCODE_U (unnamed)",
                "LOSSCODE_G (unnamed)",
                "LOSSCODE_Z (unnamed)"
              ]
            },
            "default": []
          },
          "fuelTypes": {
            "title": "Fuel type",
            "uniqueItems": true,
            "type": "array",
            "description": "Powertrain. Pick several — they widen the search.<br><br>Each option covers every spelling Copart stores for it — <code>fuel_type_desc</code> holds the same value under 35 different strings, and matching only the tidy one silently drops the rest. A raw Copart value still works if you pass one.",
            "items": {
              "type": "string",
              "enum": [
                "Gasoline",
                "Diesel",
                "Electric",
                "Hybrid",
                "Flex fuel",
                "CNG",
                "Hydrogen",
                "Propane",
                "Gas/oil mix",
                "Unknown"
              ],
              "enumTitles": [
                "Gasoline",
                "Diesel",
                "Electric",
                "Hybrid",
                "Flex fuel",
                "CNG",
                "Hydrogen",
                "Propane",
                "Gas/oil mix",
                "Unknown"
              ]
            },
            "default": []
          },
          "driveTypes": {
            "title": "Drive train",
            "uniqueItems": true,
            "type": "array",
            "description": "Drive configuration.<br><br>Each option covers every spelling Copart stores for it — <code>drive</code> holds the same value under 20 different strings, and matching only the tidy one silently drops the rest. A raw Copart value still works if you pass one.",
            "items": {
              "type": "string",
              "enum": [
                "Front-wheel drive",
                "Rear-wheel drive",
                "All-wheel drive",
                "4x4",
                "4x2",
                "6x4",
                "Unknown"
              ],
              "enumTitles": [
                "Front-wheel drive",
                "Rear-wheel drive",
                "All-wheel drive",
                "4x4",
                "4x2",
                "6x4",
                "Unknown"
              ]
            },
            "default": []
          },
          "transmissionTypes": {
            "title": "Transmission",
            "uniqueItems": true,
            "type": "array",
            "description": "Transmission type.<br><br>Each option covers every spelling Copart stores for it — <code>transmission_type</code> holds the same value under 5 different strings, and matching only the tidy one silently drops the rest. A raw Copart value still works if you pass one.",
            "items": {
              "type": "string",
              "enum": [
                "Automatic",
                "Manual",
                "None",
                "Unknown"
              ],
              "enumTitles": [
                "Automatic",
                "Manual",
                "None",
                "Unknown"
              ]
            },
            "default": []
          },
          "cylinders": {
            "title": "Cylinders",
            "uniqueItems": true,
            "type": "array",
            "description": "Engine cylinder count. <code>0</code> is an electric vehicle.<br><br>Each option covers every spelling Copart stores for it — <code>cylinders</code> holds the same value under 19 different strings, and matching only the tidy one silently drops the rest. A raw Copart value still works if you pass one.",
            "items": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "8",
                "10",
                "12"
              ],
              "enumTitles": [
                "0",
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "8",
                "10",
                "12"
              ]
            },
            "default": []
          },
          "bodyStyles": {
            "title": "Body style",
            "type": "array",
            "description": "e.g. <code>SEDAN</code>, <code>PICKUP</code>, <code>SPORT UTILITY</code>. Matched as a substring, so <code>SEDAN</code> also finds \"SEDAN 4DR\" — Copart has ~170 body-style spellings.<br><br>Maps to <code>body_style</code>.",
            "items": {
              "type": "string"
            }
          },
          "engines": {
            "title": "Engine",
            "type": "array",
            "description": "Engine description exactly as Copart writes it, e.g. <code>2.0L 4</code>, <code>3.5L 6</code>. Maps to <code>engine</code>.",
            "items": {
              "type": "string"
            }
          },
          "trims": {
            "title": "Trim",
            "type": "array",
            "description": "Trim level, e.g. <code>SE</code>, <code>LIMITED</code>, <code>SPORT</code>. Maps to <code>manufacturer_trim_desc</code>.",
            "items": {
              "type": "string"
            }
          },
          "colors": {
            "title": "Exterior colour",
            "type": "array",
            "description": "<b>Bonus capability</b> — Copart's own site has no colour filter, so this one is applied to each finished lot record instead of the search index. Matching is case-insensitive and partial, so <code>GRAY</code> also catches \"DARK GRAY\". Non-matching lots are dropped before they are saved, so you are not charged for them.<br><br>Because it runs after the lot is fetched, a colour filter makes a run slower than the index-side filters above.",
            "items": {
              "type": "string"
            }
          },
          "locationStates": {
            "title": "State / province",
            "uniqueItems": true,
            "type": "array",
            "description": "Covers every Copart yard in the state. Pick several to widen.<br><br>Maps to <code>location_state</code>.",
            "items": {
              "type": "string",
              "enum": [
                "AB",
                "AK",
                "AL",
                "AR",
                "AZ",
                "CA",
                "CO",
                "CT",
                "DE",
                "FL",
                "GA",
                "HI",
                "IA",
                "ID",
                "IL",
                "IN",
                "KS",
                "KY",
                "LA",
                "MA",
                "MD",
                "ME",
                "MI",
                "MN",
                "MO",
                "MS",
                "MT",
                "NB",
                "NC",
                "ND",
                "NE",
                "NH",
                "NJ",
                "NL",
                "NM",
                "NS",
                "NV",
                "NY",
                "OH",
                "OK",
                "ON",
                "OR",
                "PA",
                "QC",
                "RI",
                "SC",
                "SD",
                "TN",
                "TX",
                "UT",
                "VA",
                "VT",
                "WA",
                "WI",
                "WV",
                "WY"
              ],
              "enumTitles": [
                "AB",
                "AK",
                "AL",
                "AR",
                "AZ",
                "CA",
                "CO",
                "CT",
                "DE",
                "FL",
                "GA",
                "HI",
                "IA",
                "ID",
                "IL",
                "IN",
                "KS",
                "KY",
                "LA",
                "MA",
                "MD",
                "ME",
                "MI",
                "MN",
                "MO",
                "MS",
                "MT",
                "NB",
                "NC",
                "ND",
                "NE",
                "NH",
                "NJ",
                "NL",
                "NM",
                "NS",
                "NV",
                "NY",
                "OH",
                "OK",
                "ON",
                "OR",
                "PA",
                "QC",
                "RI",
                "SC",
                "SD",
                "TN",
                "TX",
                "UT",
                "VA",
                "VT",
                "WA",
                "WI",
                "WV",
                "WY"
              ]
            },
            "default": []
          },
          "yardNames": {
            "title": "Yard name",
            "type": "array",
            "description": "Specific yards as Copart names them, e.g. <code>TX - HOUSTON</code>, <code>IL - CHICAGO NORTH</code>. Combine with or instead of the state filter. Maps to <code>yard_name</code>.",
            "items": {
              "type": "string"
            }
          },
          "currentBidMin": {
            "title": "Current bid — minimum",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest current bid to include, in the lot's own currency. Runs on Copart's index, so unlike most scrapers it costs no extra pages. Maps to <code>current_high_bid</code>."
          },
          "currentBidMax": {
            "title": "Current bid — maximum",
            "minimum": 0,
            "type": "integer",
            "description": "Highest current bid to include. Lots with no bid yet count as 0."
          },
          "saleDatePreset": {
            "title": "Sale date — quick window",
            "enum": [
              "today",
              "tomorrow",
              "next_7_days",
              "next_30_days",
              "upcoming"
            ],
            "type": "string",
            "description": "Upcoming auctions within a fixed window. Ignored when the custom dates below are set. Maps to <code>auction_date_utc</code>."
          },
          "saleDateFrom": {
            "title": "Sale date — from",
            "type": "string",
            "description": "Inclusive lower bound, <code>YYYY-MM-DD</code> (UTC). Overrides the quick window."
          },
          "saleDateTo": {
            "title": "Sale date — to",
            "type": "string",
            "description": "Inclusive upper bound, <code>YYYY-MM-DD</code> (UTC)."
          },
          "newlyAddedWithinDays": {
            "title": "Newly added within N days",
            "minimum": 1,
            "type": "integer",
            "description": "Lots that <b>appeared in Copart's inventory</b> in the last N days — which is not the same as when their auction runs. <code>1</code> = last 24 hours, <code>7</code> = last week. Maps to <code>expected_sale_assigned_ts_utc</code>."
          },
          "salePlatforms": {
            "title": "Sale platform — include only",
            "uniqueItems": true,
            "type": "array",
            "description": "Limit to specific Copart sale platforms. Leave empty for all. Maps to <code>sale_platform_code</code>.",
            "items": {
              "type": "string",
              "enum": [
                "CPRTA",
                "CRTSA",
                "CPNCA",
                "CPCAA",
                "PWUSA",
                "NPAUSA"
              ],
              "enumTitles": [
                "Copart USA",
                "Copart Select",
                "Copart NCS",
                "Copart Canada",
                "Purple Wave (offsite)",
                "NPA (offsite)"
              ]
            },
            "default": []
          },
          "excludeSalePlatforms": {
            "title": "Sale platform — exclude",
            "uniqueItems": true,
            "type": "array",
            "description": "Drop specific platforms. Ignored when the include list above is set.<br><br>Note the separate <b>Include offsite partner lots</b> toggle already removes Purple Wave and NPA by default, because Copart's detail API cannot serve them at all.",
            "items": {
              "type": "string",
              "enum": [
                "CPRTA",
                "CRTSA",
                "CPNCA",
                "CPCAA",
                "PWUSA",
                "NPAUSA"
              ],
              "enumTitles": [
                "Copart USA",
                "Copart Select",
                "Copart NCS",
                "Copart Canada",
                "Purple Wave (offsite)",
                "NPA (offsite)"
              ]
            },
            "default": []
          },
          "lotNumbers": {
            "title": "Lot numbers",
            "type": "array",
            "description": "Look up specific lots by number, e.g. <code>73672065</code>. Maps to <code>lot_number</code>.",
            "items": {
              "type": "string"
            }
          },
          "vin": {
            "title": "VIN",
            "type": "string",
            "description": "Full or partial VIN; a partial value matches as a prefix. Maps to <code>full_vin</code>."
          },
          "freeTextQuery": {
            "title": "Free-text search",
            "type": "string",
            "description": "Keyword search across the lot description, e.g. <code>tesla model 3</code>. Every word must appear. Use this when you would rather type a phrase than pick make and model."
          },
          "runsAndDrivesOnly": {
            "title": "Runs and drives only",
            "type": "boolean",
            "description": "Only lots Copart certified as running and driving (<code>lot_condition_code:CERT-S</code>).",
            "default": false
          },
          "hasKeysOnly": {
            "title": "Has keys only",
            "type": "boolean",
            "description": "Only lots where keys are present.",
            "default": false
          },
          "buyItNowOnly": {
            "title": "Buy It Now only",
            "type": "boolean",
            "description": "Only lots carrying a Buy It Now price — a small share of inventory.",
            "default": false
          },
          "excludeOnApproval": {
            "title": "Exclude \"On Approval\" lots",
            "type": "boolean",
            "description": "Skip lots needing seller approval after the sale; these often do not sell first time. Same as Copart's \"Pure Sale\" featured filter.",
            "default": false
          },
          "classicsOnly": {
            "title": "Classics only (25+ years)",
            "type": "boolean",
            "description": "Only vehicles at least 25 model years old, using Copart's own Classics clause.",
            "default": false
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "auction_date",
              "odometer_asc",
              "odometer_desc",
              "year_desc",
              "year_asc",
              "current_bid_asc",
              "current_bid_desc",
              "make",
              "lot_number"
            ],
            "type": "string",
            "description": "Mirrors Copart's own \"Sort by\" dropdown. Leave empty to keep each site's default ordering."
          },
          "outputFormat": {
            "title": "Row detail",
            "enum": [
              "full",
              "compact",
              "minimal"
            ],
            "type": "string",
            "description": "<b>Full</b> (default) keeps every column — around 130 per lot.<br><br><b>Compact</b> keeps the buying decision: what the vehicle is, damage, title, condition, pricing, VIN, drivetrain, yard, coordinates and both image lists, without the long tail of flags and internal ids.<br><br><b>Minimal</b> is the headline only: lot, link, year/make/model, odometer, primary damage, current bid, sale date, yard and thumbnail.<br><br>VIN-decode and monitor columns are kept in every profile, since you only get those by asking for them. Smaller rows also mean smaller webhook payloads.",
            "default": "full"
          },
          "monitorMode": {
            "title": "🔔 Monitor mode — report only new and changed lots",
            "type": "boolean",
            "description": "Remembers which lots this search already returned, so a scheduled run gives you only what is <b>new</b> or what <b>moved</b> (price, sale date, sale status, odometer, damage, title, run condition) instead of the same inventory every time. Unchanged lots are skipped before they are saved, so you are not charged for them.<br><br>Each row gains <code>monitorStatus</code> (<code>new</code> or <code>updated</code>) and <code>monitorFirstSeenAt</code>.<br><br><b>The first run reports everything</b> — it has nothing to compare against yet. From the second run on you get the difference.<br><br><b>Paid plans only for the memory part.</b> Cross-run state needs stored data, and Apify scheduling is itself a paid feature. On a free run this still works but behaves as a first run every time, returning every match.",
            "default": false
          },
          "monitorIncludeUpdated": {
            "title": "Include changed lots, not just new ones",
            "type": "boolean",
            "description": "On (default): report both brand-new lots and ones whose price or condition changed. Off: only brand-new lots, which is the cheapest way to watch a large search.",
            "default": true
          },
          "monitorStateKey": {
            "title": "Monitor state name (optional)",
            "type": "string",
            "description": "By default each distinct search keeps its own memory, keyed by its URLs. Set a name here to pin that memory explicitly — useful when several schedules share one saved input, or when you want to reset a watch by pointing it at a fresh name."
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "Every reported lot is POSTed here in batches of 50, after it is safely saved to the dataset — a webhook outage can never cost you the data. Failed batches are retried three times with backoff; anything still undelivered is written to the run's key-value store as <code>webhook-undelivered</code> rather than dropped."
          },
          "webhookSecret": {
            "title": "Webhook signing secret (optional)",
            "type": "string",
            "description": "When set, each delivery carries <code>X-Copart-Signature: sha256=&lt;hmac&gt;</code> computed over the exact request body, so your endpoint can verify the call really came from this run."
          },
          "webhookFormat": {
            "title": "Webhook payload format",
            "enum": [
              "json",
              "slack",
              "discord"
            ],
            "type": "string",
            "description": "<b>JSON</b> sends the full lot records — the one to use for Make, n8n, Zapier or your own endpoint. <b>Slack</b> and <b>Discord</b> send a readable one-line-per-lot message that those two accept directly as an incoming webhook.",
            "default": "json"
          },
          "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}