{
  "openapi": "3.0.1",
  "info": {
    "title": "Kleinanzeigen Scraper — Listings, Prices & Seller Data",
    "description": "Scrape Kleinanzeigen listings by keyword, location or URL. Export prices, sellers and optional details to JSON/CSV with result limits and run diagnostics.",
    "version": "0.2",
    "x-build-id": "yBXBVdjrN2jegANWe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ninhothedev~kleinanzeigen-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ninhothedev-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/ninhothedev~kleinanzeigen-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ninhothedev-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/ninhothedev~kleinanzeigen-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ninhothedev-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 keywords",
            "type": "array",
            "description": "What to search for on Kleinanzeigen.de, one keyword per line (e.g. 'iphone 13', 'sofa', 'e-bike'). Each keyword is a separate search and is combined with the location, category, price and sort filters below. Leave empty if you only paste search URLs further down. If you explicitly clear all source fields, the run fails instead of starting a demo search.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location (city or PLZ)",
            "type": "string",
            "description": "City, district or 5-digit German postal code, e.g. 'Berlin', 'München' or '10115'. Leave empty for all of Germany. An unresolvable location stops the run instead of silently searching nationwide."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Search radius around the location. Kleinanzeigen supports 5, 10, 20, 30, 50, 100, 150 and 200 km - other values are rounded up. 0 = only the location itself.",
            "default": 0
          },
          "category": {
            "title": "Category",
            "enum": [
              "",
              "195",
              "403",
              "203",
              "205",
              "196",
              "208",
              "207",
              "277",
              "197",
              "199",
              "402",
              "275",
              "238",
              "198",
              "80",
              "86",
              "88",
              "84",
              "89",
              "81",
              "246",
              "82",
              "239",
              "91",
              "93",
              "90",
              "87",
              "210",
              "216",
              "217",
              "223",
              "211",
              "305",
              "306",
              "276",
              "280",
              "220",
              "241",
              "153",
              "154",
              "159",
              "160",
              "158",
              "224",
              "156",
              "157",
              "155",
              "102",
              "107",
              "247",
              "111",
              "110",
              "123",
              "114",
              "117",
              "118",
              "105",
              "125",
              "109",
              "161",
              "408",
              "409",
              "407",
              "405",
              "406",
              "173",
              "176",
              "172",
              "226",
              "245",
              "279",
              "278",
              "228",
              "225",
              "285",
              "175",
              "227",
              "168",
              "17",
              "23",
              "22",
              "20",
              "258",
              "19",
              "25",
              "21",
              "236",
              "237",
              "18",
              "130",
              "134",
              "313",
              "139",
              "136",
              "243",
              "135",
              "138",
              "132",
              "133",
              "283",
              "185",
              "230",
              "249",
              "234",
              "240",
              "282",
              "187",
              "233",
              "248",
              "191",
              "250",
              "189",
              "232",
              "242",
              "73",
              "74",
              "76",
              "78",
              "79",
              "77",
              "284",
              "281",
              "75",
              "231",
              "255",
              "257",
              "287",
              "251",
              "254",
              "286",
              "252",
              "256",
              "297",
              "291",
              "296",
              "289",
              "294",
              "293",
              "292",
              "288",
              "295",
              "290",
              "298",
              "272",
              "192",
              "273",
              "274",
              "235",
              "268",
              "262",
              "271",
              "263",
              "269",
              "261",
              "266",
              "267",
              "264",
              "265",
              "260",
              "270",
              "400",
              "401"
            ],
            "type": "string",
            "description": "Optional Kleinanzeigen category. Can also be used without keywords to scrape a whole category (combine with a location).",
            "default": ""
          },
          "minPrice": {
            "title": "Min price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings priced at or above this amount."
          },
          "maxPrice": {
            "title": "Max price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings priced at or below this amount."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Order of results for keyword searches. 'Newest first' is ideal for monitoring new ads.",
            "default": "newest"
          },
          "adType": {
            "title": "Ad type",
            "enum": [
              "all",
              "offers",
              "wanted"
            ],
            "type": "string",
            "description": "Filter offers vs. 'wanted' (Gesuche) ads for keyword searches.",
            "default": "all"
          },
          "privateOnly": {
            "title": "Private sellers only",
            "type": "boolean",
            "description": "Keep only private sellers and exclude commercial / PRO dealers (applied to keyword searches and pasted URLs).",
            "default": false
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Optional: paste Kleinanzeigen.de search or category URLs with all filters already applied (open kleinanzeigen.de, search, set filters, copy the address bar), e.g. https://www.kleinanzeigen.de/s-fahrraeder/berlin/c217l3331. Single listing URLs (/s-anzeige/...) are also accepted and scraped with full details.",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerSearch": {
            "title": "Max listings per search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum new unique listings per keyword or URL, including listings already delivered for that search on restart. The crawler visits at most 50 pages; actual coverage varies. Console example: 50; omitted API value: 200.",
            "default": 200
          },
          "maxItems": {
            "title": "Max listings in total",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum unique delivered listings across all searches (0 = no global cap). Already delivered listings count on restart. Platform usage is charged separately from listing fees.",
            "default": 0
          },
          "fetchDetails": {
            "title": "Fetch full listing details",
            "type": "boolean",
            "description": "Visit listing pages for descriptions, photos, attributes and public seller information where available. Failed detail requests retain the basic listing with detailsFetched=false and partial status in RUN_SUMMARY. Details increase platform usage costs.",
            "default": false
          },
          "includeViews": {
            "title": "Include view counter",
            "type": "boolean",
            "description": "With details on: also read each ad's view counter ('views'). One extra small request per listing; the lookup counts as one page view on Kleinanzeigen, like a normal visitor.",
            "default": false
          },
          "skipTopAds": {
            "title": "Skip TOP ads",
            "type": "boolean",
            "description": "Exclude paid TOP placements (often older or off-topic) and keep only the organic result list.",
            "default": false
          },
          "detailConcurrency": {
            "title": "Detail pages in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum concurrent detail requests. Lower this if you encounter blocks; higher values can increase transient resource use.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is enabled by default. The client may retry directly after proxy blocks. For direct-only access, disable Apify Proxy. Requested proxy setup failures stop the run; proxy usage can add to platform costs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": []
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}