{
  "openapi": "3.0.1",
  "info": {
    "title": "OLX New Listing Alert: Watch a Saved Search, No Login",
    "description": "OLX new listing alert: schedule a keyword search and get back only the ads posted since the last run, one row each, for olx.pl, olx.pt, olx.ro, olx.bg and olx.ua. The first run seeds silently so day one is not a flood. No login. A run with no new ads is free.",
    "version": "1.0",
    "x-build-id": "ZVqQSt0TR2yEvpgnz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~olx-new-listing-alert/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-olx-new-listing-alert",
        "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/accountable_eel~olx-new-listing-alert/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-olx-new-listing-alert",
        "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/accountable_eel~olx-new-listing-alert/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-olx-new-listing-alert",
        "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": [
          "searches"
        ],
        "properties": {
          "searches": {
            "title": "OLX searches to watch for new ads",
            "type": "array",
            "description": "One search per line: any keywords, e.g. \"iphone 14\", \"rower gorski\", \"mieszkanie warszawa\". Each line becomes a watchlist: the first run remembers what is already on OLX, and every run after it returns only the ads posted since. No login required. Pick the OLX country below (Poland by default). Accepted formats: iphone, rower gorski, mieszkanie warszawa. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "OLX country",
            "enum": [
              "pl",
              "pt",
              "ro",
              "bg",
              "ua"
            ],
            "type": "string",
            "description": "Which OLX country site to search. Defaults to olx.pl (Poland), so existing tasks and integrations that don't set this keep working exactly as before.",
            "default": "pl"
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Title must contain (optional)",
            "type": "array",
            "description": "Optional. One keyword per line, case-insensitive. A listing is kept only if its title contains at least one of these. Leave empty to keep every title.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Title must not contain (optional)",
            "type": "array",
            "description": "Optional. One keyword per line, case-insensitive. A listing whose title contains any of these is dropped. Leave empty to drop nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "minPrice": {
            "title": "Minimum price (local currency)",
            "type": "integer",
            "description": "Optional. Drop listings priced below this, in that country's own currency (PLN, EUR, RON, BGN, UAH). Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price (local currency)",
            "type": "integer",
            "description": "Optional. Drop listings priced above this, in that country's own currency (PLN, EUR, RON, BGN, UAH). Leave empty for no maximum."
          },
          "cities": {
            "title": "Cities to keep (optional)",
            "type": "array",
            "description": "Optional. One city or region name per line, case-insensitive, matched as a \"contains\" against the listing's own city/region. Leave empty to keep every location. Applied while paging, so the actor reads further pages until it has enough matches.",
            "items": {
              "type": "string"
            }
          },
          "maxListingsPerQuery": {
            "title": "Most ads to check per search",
            "type": "integer",
            "description": "OLX returns up to 40 listings per page; this actor pages further if you ask for more. This is how deep the watchlist looks, not how many rows you get back: you only pay for the ads that are actually new.",
            "default": 52
          },
          "deltaMode": {
            "title": "Only return ads posted since the last run",
            "type": "boolean",
            "description": "On by default: this is what the actor is for, and the buyer-facing replacement for OLX's own saved-search email alerts. An ad counts as new when its OLX listing ID has not been returned by a previous run of the same watchlist. Already-seen listings are dropped before you are billed, so a quiet run costs only the start fee. The first run banks what it finds silently (see \"Seed silently\" below) and alerting starts from the second run. Turn this off to get every matching listing instead, like an ordinary search.",
            "default": true
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and we derive one from this run's country and search settings, so two schedules with different settings keep separate memories. Type your own name to keep one memory across a settings change, or to have two schedules share one; a shared name still keeps different countries' memories apart.",
            "default": ""
          },
          "alertOnNew": {
            "title": "Alert on new listings",
            "type": "boolean",
            "description": "On by default, and the whole point of this actor: ads whose OLX listing ID this watchlist has never seen before.",
            "default": true
          },
          "skipFirstRun": {
            "title": "Seed silently (no rows on the first run)",
            "type": "boolean",
            "description": "On by default. The first run of a watchlist would otherwise return every current listing as \"new\" and bill you for all of them. With this on it banks them silently and starts alerting from the second run. Turn it off if you want the current state of the search as your first result set, and are happy to pay for it.",
            "default": true
          },
          "alertOnPriceDrop": {
            "title": "Also return price drops on ads you have already seen",
            "type": "boolean",
            "description": "Off by default, so your results stay new ads only. Turn it on to also get already-seen listings whose price fell by at least the percentage below, each marked price-drop rather than new. They are billed like any other row.",
            "default": false
          },
          "minPriceDropPct": {
            "title": "Minimum price drop to count as an alert (%)",
            "type": "integer",
            "description": "Only used when \"Also return price drops\" above is on. A listing must drop by at least this percentage since it was last seen to be reported.",
            "default": 5
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "searchQuery",
                "listingCount",
                "totalAvailable",
                "truncated",
                "newCount",
                "priceDropCount",
                "goneCount",
                "monitorStatus",
                "sellThroughRate",
                "medianPrice",
                "medianPriceCurrency",
                "listings",
                "listingId",
                "title",
                "price",
                "currency",
                "city",
                "region",
                "country",
                "isBusiness",
                "sellerType",
                "sellerHash",
                "isPromoted",
                "createdAt",
                "postedAt",
                "changeType",
                "isNew",
                "previousPrice",
                "priceDropPct",
                "firstSeenAt",
                "lastSeenAt",
                "daysListed",
                "url",
                "listingStatus"
              ],
              "enumTitles": [
                "Search",
                "New ads returned",
                "Total matching on OLX",
                "More results were available",
                "New listings this run",
                "Price drops this run",
                "Gone since last run (delisted, most often sold)",
                "Monitoring status (quiet / seeded runs)",
                "Sell-through rate, watchlist lifetime (0-1)",
                "Median price of the search (local currency)",
                "Currency of the median price",
                "All new ads found (full list)",
                "OLX listing ID",
                "Title",
                "Price (local currency)",
                "Currency",
                "City",
                "Region",
                "OLX country",
                "Business seller",
                "Seller type (business / private)",
                "Seller code (hashed, no name)",
                "Promoted / sponsored listing",
                "Published",
                "Posted (OLX timestamp)",
                "new / price-drop / gone / seen",
                "Is this listing new?",
                "Previous price",
                "Price drop %",
                "First seen on a run",
                "Last seen on a run",
                "Days listed (first to last seen)",
                "Listing link",
                "Status (marketplace-filters standard: available/reserved/sold)"
              ]
            },
            "default": [
              "searchQuery",
              "listingCount",
              "totalAvailable",
              "truncated",
              "newCount",
              "priceDropCount",
              "goneCount",
              "monitorStatus",
              "sellThroughRate",
              "medianPrice",
              "medianPriceCurrency",
              "listings",
              "listingId",
              "title",
              "price",
              "currency",
              "city",
              "region",
              "country",
              "isBusiness",
              "sellerType",
              "sellerHash",
              "isPromoted",
              "createdAt",
              "postedAt",
              "changeType",
              "isNew",
              "previousPrice",
              "priceDropPct",
              "firstSeenAt",
              "lastSeenAt",
              "daysListed",
              "url",
              "listingStatus"
            ]
          },
          "expandRows": {
            "title": "One row per listing (recommended) — turn off for one row per search instead",
            "type": "boolean",
            "description": "When on, each listing found gets its own row instead of being grouped under its search. You're still only charged once per search, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}