ImmoScout24 Germany Real Estate Scraper
Pricing
Pay per event
ImmoScout24 Germany Real Estate Scraper
Scrape property listings from ImmobilienScout24.de — Germany's #1 real estate portal. Extract price, address, area, rooms, energy data, photos, and agent contact info.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract property listings from ImmobilienScout24.de — Germany's largest real estate marketplace. Collect price, address, area, rooms, energy rating, photos, and agent contact details at scale, with no manual browsing.
What does it do?
This actor scrapes property listings from ImmobilienScout24.de — the dominant German real estate portal covering apartments, houses, commercial properties, and land across all of Germany, Austria, and Switzerland. You paste one or more search result URLs, and the actor automatically paginate through results and exports structured data for each listing.
Typical use cases:
- 🏡 Aggregate listings for a specific city, neighbourhood, or price range
- 📊 Build real estate market reports and rent/sale price comparisons
- 🤖 Feed property data into CRMs, analytics dashboards, or price alert systems
- 📋 Monitor competitor listings for real estate agencies and PropTech tools
Who is it for?
🏢 Real estate agencies
Stay ahead of the market. Track competitor listings, monitor price trends in your target districts, and identify undervalued properties before your clients do.
💼 Property investors & funds
Automate market intelligence. Extract asking prices, energy ratings, and location data across hundreds of cities to build proprietary deal-flow pipelines and comparables databases.
🛠️ PropTech startups and analytics firms
Build rental price indexes, neighbourhood value maps, and automated valuation models. Feed IS24 data into your models without paying for enterprise data licences.
📰 Data journalists and researchers
Track rent inflation, analyse housing availability by district, or visualise the spread of energy efficiency ratings across Germany's housing stock.
Why use it?
- ✅ Handles IS24's bot protection automatically — no manual CAPTCHA solving
- ✅ Extracts structured data from IS24's Next.js page model for maximum field coverage
- ✅ Supports all listing types: apartments for rent/sale, houses, commercial, land
- ✅ Paginates automatically across all result pages
- ✅ Works with residential proxy rotation for reliable, long-running scrapes
- ✅ Exports to JSON, CSV, Excel, or via API — native Apify dataset integrations
What data is extracted?
| Field | Description |
|---|---|
listingId | IS24 listing ID |
url | Direct link to the listing page |
title | Listing headline |
listingType | e.g. "Wohnung kaufen", "Haus mieten" |
price | Asking price (€) |
priceRaw | Price as displayed on IS24 |
pricePerSqm | Price per square metre (€/m²) |
currency | EUR |
warmRent | Total rent incl. additional costs (Warmmiete) |
coldRent | Base rent (Kaltmiete) |
additionalCosts | Service charge / Nebenkosten |
deposit | Security deposit (Kaution) |
livingAreaSqm | Living area in m² |
plotAreaSqm | Plot area in m² (houses) |
rooms | Total number of rooms |
bedrooms | Number of bedrooms |
bathrooms | Number of bathrooms |
floor | Floor number |
totalFloors | Total floors in the building |
yearBuilt | Year of construction |
condition | Property condition (e.g. Renoviert) |
heatingType | Heating system type |
energyClass | Energy efficiency class (A+–H) |
energyConsumption | Energy consumption in kWh/(m²·a) |
address | Full address string |
street | Street name |
city | City |
district | Neighbourhood/district |
zipCode | Postal code |
latitude | GPS latitude |
longitude | GPS longitude |
description | Property description text |
features | List of features (balcony, lift, garden…) |
photoUrls | Array of photo URLs |
agentName | Contact person name |
agentCompany | Agency / company name |
agentPhone | Agent phone number |
contactFormUrl | URL to IS24 contact form |
postedAt | Listing publication date |
scrapedAt | Timestamp when data was collected |
How to use it
Step 1 — Open ImmobilienScout24 and filter your search
- Go to immobilienscout24.de
- Select your city, listing type (rent/sale), property type (apartment/house), and any price/size filters
- Copy the full URL from your browser address bar
Example search URLs:
https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufenhttps://www.immobilienscout24.de/Suche/de/hamburg/haus-mieten?price=500.0-1500.0https://www.immobilienscout24.de/Suche/de/muenchen/wohnung-mieten?numberOfRooms=2.0-
Step 2 — Paste URLs into the actor
- Open this actor on Apify
- Paste one or more IS24 search URLs into the Search URLs field
- Set Max listings per URL (start with 20–50 for testing)
Step 3 — Run and download results
Click Start and wait for the run to complete. Results appear in the Dataset tab as they are collected. Download as JSON, CSV, or Excel — or connect to Google Sheets via Apify integrations.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchUrls | array | — | Required. IS24 search result URLs to scrape |
maxListings | integer | 50 | Max listings to collect per URL |
maxPages | integer | 10 | Max search result pages per URL (each page ≈ 20 listings) |
proxy | object | Residential | Proxy configuration — residential recommended |
maxConcurrency | integer | 3 | Parallel browser pages (lower = more stable) |
navigationTimeoutSecs | integer | 60 | Page load timeout in seconds |
maxRequestRetries | integer | 3 | Retry attempts for failed pages |
Output example
{"listingId": "123456789","url": "https://www.immobilienscout24.de/expose/123456789","title": "Helle 3-Zimmer-Wohnung in Berlin-Mitte","listingType": "Wohnung kaufen","price": 450000,"priceRaw": "450.000 €","pricePerSqm": 5625,"currency": "EUR","warmRent": null,"coldRent": null,"additionalCosts": null,"deposit": null,"livingAreaSqm": 80,"plotAreaSqm": null,"rooms": 3,"bedrooms": 2,"bathrooms": 1,"floor": "3","totalFloors": 5,"yearBuilt": 1998,"condition": "Gepflegt","heatingType": "Fernwärme","energyClass": "C","energyConsumption": "89.5 kWh/(m²·a)","address": "Musterstraße 12, 10115 Berlin","street": "Musterstraße 12","city": "Berlin","district": "Mitte","zipCode": "10115","latitude": 52.5208,"longitude": 13.4094,"description": "Wir bieten Ihnen diese helle und geräumige Wohnung...","features": ["Balkon", "Einbauküche", "Aufzug"],"photoUrls": ["https://pictures.immobilienscout24.de/..."],"agentName": "Max Mustermann","agentCompany": "Immobilien GmbH Berlin","agentPhone": "+49 30 12345678","contactFormUrl": "https://www.immobilienscout24.de/expose/123456789#contact","postedAt": "2026-05-01","scrapedAt": "2026-05-10T08:00:00.000Z"}
Tips for best results
💡 Use specific search filters — Set price ranges, room counts, and neighbourhood filters before copying the URL. The more specific your filter, the more relevant your results.
💡 Start small — Set maxListings to 20–50 for test runs before scraping thousands of listings. This keeps costs predictable.
💡 One URL per district/type — For large cities (Berlin, Munich), split by neighbourhood or property type. One search URL per run segment works better than combining too many filters.
💡 Residential proxy is recommended — IS24 has bot protection that blocks datacenter IPs. The default residential proxy setting handles this automatically.
💡 Re-run for freshness — IS24 listings are updated daily. Schedule this actor weekly or monthly to keep your dataset current.
💡 Export to Google Sheets — Use Apify's Google Sheets integration to automatically push results into a spreadsheet after each run.
How much does it cost to scrape ImmobilienScout24?
This actor uses Pay-Per-Event (PPE) billing — you only pay for the listings you extract. There's a small one-time start fee per run.
Pricing tiers
| Plan | Cost per listing |
|---|---|
| FREE | $0.01762 |
| BRONZE | $0.01532 |
| SILVER | $0.01195 |
| GOLD | $0.00919 |
| PLATINUM | $0.00613 |
| DIAMOND | $0.00429 |
Cost examples
Estimates at BRONZE tier ($0.01532/listing) including the $0.005 start fee:
| Listings | Estimated cost |
|---|---|
| 100 listings | ~$1.54 |
| 500 listings | ~$7.67 |
| 2,000 listings | ~$30.65 |
| 10,000 listings | ~$153.25 |
Free plan estimate: Apify's free plan includes $5/month in credits — enough for approximately 270–280 listings at the FREE tier.
Prices shown are for the BRONZE tier and include the $0.005 start fee. Higher-volume plans (GOLD, PLATINUM, DIAMOND) offer significant discounts.
Integrations
🔗 Google Sheets — live property tracking
- Run the actor with your search URLs
- In the Integrations tab, connect the Google Sheets integration
- Map the dataset fields to your spreadsheet columns
- Results automatically append after each run
📊 Power BI / Tableau — market analysis dashboards
Export the dataset as CSV from the Apify console and import into your BI tool. Schedule the actor monthly to refresh your data automatically.
🤖 Zapier / Make — CRM pipeline automation
Connect Apify to Zapier via the Apify → Zapier trigger. When new listings are scraped, automatically create leads in HubSpot, Salesforce, or Pipedrive for matching properties.
📧 Price alert workflows
- Run this actor weekly on your target search URL
- Use Apify's Dataset comparison integration to detect new or reduced listings
- Send email/Slack notifications via Zapier when new matches appear
API usage
Node.js
import ApifyClient from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/immoscout24-de-scraper').call({searchUrls: ['https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen'],maxListings: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Scraped ${items.length} listings`);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("automation-lab/immoscout24-de-scraper").call(run_input={"searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"],"maxListings": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['title']} — {item['priceRaw']}")
cURL
# Start a runcurl -X POST "https://api.apify.com/v2/acts/automation-lab~immoscout24-de-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"],"maxListings": 100}'# Fetch results (replace DATASET_ID with the one from the run response)curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN&format=json"
Using with Claude, ChatGPT, and AI assistants (MCP)
This actor is available as an MCP (Model Context Protocol) tool, letting you query IS24 listings directly from Claude, Cursor, or any MCP-compatible AI assistant.
Claude Code / Claude Desktop
Add this actor as a tool in Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/immoscout24-de-scraper"
Or add to your Claude Desktop config (~/.claude/claude_desktop_config.json):
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com?tools=automation-lab/immoscout24-de-scraper","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Example MCP prompts
Once connected, you can ask your AI assistant:
- "Find 3-bedroom apartments for sale in Munich under €600,000 on ImmobilienScout24"
- "Get 50 rental listings in Hamburg Altona and calculate the average price per m²"
- "Scrape IS24 search results for Berlin Mitte and export them as a table"
VS Code / Cursor
Add to your workspace .vscode/mcp.json:
{"servers": {"apify": {"type": "http","url": "https://mcp.apify.com?tools=automation-lab/immoscout24-de-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Legality and ethical use
ImmobilienScout24 is a publicly accessible website. This actor only collects data that is visible to any website visitor — it does not access private accounts, contact databases, or any non-public data.
Before using this actor, please review:
- ImmobilienScout24 Terms of Use
- Robots.txt guidelines
- The GDPR rules applicable to personal data (agent names and phone numbers) in your jurisdiction
We recommend:
- Respecting IS24's rate limits (the actor does this by default)
- Not scraping personal contact data beyond what is needed for your use case
- Complying with applicable data protection laws when storing agent contact info
Apify's platform terms also apply. This actor is intended for legitimate business intelligence, market research, and analytics use cases.
FAQ
Does this work for Austria (immobilienscout24.at) and Switzerland (immobilienscout24.ch)?
The actor scrapes based on the URL you provide. If you paste an .at or .ch URL, it will attempt to scrape that region. However, IS24's country subdomains may have different page structures — .de is the primary supported target.
Why are some listings missing price or area data?
IS24 allows sellers to publish listings without all fields. If price, livingAreaSqm, or rooms is null, the original listing on IS24 did not include that data.
The run succeeded but my dataset is empty — what happened?
This usually means the search URL returned a bot-challenge page that wasn't fully resolved. Try:
- Using a more specific search URL (add filters)
- Reducing
maxConcurrencyto 1 - Verifying the URL loads correctly in your browser
Can I scrape detail pages for additional fields?
The actor extracts data from IS24's Next.js server-rendered search pages. Detail pages contain additional fields (energy certificates, floor plans) — if you need those, open an issue and we can add a scrapeDetails option.
How long does a run take?
A typical run scraping 100 listings takes 2–5 minutes, including proxy handling. Larger runs (1,000+ listings) take 15–30 minutes.
Related scrapers
Looking for real estate data from other markets? Check out our full portfolio:
- 🇬🇧 Rightmove Scraper — UK property listings
- 🇺🇸 Zillow Scraper — US real estate
- 🇺🇸 Realtor.com Scraper — US listings
- 🇺🇸 Redfin Scraper — US home listings
All scrapers export the same structured format for easy multi-market comparison.