{
  "openapi": "3.0.1",
  "info": {
    "title": "Otomoto.pl Scraper",
    "description": "Otomoto.pl Scraper Scrape vehicle listings from Otomoto.pl, including make, model, price, year, mileage, fuel type, transmission, location, seller details, specifications, images, and listing URLs. Export data to JSON, CSV, Excel, or XML for automotive research and market analysis.",
    "version": "0.2",
    "x-build-id": "TtVwRmIcgmlcCUYxk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scraper-engine~otomoto-pl-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scraper-engine-otomoto-pl-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/scraper-engine~otomoto-pl-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scraper-engine-otomoto-pl-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/scraper-engine~otomoto-pl-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scraper-engine-otomoto-pl-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": "🔗 Start URLs (listings or single adverts)",
            "type": "array",
            "description": "Full Otomoto.pl URLs. Accepts BOTH listing pages (https://www.otomoto.pl/osobowe/volvo) and individual advert pages (https://www.otomoto.pl/osobowe/oferta/volvo-xc-40-ID6IbdLC.html). When this list is non-empty it OVERRIDES every search filter below. An advert that has been sold or removed produces a free, uncharged row with the reason instead of silently disappearing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "🏷️ Vehicle Category",
            "enum": [
              "cars",
              "vans",
              "trucks",
              "motorcycles",
              "trailers",
              "campers",
              "construction",
              "agricultural",
              "parts"
            ],
            "type": "string",
            "description": "Otomoto section to search. English aliases are translated to the current Otomoto slug. Otomoto has moved several sections: motorcycles is now /motocykle-i-quady, trailers is /przyczepy, construction is /maszyny-budowlane, agricultural is /maszyny-rolnicze, and the standalone campers section was retired so campers are searched as the camper body type inside /dostawcze.",
            "default": "cars"
          },
          "query": {
            "title": "🔎 Brand / Model",
            "type": "string",
            "description": "Brand, or brand plus model separated by a space. Examples: \"volvo\" → /osobowe/volvo · \"bmw seria 3\" → /osobowe/bmw/seria-3 · \"mercedes-benz c-klasa\". Use Otomoto's own Polish model name. If Otomoto does not recognise the brand or the model it silently returns the whole catalogue, so the run FAILS instead and names the word it rejected.",
            "default": ""
          },
          "location": {
            "title": "📍 Location (town or voivodeship)",
            "type": "string",
            "description": "A Polish town (\"Warszawa\", \"Kraków\", \"Łódź\") or a voivodeship (\"Małopolskie\", \"Mazowieckie\"). Polish characters are handled. Otomoto applies its own default catchment radius around a town, so nearby localities are included; a voivodeship is an exact administrative match. If Otomoto cannot resolve the name it falls back to the whole country, so the run FAILS instead of returning national results labelled as a local search.",
            "default": ""
          },
          "sort": {
            "title": "↕️ Sort Order",
            "enum": [
              "relevance_web",
              "created_at:desc",
              "created_at:asc",
              "price:asc",
              "price:desc",
              "year:desc",
              "year:asc",
              "filter_float_price:asc",
              "filter_float_price:desc",
              "filter_float_mileage:asc",
              "created_at_first:desc"
            ],
            "type": "string",
            "description": "Otomoto silently ignores unrecognised sort keys, so several of these values are handled for you: \"Price: low → high\" and \"Price: high → low\" are remapped to Otomoto's working price keys, and the two Year orders plus \"Oldest first\" are applied CLIENT-SIDE over the rows this run collected because Otomoto publishes no server-side year sort. The run log always states which one was used.",
            "default": "relevance_web"
          },
          "minPrice": {
            "title": "💰 Min Price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum advert price in Polish złoty. Applied by Otomoto as search[filter_float_price:from]."
          },
          "maxPrice": {
            "title": "💸 Max Price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum advert price in Polish złoty. Applied by Otomoto as search[filter_float_price:to]."
          },
          "minProductionYear": {
            "title": "📅 Min Production Year",
            "minimum": 1900,
            "maximum": 2030,
            "type": "integer",
            "description": "Earliest production year, e.g. 2019. Applied by Otomoto as search[filter_float_year:from]."
          },
          "maxProductionYear": {
            "title": "📆 Max Production Year",
            "minimum": 1900,
            "maximum": 2030,
            "type": "integer",
            "description": "Latest production year, e.g. 2025. Applied by Otomoto as search[filter_float_year:to]."
          },
          "maxItems": {
            "title": "🔢 Max Items",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on how many adverts are scraped and charged. Free accounting rows for removed adverts are never charged. Default is 10.",
            "default": 10
          },
          "concurrency": {
            "title": "⚡ Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many Otomoto pages are fetched in parallel. Default is 10, maximum 20.",
            "default": 10
          },
          "requestDelay": {
            "title": "⏱️ Request Delay (seconds)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Extra pause before each request, in seconds, plus a small random jitter. Default is 0 (no extra delay).",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy settings",
            "type": "object",
            "description": "Leave disabled to run without a proxy. The actor still escalates to datacenter and then residential automatically if it is genuinely blocked.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}