{
  "openapi": "3.0.1",
  "info": {
    "title": "Kleinanzeigen Scraper - Kleinanzeigen.de Ads, All Categories",
    "description": "Scrape Kleinanzeigen.de ads in any category from a search URL or by keyword, place, category, price and seller. One record per ad: price and price type, place, date, description, images, attributes, shipping, seller type. Past the 1,250-ad limit. New-ads monitoring. $0.50 per 1,000 ads.",
    "version": "0.1",
    "x-build-id": "MiVLFJqcjAk6tudGE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/amitaviv~kleinanzeigen-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-amitaviv-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/amitaviv~kleinanzeigen-scraper/runs": {
      "post": {
        "operationId": "runs-sync-amitaviv-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/amitaviv~kleinanzeigen-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-amitaviv-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": {
          "startUrls": {
            "title": "Search or ad URLs",
            "type": "array",
            "description": "Kleinanzeigen search URLs or ad URLs copied from the browser's address bar, e.g. https://www.kleinanzeigen.de/s-fahrraeder/berlin/c217l3331 (bikes in Berlin). Each search URL is one search; several entries are fine. Make the search on kleinanzeigen.de (any category, place, radius, price, seller type and category filters) and paste its URL. The URL's filters and sort order are applied as they are; its page number is not (every search is read from page 1). URLs without https:// and old ebay-kleinanzeigen.de URLs are accepted. An ad URL (…/s-anzeige/…) returns that ad from its ad page (charged as ad + ad page). Default: empty. Leave empty to search by the keyword, place and category fields instead; both can be used in one run.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (instead of a URL)",
            "type": "array",
            "description": "Search words, one search per entry, e.g. [\"e-bike\", \"iphone 15\"]. Each is combined with the place, radius, category, price and seller fields below. Up to 100 characters; % # ? and \\ are left out. The site cannot search for the single word \"anzeige\" or \"anzeigen\". Default: empty; with no keyword, the place and category fields alone make one search.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Place",
            "type": "string",
            "description": "A German city, district or postcode as you would type it on the site, e.g. München, Berlin Kreuzberg or 10115. The site's own place lookup is used and its first match is taken; a place it does not know fails that search with a message. Applies to keyword and field searches, not to pasted URLs. Default: empty (all of Germany)."
          },
          "radiusKm": {
            "title": "Radius around the place (km)",
            "enum": [
              "0",
              "5",
              "10",
              "20",
              "30",
              "50",
              "100",
              "150",
              "200"
            ],
            "type": "string",
            "description": "Radius around the place in kilometres, as text: \"0\" (only this place, default), \"5\", \"10\", \"20\", \"30\", \"50\", \"100\", \"150\" or \"200\". Only with a place.",
            "default": "0"
          },
          "category": {
            "title": "Category",
            "enum": [
              "",
              "210",
              "216",
              "223",
              "211",
              "217",
              "305",
              "306",
              "276",
              "280",
              "220",
              "161",
              "172",
              "226",
              "245",
              "176",
              "408",
              "279",
              "278",
              "228",
              "225",
              "173",
              "409",
              "285",
              "407",
              "175",
              "227",
              "405",
              "406",
              "80",
              "91",
              "93",
              "246",
              "239",
              "89",
              "90",
              "84",
              "86",
              "82",
              "81",
              "88",
              "102",
              "118",
              "111",
              "114",
              "110",
              "105",
              "107",
              "125",
              "123",
              "247",
              "117",
              "109",
              "400",
              "401",
              "297",
              "288",
              "289",
              "290",
              "293",
              "291",
              "292",
              "294",
              "295",
              "296",
              "298",
              "17",
              "236",
              "22",
              "19",
              "258",
              "21",
              "237",
              "25",
              "20",
              "23",
              "130",
              "138",
              "134",
              "136",
              "132",
              "135",
              "139",
              "133",
              "283",
              "243",
              "313",
              "153",
              "224",
              "154",
              "159",
              "160",
              "158",
              "156",
              "157",
              "235",
              "269",
              "260",
              "265",
              "263",
              "264",
              "262",
              "268",
              "261",
              "271",
              "267",
              "266",
              "270",
              "231",
              "286",
              "254",
              "287",
              "252",
              "255",
              "257",
              "251",
              "256",
              "185",
              "232",
              "248",
              "187",
              "282",
              "240",
              "191",
              "249",
              "233",
              "234",
              "230",
              "250",
              "189",
              "195",
              "199",
              "402",
              "196",
              "275",
              "197",
              "277",
              "207",
              "208",
              "205",
              "203",
              "403",
              "238",
              "73",
              "76",
              "281",
              "284",
              "77",
              "79",
              "78",
              "74",
              "272",
              "273",
              "274",
              "192"
            ],
            "type": "string",
            "description": "Kleinanzeigen category id as text, sub-categories included, e.g. \"217\" (Fahrräder & Zubehör), \"203\" (Mietwohnungen) or \"173\" (Smartphones); \"\" (default) for all categories. Alone (no keyword, no place) it reads the whole category in all of Germany. For a category not in this list, make the search on kleinanzeigen.de and paste its URL.",
            "default": ""
          },
          "priceMin": {
            "title": "Price from (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price in whole euros, e.g. 200. Applies to keyword and field searches. The site leaves out ads without a price when a price filter is set. Default: no minimum."
          },
          "priceMax": {
            "title": "Price to (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price in whole euros, e.g. 1500. Applies to keyword and field searches. Default: no maximum. A value below priceMin fails the run before any request."
          },
          "sellerType": {
            "title": "Seller",
            "enum": [
              "all",
              "private",
              "commercial"
            ],
            "type": "string",
            "description": "The site's own seller filter for keyword and field searches (a pasted URL keeps its own): all (default), private (private sellers only) or commercial (commercial sellers only).",
            "default": "all"
          },
          "maxItemsPerQuery": {
            "title": "Max ads per search",
            "minimum": 1,
            "maximum": 300000,
            "type": "integer",
            "description": "Maximum number of ads delivered for each search (each URL and each keyword), from 1 to 300,000; default 100. Apart from the start fee you pay only per delivered ad, so this also caps the cost. Kleinanzeigen shows at most 1,250 ads per search; set this higher to have a larger search read in parts (see splitLargeSearches).",
            "default": 100
          },
          "splitLargeSearches": {
            "title": "Split large searches",
            "type": "boolean",
            "description": "Only matters when maxItemsPerQuery is above 1,250. On (default): when the site has more ads than 1,250, the search is read in parts (private and commercial sellers, then price bands) that each stay under the site's limit; every ad is delivered and charged once. Ads without a price figure (\"VB\" only) are in no price band, so a search split by price misses those not met before the split: 2-4% of all ads in our tests. Off: at most 1,250 ads per search. The run summary says how many distinct ads were found against what the site reports.",
            "default": true
          },
          "includeDetails": {
            "title": "Ad pages (full details)",
            "type": "boolean",
            "description": "Off (default): what the result list shows (title, price, place, date, short description, first image, shipping flag, seller type where shown). On: each delivered ad is completed from its ad page: full description, all images, attributes (condition, size, rooms, mileage …), features, category names, private or commercial seller for every ad, account name of commercial sellers (and their shop, where they have one). One extra request per ad and an extra ad-page fee per ad (see Pricing).",
            "default": false
          },
          "includePrivateSellerData": {
            "title": "Include private sellers' data",
            "type": "boolean",
            "description": "Off (default): for private sellers (and ads whose seller type is unknown) the seller's name, user id, membership date and map position are null, and phone numbers and e-mail addresses in the description are replaced by [removed] (privateDataRedacted: true). In categories where a private ad is about the person (babysitting, care, tutoring and courses, services, neighbourly help, jobs, pet sitting, musicians, flat shares) the description and the photos are left out too. On: all of it is delivered as the site shows it. Turn this on only if you have a lawful basis under the GDPR (Art. 6) to process private persons' personal data, and use it only for that purpose; by turning it on you confirm this.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new ads (monitoring)",
            "type": "boolean",
            "description": "Off (default): every run delivers the ads it finds. On: return and charge only ads that earlier runs of this actor in your account have not delivered for the same search, for scheduled monitoring. Searches are then read newest first (a sort order in the URL is not applied, and large searches are not split); promoted TOP ads are skipped, since each is also listed at its own date. The first run delivers the newest ads up to the maximum; later runs stop once a page is mostly known, so set maxItemsPerQuery above the number of new ads you expect between two runs. The memory is a key-value store named kleinanzeigen-scraper-monitor in your account; delete it to start over.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Only with onlyNew. A free name for the monitor memory, e.g. hamburg-bikes. Runs with the same search and the same monitor name share one memory; give two schedules different names to keep their memories apart. Default: empty (one shared memory per search)."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default and recommended: no proxy. In our tests the site answered every request from Apify's own addresses. If a run reports that it was blocked, switch on Apify Proxy; each retry then goes out from a different address.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}