Immowelt.de API scraper - German real estate data: apartments and houses for sale API

German property as JSON, with Kaltmiete and Warmmiete as two different fields

Immowelt.de API scraper - German real estate data: apartments and houses for sale API returns live Immowelt.de API scraper - German real estate data: apartments and houses for sale data as clean JSON for immowelt.de api scraper - german real estate data: apartments and houses for sale The primary endpoint, search, returns matching records including legacy id, title, contract, property type and price.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Immowelt.de API scraper - German real estate data: apartments and houses for sale endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
I
/immowelt/v1

3 active endpoints, on 0 and 1 credit tiers.

  • POST/immowelt/v1/search
  • POST/immowelt/v1/detail
  • POST/immowelt/v1/location

What Immowelt.de API scraper - German real estate data: apartments and houses for sale endpoints does ReefAPI ship?

3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

3 endpoints

search

1 cr

Search Immowelt.de property listings in any German city, district, postcode area or federal s…

required
location
optional
contract, property_type, property_subtype, page, sort, price_min, price_max, rooms_min, rooms_max, living_space_min, living_space_max, plot_min, plot_max, features, new_build

detail

1 cr

Full record for one Immowelt listing, by its expose URL or its listing id.

required
listing
optional
—

location

0 cr

Resolve a free-text German place.

required
query
optional
contract, property_type

Every parameter, every allowed value →

Immowelt.de API scraper - German real estate data: apartments and houses for sale API

3 of 3 endpoints, ready to run

View docs ↗

Search Immowelt.de property listings in any German city, district, postcode area or federal state - for sale, to rent or foreclosure auction - with structured filters: price (EUR), number of rooms, living space (m2), plot size (m2), property type and subtype (penthouse, loft, detached house, villa...), new-build only, and features such as garden, cellar or lift. Results are 30 per page and can be sorted by price, date or size. Each row carries the numeric price, rooms, living space, plot, address (city/district/postcode), energy class, publication date, photos and the listing agency. `location` takes plain German free text ('Berlin', 'Muenchen', 'Koeln') and is resolved to Immowelt's own geo-id, or you can pass a geo-id ('AD08DE8634') straight through.

1 credit1 required · 15 optional
POST/immowelt/v1/search
ok30 records · sample
{
  "engine": "immowelt",
  "action": "search",
  "request": {
    "location": "Berlin"
  },
  "ok": true,
  "data": {
    "total": 9143,
    "count": 30,
    "page": 1,
    "page_size": 30,
    "max_pages": 305,
    "location": {
      "query": "Berlin",
      "geo_id": "AD08DE8634",
      "city": "Berlin",
      "region": "Berlin",
      "city_slug": "berlin-10115",
      "url": "https://www.immowelt.de/suche/kaufen/wohnung/berlin/berlin-10115/ad08de8634",
      "matched": true
    },
    "filters_applied": {},
    "results": [
      {
        "id": "256Q14GY2JL7",
        "legacy_id": "1215b46c-9e03-4081-bc72-67209544ff9f",
        "url": "https://www.immowelt.de/expose/1215b46c-9e03-4081-bc72-67209544ff9f",
        "title": "Sehr gepflegte 2-Zimmer-Wohnung mit ansprechenden Wohnraum und nützlichem Kellerraum",
        "contract": "BUY",
        "property_type": "APARTMENT",
        "price": {
          "amount_eur": 170000,
          "kind": "asking_price",
          "label": null,
          "formatted": "170.000 €",
          "per_sqm": "3.778 €/m²",
          "total_eur": null
        },
        "rooms": 2,
        "living_space_m2": 45,
        "plot_area_m2": null,
        "energy_class": "D",
        "address": {
          "city": "Treptow-Köpenick",
          "district": "Köpenick",
          "zip_code": "12557",
          "country": "DEU",
          "is_address_published": false
        },
        "geo_ids": [
          "AD09DE483",
          "AD08DE8634",
          "AD06DE326"
        ],
        "key_facts": [
          "2 Zimmer",
          "45 m²"
        ],
        "description_preview": "Diese charmante und gepflegte Etagenwohnung bietet eine ideale Gelegenheit für Immobilieninvestoren oder Eigennutzer. Mit einer Wohnfläche von 45 m² präsentiert sich diese Immobilie in einem hervorra...",
        "published_at": "2025-12-01T09:01:14.95Z",
        "updated_at": "2026-03-02T12:10:04.121Z",
        "status": "Published",
        "reference": "IK-PS-110",
        "tags": {
          "is_new": false,
          "has_floor_plan": false,
          "has_virtual_tour": false,
          "has_video": false,
          "has_brokerage_fee": false
        },
        "primary_photo_url": "https://mms.immowelt.de/3/2/9/9/329954f0-f004-47bc-ba98-2b821cb41256.jpg",
        "photo_count": 14,
        "agent": {
          "agency_name": "Immobilien Konzept­",
          "publisher_type": "AGENCY",
          "is_private_owner": false,
          "imprint_url": "https://www.immowelt.de/profil/02d166243f7d43cc95210d5429f9cadd#impressum",
          "website": "http://www.immobilienkonzept-amberg.de/",
          "business_address": "Schrannenplatz 6, 92224 Amberg­",
          "badge": "Diamond Partner",
          "logo_url": "https://mms.immowelt.de/7/8/6/6/786679f5-8a31-4898-aa71-6a38a9bdac47.jpg",
          "contact_person": null,
          "phone_numbers": null
        },
        "facts": [
          {
            "type": "numberOfRooms",
            "label": "Zimmer",
            "value": "2 Zimmer"
          },
          {
            "type": "livingSpace",
            "label": "m²",
            "value": "45 m²"
          }
        ]
      },
      {
        "id": "25QZ8UNS4212",
        "legacy_id": "243c9f62-e7f4-450b-99cd-c29c75fd5a83",
        "url": "https://www.immowelt.de/expose/243c9f62-e7f4-450b-99cd-c29c75fd5a83",
        "title": "Energieeffizient & mit Balkon: Vermietete 1-Zimmerwohnung in beliebter Kiezlage",
        "contract": "BUY",
        "property_type": "APARTMENT",
        "price": {
          "amount_eur": 166900,
          "kind": "asking_price",
          "label": null,
          "formatted": "166.900 €",
          "per_sqm": "3.890 €/m²",
          "total_eur": null
        },
        "rooms": 1,
        "living_space_m2": 42.9,
        "plot_area_m2": null,
        "energy_class": "C",
        "address": {
          "city": "Berlin",
          "district": "Friedrichshain",
          "zip_code": "10247",
          "country": "DEU",
          "is_address_published": true
        },
        "geo_ids": [
          "AD09DE476",
          "AD08DE8634",
          "AD06DE326"
        ],
        "key_facts": [
          "1 Zimmer",
          "42,9 m²",
          "3. Geschoss"
        ],
        "description_preview": ". 3. OG . 1 Zimmer, ca. 42 m² . Energieeffizienzklasse C . Wannenbad . Balkon . Vermietet . Provisionsfrei Profitieren Sie von attraktiven steuerlichen Vorteilen Ihrer Kapitalanlage: Steuerfreier Ver...",
        "published_at": "2026-09-29T10:17:20.02Z",
        "updated_at": "2026-09-29T10:17:27.346Z",
        "status": "Published",
        "reference": "1150-25",
        "tags": {
          "is_new": true,
          "has_floor_plan": false,
          "has_virtual_tour": false,
          "has_video": true,
          "has_brokerage_fee": false
        },
        "primary_photo_url": "https://mms.immowelt.de/0/6/a/b/06abdf06-5b0d-4e18-b785-0b1b3f5381c7.jpg",
        "photo_count": 16,
        "agent": {
          "agency_name": "Accentro GmbH",
          "publisher_type": "AGENCY",
          "is_private_owner": false,
          "imprint_url": "https://www.immowelt.de/profil/fa260f013904402192a7dc8bbd7d8b20#impressum",
          "website": "http://www.accentro.de/",
          "business_address": "Kantstraße 44/45, 10625 Berlin",
          "badge": "immowelt Partner",
          "logo_url": "https://mms.immowelt.de/d/3/9/c/d39cb3f3-d2ee-4478-90eb-988db45ec7e6.jpg",
          "contact_person": null,
          "phone_numbers": null
        },
        "facts": [
          {
            "type": "numberOfRooms",
            "label": "Zimmer",
            "value": "1 Zimmer"
          },
          {
            "type": "livingSpace",
            "label": "m²",
            "value": "42,9 m²"
          },
          {
            "type": "numberOfFloors",
            "label": "Geschoss",
            "value": "3. Geschoss"
          }
        ]
      },
      {
        "id": "26W1NRNFNU8B",
        "legacy_id": "884bed59-77fb-4db2-aea5-202a1157f076",
        "url": "https://www.immowelt.de/expose/884bed59-77fb-4db2-aea5-202a1157f076",
        "title": "Einziehen & wohlfühlen: 3-Zimmer-Wohnung mit 2 Loggien in Top-Lage!",
        "contract": "BUY",
        "property_type": "APARTMENT",
        "price": {
          "amount_eur": 449901,
          "kind": "asking_price",
          "label": null,
          "formatted": "449.901 €",
          "per_sqm": "5.740 €/m²",
          "total_eur": null
        },
        "rooms": 3,
        "living_space_m2": 78.38,
        "plot_area_m2": null,
        "energy_class": "D",
        "address": {
          "city": "Berlin",
          "district": "Steglitz",
          "zip_code": "12163",
          "country": "DEU",
          "is_address_published": false
        },
        "geo_ids": [
          "AD09DE480",
          "AD08DE8634",
          "AD06DE326"
        ],
        "key_facts": [
          "3 Zimmer",
          "78,4 m²",
          "3. Geschoss"
        ],
        "description_preview": "Wohnen mit Charakter und Geschichte Willkommen in einem Zuhause mit Seele: Das idyllisch gelegene, denkmalgeschützte Wohnensemble der \"MGK\" (Markel-, Gritzner-, und Kreuznacher Straße) wurde im Jahr ...",
        "published_at": "2026-09-18T09:27:36.85Z",
        "updated_at": "2026-09-18T09:27:53.628Z",
        "status": "Published",
        "reference": "WE20260915-02-WE87",
        "tags": {
          "is_new": false,
          "has_floor_plan": true,
          "has_virtual_tour": true,
          "has_video": false,
          "has_brokerage_fee": false
        },
        "primary_photo_url": "https://mms.immowelt.de/5/e/1/f/5e1fc0ee-dd94-490e-84c8-fd4fc52dd89a.jpg",
        "photo_count": 18,
        "agent": {
          "agency_name": "Werde Eigentümer GmbH",
          "publisher_type": "AGENCY",
          "is_private_owner": false,
          "imprint_url": "https://www.immowelt.de/profil/9444d5628c7a46408e3cee257974f880#impressum",
          "website": "https://www.werde-eigentümer.de/",
          "business_address": "Töpferwall 2a, 17207 Röbel/Müritz",
          "badge": null,
          "logo_url": "https://mms.immowelt.de/c/7/6/6/c7667823-5373-4ae4-be1c-35709353dd38.jpg",
          "contact_person": null,
          "phone_numbers": null
        },
        "facts": [
          {
            "type": "numberOfRooms",
            "label": "Zimmer",
            "value": "3 Zimmer"
          },
          {
            "type": "livingSpace",
            "label": "m²",
            "value": "78,4 m²"
          },
          {
            "type": "numberOfFloors",
            "label": "Geschoss",
            "value": "3. Geschoss"
          }
        ]
      }
    ]
  },
  "meta": {
    "api": "immowelt",
    "endpoint": "search",
    "mode": "live",
    "record_count": 30
  },
  "captured": "2026-09-30 live"
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Immowelt.de API scraper - German real estate data: apartments and houses for sale API works

Immowelt.de API scraper - German real estate data: apartments and houses for sale is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 321 engines.

02
Call
POST /immowelt/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Resolve the place for free, then search, then read the rent as two numbers

German rental listings quote two figures and they are not interchangeable. The headline on the page is the cold rent; the total a tenant pays includes the running costs. A comparison built on whichever number happened to be nearest is wrong by the size of the Nebenkosten.

01location
POST/immowelt/v1/location
{"query": "leipzig"}

Free, and cached for half a day. Returns Immowelt's own geography id for the place, which is what the search surface keys on. Checking it costs nothing, and a search scoped to the wrong id still looks healthy.

02search
POST/immowelt/v1/search
{"location": "leipzig", "contract": "rent"}

1 credit for thirty rows. price.amount_eur is the headline cold rent, the number Immowelt itself prints; price.total_eur is the warm figure where the listing publishes one. Both are the source's own numbers.

03search
POST/immowelt/v1/search
{"location": "leipzig", "contract": "rent", "price_max": 900, "rooms_min": 2}

1 credit. Filters, sorting and any page past the first are served from Immowelt's app surface rather than its public one, which is why they cost more to fetch on our side.

04detail
POST/immowelt/v1/detail
{"listing": "<id or the expose URL>"}

1 credit. The full record: the complete facts table, the description, the agency and the fields the results card does not carry.

A geography you can prove, thirty listings a page with the rent in both its forms, and the full record for the ones worth a second look.

request
curl -X POST https://api.reefapi.com/immowelt/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"location":"Berlin"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "immowelt",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Germany only, in euros, with two rent figures and a hard rule about which is which

Measured 2026-09-30 against the live gateway across Cologne, Leipzig, Stuttgart, Dresden and Hamburg, both sides of the market, 150 rows read against the source's own printed figures. Three of these lines go against us.

Germany, in euros, both sides of the market

One country, one currency, and the contract parameter chooses between buying and renting. The default is buying, which matters: a price ceiling of 900 on a sale search is not a mistake the engine corrects for you, it simply finds nothing. Set contract to rent before you set a rent budget.

Cold rent and warm rent are two fields, and neither is derived from the other

price.amount_eur is the Kaltmiete, the headline figure Immowelt prints on the card and on the full listing. price.total_eur is the Warmmiete where the listing publishes one. Both come from the source. Search rows and detail pages were compared for the same listing eleven times and they agree on the headline figure, so a caller reading amount_eur is reading what a German renter sees advertised.

The number is checked against the string the source printed beside it

Every price is validated against Immowelt's own formatted figure on the same row before it is published, and a disagreement beyond rounding is counted rather than shipped. Across 150 live rows that count was zero. The check exists because it caught a real fault: Immowelt writes cents with a dot on rents that are not a round euro, and reading that as a thousands separator turns 627,30 into 6273, a rent published ten times too high with every field filled and nothing obviously wrong.

Pages do not overlap

Page one and page two of the same Cologne search shared zero listings out of thirty. Paging past the first page is served from the app surface, so it costs more to fetch, but it is real paging rather than the same rows reordered.

Against us: the first page is cheap and everything else is not

A plain unfiltered first page comes from Immowelt's public search page, which opens on an ordinary datacentre vantage point. The moment you add a filter, a sort, a second page, or ask for any single listing, the request moves to the app surface, which refuses that vantage point on every attempt and needs a German residential one instead. Same price to you either way; it is simply where the cost sits on our side.

Against us: rooms are missing on a couple of listings in a hundred

Two Frankfurt rentals in a measured sample published no room count anywhere, on the card or on the full listing. They come back null. Everything else on a search row was complete across 150 rows: id, url, title, price, rooms, living space, city, postcode, publication date, lead photo and agency, with energy class on 76 of 90 in one sweep.

Against us: a dead listing and a refusal look the same from outside

Immowelt answers a removed listing and a refused request with the same status, so a detail call that fails says plainly that it may equally be a property that has been sold, let or withdrawn. It does not guess a not-found to look tidy, and it does not report the site as blocking us when the honest answer is that the two cannot be told apart.

A discount is never computed against a missing price

Where a figure is absent, every number derived from it goes with it rather than being calculated against a placeholder. A struck original stays when the source publishes one, because that is Immowelt's own number and not something inferred.

Price

The location resolver is free and cached for twelve hours. A search is 1 credit for thirty rows and a single listing is 1 credit. Resolve the place first: it costs nothing and it is the step that quietly goes wrong.

What people build with Immowelt.de API scraper - German real estate data: apartments and houses for sale

The jobs this data is most often used for.

3

endpoints

0/1

credits per call

01

Pricing and assortment teams use Immowelt.de API scraper - German real estate data: apartments and houses for sale to search Immowelt.de property listings in any German city, district, postcode area or federal s….

02

Brand-protection teams use Immowelt.de API scraper - German real estate data: apartments and houses for sale to get full record for one Immowelt listing, by its expose URL or its listing id.

03

Retail analysts use Immowelt.de API scraper - German real estate data: apartments and houses for sale to resolve a free-text German place - city, town, district or federal state - to Immowelt's own….

What Immowelt.de API scraper - German real estate data: apartments and houses for sale data costs

The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 321 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/immowelt/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"location":"Berlin"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/immowelt/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "location": "Berlin"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Immowelt.de API scraper - German real estate data: apartments and houses for sale.

Get a free key →
What is the Immowelt.de API scraper - German real estate data: apartments and houses for sale API?▾

Immowelt.de API scraper - German real estate data: apartments and houses for sale API is a ReefAPI endpoint group for immowelt.de api scraper - german real estate data: apartments and houses for sale It returns live JSON through POST requests under /immowelt/v1.

Is the Immowelt.de API scraper - German real estate data: apartments and houses for sale API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. Immowelt.de API scraper - German real estate data: apartments and houses for sale calls use the same shared credit balance as every other ReefAPI engine.

Do I need an Immowelt.de API scraper - German real estate data: apartments and houses for sale login or account?▾

No login to Immowelt.de API scraper - German real estate data: apartments and houses for sale is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Immowelt.de API scraper - German real estate data: apartments and houses for sale data?▾

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Immowelt.de API scraper - German real estate data: apartments and houses for sale API use?▾

Immowelt.de API scraper - German real estate data: apartments and houses for sale actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Immowelt.de API scraper - German real estate data: apartments and houses for sale from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call immowelt actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Immowelt.de API scraper - German real estate data: apartments and houses for sale API an Immowelt.de API scraper - German real estate data: apartments and houses for sale scraper?▾

It is the managed alternative to a DIY Immowelt.de API scraper - German real estate data: apartments and houses for sale scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same immowelt.de api scraper - german real estate data: apartments and houses for sale back as clean JSON.

Why does my Immowelt.de API scraper - German real estate data: apartments and houses for sale scraper keep getting blocked?▾

Most Immowelt.de API scraper - German real estate data: apartments and houses for sale scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.

26 More APIs APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Immowelt.de API scraper - German real estate data: apartments and houses for sale, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 320 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-30.