{
  "openapi": "3.0.1",
  "info": {
    "title": "Standvirtual Scraper",
    "description": "[💰 $0.90 / 1K] Extract car listings from Standvirtual.com, Portugal's largest car marketplace — price, year, mileage, fuel, gearbox, make/model, seller, location, and photos. Search by make/model + filters, or paste a search URL.",
    "version": "1.0",
    "x-build-id": "qMT5Wsk36qQmcMBUz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~standvirtual-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-standvirtual-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/solidcode~standvirtual-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-standvirtual-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/solidcode~standvirtual-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-standvirtual-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": {
          "searchUrls": {
            "title": "Standvirtual search URLs",
            "type": "array",
            "description": "Paste one or more Standvirtual.com search-result URLs. Go to standvirtual.com, set your filters in the browser (make, model, price, year, fuel...), and copy the URL from the address bar. When provided, these are used directly and the filter fields below are ignored.",
            "items": {
              "type": "string"
            }
          },
          "make": {
            "title": "Make",
            "type": "string",
            "description": "Car manufacturer as shown on Standvirtual, e.g. 'BMW', 'Mercedes-Benz', 'Renault'. Leave empty for all makes. Ignored when search URLs are provided."
          },
          "model": {
            "title": "Model",
            "type": "string",
            "description": "Model as it appears in the Standvirtual URL — usually the variant designation, e.g. '320', 'C 220', 'Clio', 'Golf', '208'. A whole range also works ('Serie 3', 'Classe C') and returns every version in it. If Standvirtual doesn't recognise the model, the search is skipped and you are told why, rather than returning every car of that make. Leave empty for all models of the chosen make."
          },
          "fuelTypes": {
            "title": "Fuel type",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include cars with these fuel types. Leave empty for all fuel types. Every option matches a category Standvirtual actually publishes, and Hybrid covers both petrol and diesel hybrids. The rows come back with Standvirtual's own label, so Petrol reads 'Gasolina' and Electric reads 'Elétrico' in the data.",
            "items": {
              "type": "string",
              "enum": [
                "petrol",
                "diesel",
                "lpg",
                "hybrid",
                "plugin-hybrid",
                "electric",
                "cng",
                "hydrogen"
              ],
              "enumTitles": [
                "Petrol (Gasolina)",
                "Diesel",
                "LPG (GPL)",
                "Hybrid, petrol and diesel (Híbrido)",
                "Plug-in Hybrid (Híbrido Plug-In)",
                "Electric (Elétrico)",
                "CNG / natural gas (GNC)",
                "Hydrogen (Hidrogénio), rarely in stock"
              ]
            }
          },
          "bodyTypes": {
            "title": "Body type",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include cars with these body types. Leave empty for all body types. These are the nine body styles Standvirtual itself lists. The rows come back with its own label, so SUV reads 'SUV / TT' and Station wagon reads 'Carrinha' in the data.",
            "items": {
              "type": "string",
              "enum": [
                "mini",
                "city-cars",
                "compact",
                "sedan",
                "station-wagon",
                "suv",
                "coupe",
                "cabrio",
                "minivan"
              ],
              "enumTitles": [
                "Small city car (Pequeno citadino)",
                "City car (Citadino)",
                "Compact (Utilitário)",
                "Sedan",
                "Station wagon (Carrinha)",
                "SUV / Off-road (SUV / TT)",
                "Coupe (Coupé)",
                "Convertible (Cabrio)",
                "Minivan / MPV (Monovolume)"
              ]
            }
          },
          "gearbox": {
            "title": "Gearbox",
            "enum": [
              "any",
              "manual",
              "automatic"
            ],
            "type": "string",
            "description": "Transmission type. The rows come back with Standvirtual's own label: Automatic reads 'Automática' and Manual reads 'Manual' in the data.",
            "default": "any"
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "any",
              "dealer",
              "private"
            ],
            "type": "string",
            "description": "Only include listings from this kind of seller. 'Dealer / Business' keeps professional sellers; 'Private seller' keeps individuals. This is applied to each listing after it is fetched, so it never hides any results that match your other filters.",
            "default": "any"
          },
          "priceMin": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "maximum": 5000000,
            "type": "integer",
            "description": "Only include cars at or above this price, in euros. Leave empty for no lower bound."
          },
          "priceMax": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "maximum": 5000000,
            "type": "integer",
            "description": "Only include cars at or below this price, in euros. Leave empty for no upper bound."
          },
          "yearMin": {
            "title": "Minimum registration year",
            "minimum": 1900,
            "maximum": 2030,
            "type": "integer",
            "description": "Only include cars first registered in or after this year, e.g. 2018. Leave empty for no lower bound."
          },
          "yearMax": {
            "title": "Maximum registration year",
            "minimum": 1900,
            "maximum": 2030,
            "type": "integer",
            "description": "Only include cars first registered in or before this year. Leave empty for no upper bound."
          },
          "mileageMax": {
            "title": "Maximum mileage (km)",
            "minimum": 0,
            "maximum": 2000000,
            "type": "integer",
            "description": "Only include cars at or below this odometer reading, in kilometers, e.g. 150000. Leave empty for no upper bound."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "priceAsc",
              "priceDesc",
              "mileageAsc",
              "mileageDesc",
              "yearDesc",
              "yearAsc"
            ],
            "type": "string",
            "description": "How to order the search results before they are extracted. Ignored when search URLs already include a sort order. Standvirtual itself offers no registration-year order, so the two Year options are applied to the listings this run collects — set Maximum results to 0 (no limit) if you want every matching car ranked by year.",
            "default": "relevance"
          },
          "maxResults": {
            "title": "Max results per URL",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of listings to extract per search URL or search. This is an exact cap — you never get (or pay for) more than this number. Set to 0 for unlimited (gets every listing the search returns).",
            "default": 100
          },
          "includePhotos": {
            "title": "Fetch all photos for each listing",
            "type": "boolean",
            "description": "When on, the actor opens each listing to collect its full photo gallery (the 'images' field). When off, you get a single cover photo per listing. Turning this on roughly doubles the work per listing, so it takes longer and costs more — leave it off unless you need every photo.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}