{
  "openapi": "3.0.1",
  "info": {
    "title": "Standvirtual Car Listings Scraper",
    "description": "Search and export every car listing on Standvirtual, Portugal's used-car marketplace. Filter by make, model, year, price, mileage, fuel, drivetrain, body type, seats and dealer terms, or describe the car you want in plain language and let AI score every advert.",
    "version": "0.0",
    "x-build-id": "fprYyZwjtQsrI4XCO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/marielise.dev~standvirtual-car-listings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-marielise.dev-standvirtual-car-listings-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/marielise.dev~standvirtual-car-listings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-marielise.dev-standvirtual-car-listings-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/marielise.dev~standvirtual-car-listings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-marielise.dev-standvirtual-car-listings-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": {
          "describe": {
            "title": "Describe the car you want",
            "type": "string",
            "description": "Say what you are after in plain language, e.g. 'a rugged 4x4 with good reliability under 25000' or 'small cheap automatic for city driving'. Claude turns it into Standvirtual filters, picks the specific vehicles worth searching for, and scores every advert against what you asked. Runs on managed Claude access by default and is billed as two pay-per-event charges; supply your own Anthropic API key below to pay Anthropic directly instead. Leave empty to search with the fields below."
          },
          "anthropicApiKey": {
            "title": "Anthropic API key",
            "type": "string",
            "description": "Optional. Leave empty and the plain-language search runs on our managed Claude access, billed as two pay-per-event charges: one for planning the search and one per 25 adverts scored. Supply your own key from console.anthropic.com to pay Anthropic directly instead, and neither AI event is charged. Your key is used only for this run's planning and scoring."
          },
          "anthropicWorkspaceId": {
            "title": "Anthropic workspace ID",
            "type": "string",
            "description": "Only needed if your Anthropic key is identity-linked, which the API signals with 'anthropic-workspace-id is required'. Copy the workspace ID from console.anthropic.com. Leave empty for a standard API key."
          },
          "aiRanking": {
            "title": "Score and rank the results",
            "type": "boolean",
            "description": "Scores each advert 0-100 against your description and sorts the best match first, adding 'aiScore' and 'aiReason' to every record. This is where reliability, running costs and trim fit get judged, none of which Standvirtual can filter on. Costs one Claude request per 25 adverts, and the first 200 adverts are scored.",
            "default": true
          },
          "make": {
            "title": "Make",
            "type": "string",
            "description": "Manufacturer to search for, e.g. 'Porsche', 'Volkswagen', 'BMW'. Matched against Standvirtual's own make list, so accents and casing do not matter. Leave every vehicle field empty to run a demo search."
          },
          "model": {
            "title": "Model",
            "type": "string",
            "description": "Model to search for, e.g. '911', 'Golf', 'Série 3'. Requires Make. 'Serie 3', 'Série 3' and 'serie-3' all resolve to the same model."
          },
          "variant": {
            "title": "Variant / trim",
            "type": "string",
            "description": "Optional trim, e.g. 'Carrera S', '320d', 'GTI'. When Standvirtual publishes a matching sub-model the filter is applied server-side; otherwise the variant is matched against each advert's own version and title."
          },
          "yearMin": {
            "title": "Year from",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest year of first registration."
          },
          "yearMax": {
            "title": "Year to",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest year of first registration."
          },
          "priceMin": {
            "title": "Min price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum asking price in euros."
          },
          "priceMax": {
            "title": "Max price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum asking price in euros."
          },
          "mileageMax": {
            "title": "Max mileage (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum odometer reading in kilometres."
          },
          "fuelType": {
            "title": "Fuel type",
            "enum": [
              "any",
              "petrol",
              "diesel",
              "electric",
              "hybrid",
              "lpg"
            ],
            "type": "string",
            "description": "Fuel type. 'Hybrid' covers petrol hybrids, diesel hybrids and plug-in hybrids. 'LPG / CNG' covers both gas fuels.",
            "default": "any"
          },
          "gearbox": {
            "title": "Gearbox",
            "enum": [
              "any",
              "manual",
              "automatic"
            ],
            "type": "string",
            "description": "Transmission type.",
            "default": "any"
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "any",
              "used",
              "new"
            ],
            "type": "string",
            "description": "New or used vehicles.",
            "default": "any"
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "any",
              "private",
              "dealer"
            ],
            "type": "string",
            "description": "Private sellers or professional dealers.",
            "default": "any"
          },
          "bodyType": {
            "title": "Body type",
            "enum": [
              "any",
              "suv",
              "compact",
              "combi",
              "city-car",
              "sedan",
              "coupe",
              "cabrio",
              "minivan"
            ],
            "type": "string",
            "description": "Body shape. Standvirtual publishes no drivetrain filter at all, so 'SUV / off-road' is the closest available stand-in for a 4x4 search: it is where the site files off-roaders and pickups. It selects a shape, not a drivetrain, so two-wheel-drive SUVs match it too.",
            "default": "any"
          },
          "drivetrain": {
            "title": "Drivetrain",
            "enum": [
              "any",
              "awd",
              "front",
              "rear"
            ],
            "type": "string",
            "description": "Driven wheels. 'All-wheel drive' is the real 4x4 filter: it returns cars the manufacturer catalogue records as Tracção Integral, so quattro, xDrive, 4Motion, 4MATIC and All4 all match. Standvirtual only fills this field from its catalogue, so roughly a third of adverts carry no drivetrain and are excluded whenever this filter is set.",
            "default": "any"
          },
          "seats": {
            "title": "Seats",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Exact seat count, as Standvirtual files it (Lotação). Common values are 2, 4, 5, 7 and 9; a 7 finds the people carriers and three-row SUVs."
          },
          "doors": {
            "title": "Doors",
            "minimum": 2,
            "maximum": 6,
            "type": "integer",
            "description": "Exact door count. Standvirtual counts the tailgate, so a five-door hatchback is 5 and a coupe is 2 or 3."
          },
          "fuelPriceEurPerLitre": {
            "title": "Fuel price (EUR per litre)",
            "minimum": 0.1,
            "maximum": 10,
            "type": "number",
            "description": "Used to estimate running costs. Leave empty to use the Portuguese average for the week of 17-23 August 2026: 1.954 for petrol, 2.026 for diesel. Pump prices move weekly, so set your own for an up-to-date figure."
          },
          "annualKm": {
            "title": "Kilometres per year",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Your expected annual distance, used for the yearly fuel estimate. Defaults to 15000, roughly the Portuguese average.",
            "default": 15000
          },
          "financingAvailable": {
            "title": "Financing available",
            "type": "boolean",
            "description": "Only adverts where the seller offers credit (Possibilidade de financiamento). About 24,000 of roughly 40,000 listings qualify.",
            "default": false
          },
          "certifiedDealer": {
            "title": "ACAP-certified dealer only",
            "type": "boolean",
            "description": "Only dealers certified by ACAP, Portugal's automotive trade association. A much smaller and better-vetted pool: around 1,965 listings.",
            "default": false
          },
          "acceptsTradeIn": {
            "title": "Accepts a trade-in",
            "type": "boolean",
            "description": "Only sellers who take your current car as part payment (Aceita retoma). Around 19,800 listings.",
            "default": false
          },
          "vatDeductible": {
            "title": "VAT deductible",
            "type": "boolean",
            "description": "Only adverts where the VAT can be reclaimed (IVA dedutivel), which matters when buying through a company. Around 8,475 listings.",
            "default": false
          },
          "location": {
            "title": "District",
            "type": "string",
            "description": "Portuguese district to search in, e.g. 'Lisboa', 'Porto', 'Braga'. Standvirtual filters by district rather than by city, so a city name only works when it matches its district capital. Unrecognised names are reported in the log and the filter is dropped. The island regions (Açores, Madeira) are not filterable."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "price-asc",
              "price-desc",
              "mileage-asc",
              "mileage-desc"
            ],
            "type": "string",
            "description": "Result order. Combine 'Lowest price first' with a max results cap to sample the cheap end of a market.",
            "default": "relevance"
          },
          "maxResults": {
            "title": "Max listings to return",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Maximum number of listings to collect. This is the main cost lever: the run charges per listing returned. A run that finds nothing writes no records, so no per-listing charges apply, though the run-start charge always does. Standvirtual serves 32 adverts per page, so this rounds up to whole pages.",
            "default": 100
          },
          "enrichFromDetailPages": {
            "title": "Fetch colour, full photos and descriptions",
            "type": "boolean",
            "description": "Opens each advert's own page to read the exterior colour, the complete photo set and the full seller description, none of which Standvirtual puts on a search card. Costs one extra request per listing, so a large run takes noticeably longer. Leave off for a fast run where 'colour' is null, 'description' is the short teaser and 'images' holds the thumbnail only.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}