{
  "openapi": "3.0.1",
  "info": {
    "title": "OLX Global $1💰 All in One URL | Search | Listings Data",
    "description": "From $1/1K. Fast OLX scraper across 9 countries, including Poland, Romania, Portugal, Ukraine, Bulgaria, Kazakhstan, Uzbekistan, India, and Brazil. Extract structured listing data via search or URL with support for pagination and multi-market coverage.",
    "version": "1.0",
    "x-build-id": "bZa65kLzQVkg9dSA1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~olx-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-olx-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~olx-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-olx-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~olx-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-olx-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": "Search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose how to find listings. Only fields belonging to the chosen mode are used.",
            "default": "search"
          },
          "urls": {
            "title": "URLs (URL mode only)",
            "type": "array",
            "description": "OLX search-result URLs to scrape. Each URL auto-paginates forward until Maximum Pages or Maximum Listings is reached. Country is auto-detected from each URL. Ignored in Search mode. Example: https://www.olx.pl/motoryzacja/samochody/bmw/?search%5Bfilter_float_price%3Afrom%5D=10000",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "pl",
              "ro",
              "pt",
              "ua",
              "bg",
              "kz",
              "uz",
              "in",
              "br"
            ],
            "type": "string",
            "description": "Country to search. Each country runs on the local OLX site (olx.pl, olx.ro, etc.). India runs on a separate API endpoint with the same output schema. (Search mode only — ignored in URL mode.)",
            "default": "pl"
          },
          "query": {
            "title": "Search query (free text)",
            "type": "string",
            "description": "Free-text search keyword (e.g. \"BMW X5\", \"iPhone 15\", \"apartment Warsaw\"). Combined with category and city filters when present. Leave empty to browse a category without keyword filtering."
          },
          "categoryId": {
            "title": "Category ID",
            "minimum": 1,
            "type": "integer",
            "description": "OLX numeric category ID. Optional. Examples (Poland): 1605=Apartments, 5=Auto parts, 84 (India)=Cars. To find a category ID, browse OLX, open the category page, and look at the URL or the metadata."
          },
          "cityId": {
            "title": "City ID (Pattern A only)",
            "minimum": 1,
            "type": "integer",
            "description": "Numeric city ID for filtering by city (PL, RO, PT, UA, BG, KZ, UZ). Look up city IDs by inspecting an OLX search URL after picking a city. Ignored for India (use locationId instead)."
          },
          "locationId": {
            "title": "Location ID (India only)",
            "minimum": 1,
            "type": "integer",
            "description": "Numeric location ID for olx.in (state/city). Example: 2001173=Tamil Nadu. Ignored for non-India searches."
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound for price (in the country's local currency). Optional."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound for price (in the country's local currency). Optional."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "default",
              "created_desc",
              "created_asc",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "How to order results. Default uses the country's relevance ranking.",
            "default": "default"
          },
          "extraFilters": {
            "title": "Extra filters (advanced passthrough)",
            "type": "object",
            "description": "Optional escape hatch for site-specific filters not exposed above. Keys are passed verbatim into the request URL. Examples (Pattern A countries): {\"filter_enum_make\": [\"bmw\"], \"filter_enum_fuel\": [\"diesel\"], \"filter_float_year:from\": 2018}. Use sparingly; keys are not validated."
          },
          "fetchDetails": {
            "title": "Fetch full details per listing",
            "type": "boolean",
            "description": "Fetch each listing's detail endpoint for the freshest revision, complete description, and full attribute list. Adds 1 extra HTTP call per listing.",
            "default": false
          },
          "maxListings": {
            "title": "Maximum listings",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after scraping this many listings across the whole run. 0 = unlimited (capped only by maxPages).",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Per-search page cap. Each page returns ~10 (Pattern A) or ~40 (India) listings. Leave empty to walk every result page (stopped only by maximum listings, end of results, or the site's own last-page signal). Pattern A countries cap server-side at offset 1000 — narrow your filters to see further."
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID (or its dataset ID) to continue a full-catalogue scrape without re-scraping listings already saved. Already-seen listings (by listing ID) are skipped; new ones are appended. Leave empty for a fresh run. For recurring daily/weekly monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring of the same search. The first run returns every matching listing as NEW. Later runs return only NEW, UPDATED, and REAPPEARED listings by default. Turn on \"Emit unchanged\" or \"Emit expired\" below only when you also want those listings returned (and billed). State is kept separately per country/query/filters/URL and per fetchDetails setting — 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 (optional, 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 let the actor derive a key automatically from the country/query/filters/URL and fetchDetails settings — different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings (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 specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings (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 search — not when Maximum listings capped it, a page failed to load, or Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Default Apify Datacenter works on the free tier and is sufficient for 8 of 9 countries (PL, RO, PT, UA, BG, KZ, UZ, IN). For Brazil (olx.com.br) you MUST switch the proxy field to Apify Residential with country=BR — the upstream edge rejects datacenter IPs there. Residential also helps if you hit transient rate limits on a high-traffic country. Custom proxy URLs are accepted as well."
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. 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 item 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 items 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}