{
  "openapi": "3.0.1",
  "info": {
    "title": "Auto.ru Scraper - Car Listings, Prices, Checks & Dealers",
    "description": "Scrape Auto.ru car listings: search by make, model, year, price, mileage, body, engine, gearbox, drive, seller and region, or paste result, dealer and listing links. Get price history, vehicle checks, owners, valuation, dealer details and photos, plus price-change tracking.",
    "version": "0.1",
    "x-build-id": "Tdv6ab3qSF0nIZO8e"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~auto-ru-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-auto-ru-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/abotapi~auto-ru-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-auto-ru-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/abotapi~auto-ru-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-auto-ru-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url",
              "listing"
            ],
            "type": "string",
            "description": "Choose 'search' to find listings with the filters below, 'url' to scrape pasted links, or 'listing' to read listings by their key.",
            "default": "search"
          },
          "vehicles": {
            "title": "Makes and models",
            "type": "array",
            "description": "Write the make, and optionally the model, the way they appear in auto.ru web addresses: bmw, bmw x5, vaz vesta, land_rover discovery. A generation number from the address may follow the model. One search per entry. Leave empty for every make. Read only in search mode.",
            "default": [
              "bmw x5"
            ],
            "items": {
              "type": "string"
            }
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "any",
              "new",
              "used"
            ],
            "type": "string",
            "description": "New cars, used cars, or both.",
            "default": "any"
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Cities or regions to search, one search each, for example Moscow, Saint Petersburg, Kazan or Sverdlovsk oblast. Latin names work for the biggest places; any other place can be written in Russian, for example Тверь. Leave empty for all of Russia (the site would otherwise pick the region of the connecting address).",
            "items": {
              "type": "string"
            }
          },
          "regionRadiusKm": {
            "title": "Search radius around a city (km)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How far around each city in Regions to look, from 0 (the city itself) to 1000. Leave empty for the site's own default (200 km for most cities). Ignored for regions that are whole oblasts or republics."
          },
          "dealerIds": {
            "title": "Dealer ids",
            "type": "array",
            "description": "Return the stock of these dealers (the numeric dealer id is a field of every dealer row, and a dealer page link works in URL mode). A dealer search ignores the region, radius and make settings.",
            "items": {
              "type": "string"
            }
          },
          "yearFrom": {
            "title": "Year from",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest model year."
          },
          "yearTo": {
            "title": "Year to",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest model year."
          },
          "priceFrom": {
            "title": "Price from (RUB)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price in Russian roubles."
          },
          "priceTo": {
            "title": "Price to (RUB)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price in Russian roubles."
          },
          "mileageFrom": {
            "title": "Mileage from (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest mileage in kilometres."
          },
          "mileageTo": {
            "title": "Mileage to (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest mileage in kilometres."
          },
          "engineVolumeFrom": {
            "title": "Engine volume from (cm³)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest engine displacement in cubic centimetres, for example 2000. The site compares it rounded to a tenth of a litre, so 1995 counts as 2000."
          },
          "engineVolumeTo": {
            "title": "Engine volume to (cm³)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest engine displacement in cubic centimetres. The site compares it rounded to a tenth of a litre."
          },
          "powerFrom": {
            "title": "Power from (hp)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest engine power in horsepower."
          },
          "powerTo": {
            "title": "Power to (hp)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest engine power in horsepower."
          },
          "bodyTypes": {
            "title": "Body types",
            "type": "array",
            "description": "Only these body types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "SEDAN",
                "HATCHBACK_3_DOORS",
                "HATCHBACK_5_DOORS",
                "LIFTBACK",
                "WAGON",
                "COUPE",
                "CABRIO",
                "ALLROAD_3_DOORS",
                "ALLROAD_5_DOORS",
                "MINIVAN",
                "PICKUP",
                "VAN",
                "LIMOUSINE"
              ],
              "enumTitles": [
                "Sedan",
                "Hatchback 3 doors",
                "Hatchback 5 doors",
                "Liftback",
                "Station wagon",
                "Coupe",
                "Convertible",
                "SUV 3 doors",
                "SUV 5 doors",
                "Minivan",
                "Pickup",
                "Van",
                "Limousine"
              ]
            }
          },
          "engineTypes": {
            "title": "Engine types",
            "type": "array",
            "description": "Only these fuel types. 'Gas equipment' returns cars fitted with a gas system (LPG). Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "GASOLINE",
                "DIESEL",
                "HYBRID",
                "ELECTRO",
                "LPG"
              ],
              "enumTitles": [
                "Gasoline",
                "Diesel",
                "Hybrid",
                "Electric",
                "Gas equipment (LPG)"
              ]
            }
          },
          "transmissions": {
            "title": "Transmissions",
            "type": "array",
            "description": "Only these gearboxes. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "AUTOMATIC",
                "MECHANICAL",
                "ROBOT",
                "VARIATOR"
              ],
              "enumTitles": [
                "Automatic",
                "Manual",
                "Robotised",
                "Variator (CVT)"
              ]
            }
          },
          "driveTypes": {
            "title": "Drive types",
            "type": "array",
            "description": "Only these drive layouts. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "FORWARD_CONTROL",
                "REAR_DRIVE",
                "ALL_WHEEL_DRIVE"
              ],
              "enumTitles": [
                "Front-wheel drive",
                "Rear-wheel drive",
                "All-wheel drive"
              ]
            }
          },
          "sellerTypes": {
            "title": "Seller types",
            "type": "array",
            "description": "Private sellers, dealers, or both (leave empty).",
            "items": {
              "type": "string",
              "enum": [
                "PRIVATE",
                "COMMERCIAL"
              ],
              "enumTitles": [
                "Private seller",
                "Dealer"
              ]
            }
          },
          "steeringWheel": {
            "title": "Steering wheel",
            "enum": [
              "any",
              "LEFT",
              "RIGHT"
            ],
            "type": "string",
            "description": "Left-hand or right-hand drive.",
            "default": "any"
          },
          "maxOwners": {
            "title": "Max previous owners",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Only cars with at most this many owners in the vehicle title (1, 2 or 3). Leave empty for any number."
          },
          "includeDamaged": {
            "title": "Include damaged cars",
            "type": "boolean",
            "description": "Off by default, like the site: cars the seller marks as damaged or not running are left out. Turn on to include them.",
            "default": false
          },
          "includeNotCleared": {
            "title": "Include cars not cleared through customs",
            "type": "boolean",
            "description": "Off by default, like the site. Turn on to include cars whose customs clearance is missing.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "oldest",
              "price_asc",
              "price_desc",
              "year_desc",
              "year_asc",
              "mileage_asc",
              "mileage_desc"
            ],
            "type": "string",
            "description": "Order of the results. A sort order written into a pasted result link wins over this setting.",
            "default": "relevance"
          },
          "urls": {
            "title": "Links",
            "type": "array",
            "description": "auto.ru links to scrape directly. A result link carries its own make, model, region and filters, and they win over the settings above. A dealer link returns that dealer's stock. A listing link reads that listing. Read only in url mode.",
            "default": [
              "https://auto.ru/moskva/cars/bmw/x5/used/?year_from=2018&sort=price-asc",
              "https://auto.ru/diler/cars/all/avilon_tenet_moskva/",
              "https://auto.ru/cars/used/sale/honda/vezel/1160165890-6216410f/"
            ],
            "items": {
              "type": "string"
            }
          },
          "listingIds": {
            "title": "Listing keys",
            "type": "array",
            "description": "Listing keys as they appear at the end of a listing link (the number, a dash and eight characters, for example 1160165890-6216410f), or whole listing links. Read only in listing mode.",
            "default": [
              "1160165890-6216410f"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Read each listing's page",
            "type": "boolean",
            "description": "Search and url scopes: also read every listing's own page for the seller's description, the view and favourite counters and the site's condition grade. This is one extra request per listing and carries a per-listing surcharge. Listing mode always reads the page.",
            "default": false
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of listings to return across the whole run, EXPIRED rows from Incremental mode included. This is the run's cap. Use 0 for the maximum of 100000 listings per run. The site shows at most 99 result pages (3663 listings) per search, so use several makes, models or regions to go beyond that.",
            "default": 20
          },
          "maxPages": {
            "title": "Max result pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of result pages to read per make, region or link. Each page carries up to 37 listings. 0 means as many as the search has, up to the site's limit of 99.",
            "default": 0
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Connection used for every request. Leave the default (residential, any country). Apify free plans do not include proxies, so a free-plan run falls back to a backup connection and may return less.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large pull without returning or charging for listings already collected there. Use this after an interrupted run. For recurring monitoring of the same scope, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching listing as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED listings, which makes it a cheap way to watch price drops. What is compared: price, discount, availability, status, specification, ownership and vehicle-check fields, seller, description, equipment and price history. What is excluded by default (still returned in the row, never a change): scrape timestamps, the listing's rank and page, where it was found, view and favourite counters, days on sale and the last-edited time, exchange-rate conversions (price in dollars and euros), the site's own market-price estimates, dealer rating and condition grade, the rotating labels and badges, and photo links. Equipment and phone lists are compared regardless of order. 'Changes to watch' narrows this to price and availability only. Turn on 'Emit unchanged' or 'Emit expired' only when you also want those rows returned (and billed). State is kept separately for each scope and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the scope and filter settings, so two different scopes never mix state."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want a full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked scope without a page that could not be read, never when Max listings or the site's 99-page limit capped it, and never when Resume was used. A sold or removed listing counts as missing; consider 'Expire after missed scans' above 1 so a brief gap does not expire a listing. EXPIRED rows count against Max listings: a run returns at most the room left under it, and the rest are returned on a later complete run. This returns, and bills, extra rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "changeScope": {
            "title": "Changes to watch (incremental mode only)",
            "enum": [
              "all",
              "priceAndStock"
            ],
            "type": "string",
            "description": "All fields (default): any change to the compared listing data marks a listing UPDATED. Price and availability only: just the asking price, the dealer discount, the availability, the status and the price history, so description, equipment or ownership edits never produce a billable UPDATED row. Changing this never starts a new baseline: the existing saved state is kept (under an automatic or a named State key) and each stored listing is simply compared under the new setting.",
            "default": "all"
          },
          "compactUpdates": {
            "title": "Compact UPDATED rows (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. When on, UPDATED and EXPIRED rows are slim: ids, link, title, current price and availability, plus priceChanges (old and new value of each field that moved) and variantChanges (price-history entries ADDED, REMOVED or CHANGED). NEW rows stay full. A compact row does not carry listing-page detail fields, so no detail charge applies to it.",
            "default": false
          },
          "expireAfterMissedScans": {
            "title": "Expire after missed scans (incremental mode only)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Used with 'Emit expired'. A listing is marked EXPIRED only after it was missing from this many CONSECUTIVE complete scans (default 1). Listings come and go as sellers publish and sell, so a value of 2 or more avoids false expiries.",
            "default": 1
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names that must not count as a change, for example description or equipment. Use a dotted path to ignore a key inside every element of a list, for example priceHistory.price. Ignored fields are still returned in the row. Rank, where the listing was found, counters, exchange-rate conversions, the site's estimates and photo links are already ignored by default. Changing this list never starts a new baseline: the saved state is kept and each stored listing is re-compared under the new list, so no listing comes back as NEW.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per listing; other connectors get a best-effort write or digest. Each connector receives a condensed summary per listing, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which listing pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on listings written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}