ImmobilienScout24 APIimmobilienscout24.de ↗
Access ImmobilienScout24.de listings, property details, images, realtor profiles, and geocode suggestions via a structured REST API for German real estate data.
What is the ImmobilienScout24 API?
This API covers ImmobilienScout24.de — Germany's largest real estate portal — across 5 endpoints that return geocode suggestions, listing details, property images, and realtor profiles. The get_listing_details endpoint alone returns over a dozen structured fields including baseRent, totalRent, keyValues, galleryData, and contactData, giving developers direct access to the data they need without parsing HTML.
curl -X GET 'https://api.parse.bot/scraper/c161b4d9-ffca-40ff-b4e9-3bb0e8bdc884/get_geocode_suggestions?QUERY=Berlin' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace immobilienscout24-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.immobilienscout24_api import ImmobilienScout24, ResourceNotFound
client = ImmobilienScout24()
# Search for locations matching a city name
for location in client.locations.search(query="Berlin", limit=5):
print(location.label, location.type, location.id)
# Fetch a specific listing by expose ID
listing = client.listings.get(expose_id="139440647")
print(listing.real_estate_type, listing.base_rent, listing.total_rent)
print(listing.location_address.city, listing.location_address.street)
# Browse listing images via sub-resource
for image in listing.images.list(limit=3):
print(image.caption, image.full_size_picture_url)
# Get realtor details with typed error handling
try:
realtor = client.realtors.get(company_wide_id="009.ecb352e3-56cd-4e07-aee2-97f5dee45a69")
print(realtor.company_name, realtor.focus_type)
except ResourceNotFound as exc:
print(f"Realtor not found: {exc}")
print("exercised: locations.search / listings.get / listing.images.list / realtors.get")
Resolve a location name to structured geo identifiers. Returns an object with a 'data' array of location suggestions matching the query, including cities, districts, postcodes, streets, train stations, POIs, and addresses. Each suggestion carries type, id, label, and geopath URI. Results are ordered by relevance.
| Param | Type | Description |
|---|---|---|
| QUERYrequired | string | Location search query (city name, postcode, street, district, train station, POI, or address) |
{
"type": "object",
"fields": {
"data": "array of location objects, each with id, type, label, shapeId, and geopath"
},
"sample": {
"data": {
"data": [
{
"id": "1276003001",
"type": "city",
"label": "Berlin",
"geopath": "/de/berlin/berlin",
"shapeId": "1276003001"
},
{
"id": "1100000006",
"type": "quarterOrTown",
"label": "Berlin - Steglitz-Zehlendorf",
"geopath": "/de/berlin/berlin/steglitz-zehlendorf",
"shapeId": "1100000006"
}
]
},
"status": "success"
}
}About the ImmobilienScout24 API
Endpoints and Data Coverage
The API exposes five endpoints targeting distinct data types on ImmobilienScout24.de. get_geocode_suggestions resolves a free-text location query — city name, postcode, street, district, train station, or address — into structured suggestion objects, each containing an entity type, id, label, and geopath, plus character-level match offsets for highlighting. This is useful for building location autocomplete or resolving human-readable inputs to ImmobilienScout24 geo identifiers.
get_listing_details retrieves the full data payload for a specific property by its numeric expose ID. The response includes baseRent, totalRent, propertyPrice, isResidential, onTopProduct, and a keyValues object that contains granular attributes such as obj_livingSpace, obj_noRooms, obj_balcony, and obj_heatingType. Contact information is returned inside a contactData object with contactPerson and realtorInformation fields. A separate get_listing_images endpoint returns the full image array for a listing, with galleryPictureUrl, fullSizePictureUrl, thumbnailUrl, caption, and type per image.
Realtors and Search
get_realtor_details accepts a company-wide realtor ID in the format <prefix>.<uuid> and returns a payload object with basicInfo, branchenbuchContactDetails, evaluations, products, badges, and realtorSettings. The statusCode field indicates either REALTOR_FOUND or REALTOR_NOT_FOUND, making error handling straightforward. The search_listings endpoint supports filtering by TYPE (e.g. apartmentRent, houseBuy), LOCATION, price range, area range, room count, and SORTING code. Note that this endpoint is currently blocked by AWS WAF, so live search results are not reliably available at this time.
Limitations
Realtor IDs needed for get_realtor_details are not returned directly by the listing endpoints — they must be extracted from contactData.realtorInformation in a get_listing_details response. The search_listings endpoint is documented but currently non-functional due to WAF blocking, meaning listing discovery must go through known expose IDs. Data coverage is limited to the German market as ImmobilienScout24.de operates exclusively in Germany.
The ImmobilienScout24 API is a managed, monitored endpoint for immobilienscout24.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when immobilienscout24.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official immobilienscout24.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a German rental market monitor that tracks
baseRentandtotalRentchanges for specific expose IDs over time - Populate a property comparison tool using
keyValuesfields likeobj_livingSpace,obj_noRooms, andobj_balconyfromget_listing_details - Create a location autocomplete widget using
get_geocode_suggestionsto resolve city or postcode input to ImmobilienScout24 geo identifiers - Aggregate realtor performance data by pulling
evaluations,badges, andproductsfromget_realtor_details - Download full image sets for listings using
get_listing_imagesto build offline property archives withfullSizePictureUrlandcaptionfields - Identify premium listings by checking the
onTopProductplacement tier returned inget_listing_details - Enrich a CRM with realtor contact details by matching
realtorInformationfrom listing responses toget_realtor_detailsprofile data
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ImmobilienScout24 have an official developer API?+
What does get_listing_details return beyond the rent figures?+
baseRent, totalRent, and propertyPrice, the endpoint returns a keyValues object with property-level attributes including living space in sqm (obj_livingSpace), room count (obj_noRooms), balcony availability (obj_balcony), and heating type (obj_heatingType). It also returns contactData with the agent name and contact button info, galleryData with image counts, and onTopProduct indicating the premium placement tier.Can I search for listings by location and filter by price or area?+
search_listings endpoint accepts LOCATION, MIN_AREA, MAX_AREA, MAX_PRICE, TYPE, and SORTING parameters and is designed for this use case. However, it is currently blocked by AWS WAF on the source site, so results are not reliably returned. The other four endpoints — geocode suggestions, listing details, images, and realtor profiles — are functional. You can fork this API on Parse and revise it to add an alternative search path if you have a workaround for the WAF block.Does the API cover commercial real estate or only residential properties?+
get_listing_details response includes an isResidential boolean, and the search_listings TYPE parameter supports residential types like apartmentRent, apartmentBuy, houseRent, and houseBuy. Commercial property types are not currently exposed as distinct filter values in the documented parameters. You can fork this API on Parse and revise it to add commercial property type support if ImmobilienScout24 exposes those categories in their listing pages.How do I get a realtor's ID to use with get_realtor_details?+
<prefix>.<uuid> format is not returned directly by get_listing_details. You need to inspect the contactData.realtorInformation object returned from a listing detail call to extract the company-wide ID, then pass that to get_realtor_details. If the ID does not match any realtor, the endpoint returns a statusCode of REALTOR_NOT_FOUND rather than an HTTP error.