ImmobilienScout24 APIimmobilienscout24.de ↗
Access ImmobilienScout24.de listings, property details, images, realtor profiles, and geocode suggestions via a structured API. Covers Germany's largest real estate portal.
What is the ImmobilienScout24 API?
This API exposes 4 endpoints covering ImmobilienScout24.de, Germany's largest real estate portal. Use get_listing_details to retrieve structured property data including rent, room count, living space, heating type, and gallery images for any listing by its expose ID. Additional endpoints resolve location queries to geo identifiers, fetch all listing images with full-size URLs, and return realtor company profiles including ratings and contact details.
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
Location Resolution
The get_geocode_suggestions endpoint accepts a free-text QUERY parameter — a city name, postcode, street, district, train station, POI, or address — and returns an array of matching location objects. Each object includes an id, type (e.g. city, district, postcode), human-readable label, shapeId, and a geopath URI. These identifiers can be used to scope property searches to specific German administrative regions or transport hubs.
Listing Data
The get_listing_details endpoint takes a numeric LISTING_ID (the expose ID visible in any ImmobilienScout24.de listing URL) and returns a structured object. Key fields include baseRent, totalRent, propertyPrice, and an isResidential boolean. The keyValues object holds property-level attributes such as obj_livingSpace, obj_noRooms, obj_balcony, and heating type. The contactData field contains a nested realtorInformation block and contact person details. The galleryData field includes an images array with counts.
Images and Media
The get_listing_images endpoint retrieves all images for a given listing separately from the detail payload. It returns an array of image objects each carrying galleryPictureUrl, fullSizePictureUrl, thumbnailUrl, caption, and type, plus the total imageCount and totalCount of gallery items. This makes it straightforward to build image galleries or download full-resolution assets without parsing the broader listing detail response.
Realtor Profiles
The get_realtor_details endpoint accepts a REALTOR_ID in the format <prefix>.<uuid> and returns company-level information: companyName, logoUrl, profilePageUrl, products, focusType, virtualBadges, and an evaluations object containing rating data. The branchenbuchContactDetails field provides contact person details for the brokerage. If the ID does not match any realtor, the endpoint returns input_not_found.
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?+
- Aggregate German rental listings with price, room count, and living space data for market analysis
- Build a property comparison tool using baseRent, totalRent, and keyValues attributes from get_listing_details
- Download full-resolution listing photos via fullSizePictureUrl for property showcase applications
- Resolve German city names or postcodes to structured geo identifiers for location-scoped search UIs
- Look up realtor ratings and contact details via get_realtor_details to qualify brokerages
- Monitor onTopProduct placement tiers to track premium-listed properties over time
- Enrich CRM records with realtor company data including logos, profile URLs, and virtual badges
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.