{
  "openapi": "3.0.1",
  "info": {
    "title": "Kleinanzeigen Scraper - Listings, New Ads & Price Drops",
    "description": "For resellers, deal alerts and price trackers: Kleinanzeigen.de listings by search term, category, city or postcode and price range, with price, VB, postcode, date, photo, shipping and PRO shop. Monitor returns only really new ads and price drops, never old ads pushed back to the top.",
    "version": "0.1",
    "x-build-id": "9vBmtaf6o8v1kkhpV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~kleinanzeigen-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-kleinanzeigen-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/neverempty~kleinanzeigen-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-kleinanzeigen-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/neverempty~kleinanzeigen-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-kleinanzeigen-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": {
          "searchQueries": {
            "title": "Search terms",
            "type": "array",
            "description": "What you would type into the Kleinanzeigen search box, for example iphone 15, rennrad, kühlschrank, lego technic. Each search term is searched in each location and category. Leave Search terms, Categories, Locations and Search URLs all empty to run the example search fahrrad in Berlin.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Optional. Kleinanzeigen category numbers or names, for example 217 (Fahrräder & Zubehör), 173 (Handy & Telekom), 216 (Autos), 88 (Wohnzimmer), 23 (Spielzeug). A category alone (without a search term) lists everything new in it. The README lists the main category numbers.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Optional. German cities, districts or 5-digit postcodes as you would type them on Kleinanzeigen, for example Berlin, Mitte - Berlin, München, 10115. Empty = all of Germany. A place Kleinanzeigen does not know comes back as a free row (Kleinanzeigen itself would silently show all of Germany).",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Optional. Kleinanzeigen search result pages copied from your browser, for example https://www.kleinanzeigen.de/s-berlin/fahrrad/k0l3331. Filters in the URL that Kleinanzeigen's robots.txt does not allow (price, radius, sort order, seller type) are not requested: a free row says so. Use Min price and Max price instead.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Min price (EUR)",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Only listings at or above this price. Applied to the listings this Actor reads (Kleinanzeigen's own price filter is not allowed by its robots.txt). Listings without a price (only \"VB\") are left out when a price filter is set."
          },
          "maxPrice": {
            "title": "Max price (EUR)",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Only listings at or below this price. A listing whose price reads \"Zu verschenken\" counts as 0. Ads in the Zu verschenken category show no price at all and are left out when a price range is set."
          },
          "maxResultsPerSearch": {
            "title": "Max listings per search",
            "minimum": 1,
            "maximum": 125,
            "type": "integer",
            "description": "Most listings returned for one search. Kleinanzeigen's robots.txt allows the first 5 pages of a search (125 newest listings), so 125 is the maximum. Empty = 50. In monitor mode it limits the new listings and price drops returned per search in one run; the rest come in the next run."
          },
          "includeTopAds": {
            "title": "Include TOP ads",
            "type": "boolean",
            "description": "Off (default): paid TOP placements, which Kleinanzeigen shows above every page whatever their age, are left out. On: return them too, marked isTopAd."
          },
          "onlyNew": {
            "title": "Monitor mode: only new listings and price drops",
            "type": "boolean",
            "description": "On: every run reads the newest 5 pages of each search and returns only listings that are new since the previous check (changeType new) and listings whose price went down (changeType price-drop, with previousPrice). Older listings that were pushed back to the top or moved up from further down are not sold as new. The first run returns up to Max listings per search (changeType first-check) and remembers the list as the starting point. Each run that reads the list is charged the run start fee even when nothing changed; runs where nothing changed return a free row saying so."
          },
          "includePriceDrops": {
            "title": "Monitor mode: return price drops",
            "type": "boolean",
            "description": "On (default): in monitor mode, also return listings whose price is lower than at the previous check. Off: only new listings.",
            "default": true
          },
          "includeResurfaced": {
            "title": "Monitor mode: return older listings pushed back to the top",
            "type": "boolean",
            "description": "Off (default): an older listing that the seller pushed back to the top (or edited), which this watch had not seen before, is not returned. On: return it with changeType resurfaced. It is never called new.",
            "default": false
          },
          "watchName": {
            "title": "Watch name",
            "type": "string",
            "description": "Optional. Keeps separate memories for monitor mode, for example one per client (letters, digits, dot, dash, underscore; up to 40). Runs with the same watch name and the same search share what has already been returned."
          },
          "resetMonitoringState": {
            "title": "Start the watch again",
            "type": "boolean",
            "description": "On: forget what this watch has seen for these searches before running, so this run is a first check again."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}