top of page

How to scrape real estate data from Kleinanzeigen using the Minexa API

Kleinanzeigen is Germany's largest classifieds platform, and its land and garden listings category contains thousands of active property ads updated daily. Getting that data into a structured format manually is not practical at any meaningful scale. This guide shows how to do it programmatically using the Minexa API.

The workflow has two tracks. You run track one once in the browser to train the scraper. You run track two as many times as you need via the API. Once track one is done, it never needs to repeat unless Kleinanzeigen changes its page structure.

Watch the full walkthrough first

The video above covers the complete training session on kleinanzeigen.de/s-grundstuecke-garten/c207 from start to finish. The steps below follow the same sequence.

Track one: training the scraper in the browser

Open the Minexa Chrome extension and navigate to the Kleinanzeigen listings page. The extension loads and detects the page automatically.

After the extension opens, confirm you are on the correct page using the 'I'm on the right page' button.

The extension then shows the pagination it detected. Review the next-page button selection and click Continue to proceed.

Choose whether to scrape the listing page only, or to follow each listing link and extract detail page data as well. For most pipeline use cases, the list-only mode covers the fields needed.

Select the simple scraping scenario unless you need custom click workflows, then confirm the data container Minexa highlights automatically.

After clicking 'Create scraper', all extracted columns become visible. Use the next/prev navigation to review every data point before moving to the API configuration.

Click 'API request' to see the generated JSON and Python code samples. Copy the scraper ID shown here — you will use it in every API call.

Track two: calling the API at scale

With the scraper trained, every subsequent extraction is a POST request. No browser needed. Pass the scraper ID, the target URLs, and your column selection. Here is a working Python example:

import requests

headers = {
    "x-api-key": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

payload = {
    "scraper_id": 6219,
    "columns": "top_40",
    "urls": [
        "https://www.kleinanzeigen.de/s-grundstuecke-garten/c207",
        "https://www.kleinanzeigen.de/s-grundstuecke-garten/seite:2/c207"
    ],
    "scraping_mode": "default",
    "threads": 5
}

response = requests.post(
    "https://api.minexa.ai/data",
    json=payload,
    headers=headers
)
print(response.json())

Pagination on Kleinanzeigen must be handled by the developer when using the API. Build your URL list by appending the page parameter to the base URL and pass all pages in the urls array, or loop through them with a cron job.

What the extracted data looks like

Each row in the response maps to one listing. Below are two representative records with the key fields labelled:

[
  {
    "ad_id": "3429776789",
    "listing_url": "/s-anzeige/der-fruehe-vogel-faengt-den-wurm-sued-grundstueck-im-neubaugebiet/3429776789-207-6278",
    "location": "91301 Forchheim",
    "price": "249.000 EUR",
    "property_size": "559 m2",
    "property_description_2": "Der fruehe Vogel faengt den Wurm! Sued-Grundstueck im Neubaugebiet",
    "property_description": "Dieses attraktive Baugrundstueck befindet sich im Forchheimer Ortsteil Reuth...",
    "company_logo": "Logo des Unternehmens von Poll Immobilien GmbH"
  },
  {
    "ad_id": "3442935533",
    "listing_url": "/s-anzeige/-teilungsgrundstueck-in-gruener-lage-von-16321-bernau-ot-schoenow-/3442935533-207-7924",
    "location": "16321 Bernau",
    "price": "200.000 EUR",
    "property_size": "621 m2",
    "property_description_2": "Teilungsgrundstueck in gruener Lage von 16321 Bernau OT Schoenow",
    "property_description": "Manchmal sind es genau die Orte, die man nicht sofort auf dem Radar hat..."
  }
]

The ad_container field is worth noting: rows where it contains a Google iframe ID are injected ad slots, not real listings. Filter those out in your pipeline by checking whether ad_id is empty. The real_estate_offer array gives you a compact object with description, size, and price in one place, useful for quick comparisons without parsing the full property_details array.

After the job runs

Results are available as Excel or JSON. For recurring extraction across many URLs, set up your own cron job and call https://api.minexa.ai/data on whatever schedule fits your pipeline.

For a comparable real estate API workflow on a different platform, see how to scrape real estate data from OpenRent using the Minexa API.

Recent Posts

See All

Comments


Heading 2

bottom of page