Immoweb.be Scraper with Contacts | Fast & Reliable
Pricing
from $0.70 / 1,000 property listings
Immoweb.be Scraper with Contacts | Fast & Reliable
Extract unlimited Immoweb.be property listings across Belgium with rich property detail, agency contacts, EPC data, media, pricing, and flexible market filters. Built for enterprise-grade Belgian real estate intelligence, lead enrichment, and automated analytics pipelines.
Pricing
from $0.70 / 1,000 property listings
Rating
0.0
(0)
Developer
Fatih Tahta
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Immoweb.be Scraper
Slug: fatihtahta/immoweb-be-scraper
Overview
Immoweb.be Scraper collects structured Belgian real estate listing data, including property identity, pricing, location, building attributes, transaction details, media, contacts, publication metadata, and source context. Immoweb.be is a major Belgian property marketplace, making its public listing data useful for market research, investment analysis, rental monitoring, and property intelligence workflows. The actor turns repeatable search criteria into normalized JSON records that can be exported, scheduled, and connected to downstream systems. It is designed for operationally consistent recurring data acquisition, helping teams validate, monitor, and refresh property datasets without relying on manual collection. Results reflect the public information available at run time and can vary based on listing availability, filters, and source data completeness.
Why Use This Actor
- Market research and analytics teams: collect structured extraction results for pricing analysis, supply tracking, geographic comparisons, and operational reporting.
- Product and content teams: enrich internal property experiences with normalized listing attributes, images, locations, and public availability signals.
- Developers and data engineering teams: feed repeatable collection jobs into downstream systems, warehouses, dashboards, and dataset normalization workflows.
- Lead generation and enrichment teams: build property, agency, and listing datasets for qualification, CRM enrichment, and market intelligence.
- Monitoring and competitive tracking teams: schedule recurring data acquisition to track new listings, price movement, availability, and category-level changes.
Common Use Cases
- Market intelligence: monitor supply, pricing, availability, property categories, bedroom counts, EPC labels, and geographic distribution.
- Lead generation: build targeted prospect lists from public property listings and agency contact information when available.
- Competitive monitoring: track listing movement, new inventory, pricing changes, and market positioning across Belgian real estate segments.
- Catalog and directory building: populate internal property databases with structured public records, media, address data, and transaction attributes.
- Data enrichment: add current public listing attributes to CRM, BI, underwriting, portfolio, or analytics datasets.
- Recurring reporting: schedule periodic runs for dashboards, alerts, and trend analysis across selected locations or property types.
Quick Start
- Choose a
deal_typesuch asbuyorrent, then select aproperty_typethat matches the inventory you want to collect. - Add a Belgian
locationwhen you need a focused market, or leave it empty for Belgium-wide discovery. - Set a small
limit, such as25, for the first validation run. - Run the actor in Apify Console and wait for the dataset to be created.
- Inspect the first records to confirm that fields such as
pricing,location,property, andsource_contextmatch your workflow. - Increase the
limit, add filters, adjustenrich_data, or schedule recurring runs once the output is verified.
Input Parameters
Configure sale or rental listing collection by deal type, property category, optional Belgian location, filters, sorting, enrichment, and result limit.
| Parameter | Type | Description | Default |
|---|---|---|---|
deal_type | string | Listing mode to collect. Allowed values: buy, rent. | buy |
property_type | string | Property category to collect. Allowed values: house, apartment, house_and_apartment, kot, garage, office, business, industry, land, other. | house_and_apartment |
location | string | Belgian city, postal code, district, province, neighborhood, or market. Leave empty for a national search. | - |
min_price | integer | Minimum listing price in EUR. For rental searches, this applies to rental price; for sale searches, it applies to purchase price. | - |
max_price | integer | Maximum listing price in EUR. Leave empty when you do not want an upper price cap. | - |
min_building_year | integer | Earliest construction year to include. | - |
max_building_year | integer | Latest construction year to include. | - |
immediately_available | boolean | When true, only includes listings marked as immediately available. | false |
min_area | integer | Minimum living area in square meters. | - |
max_area | integer | Maximum living area in square meters. | - |
min_bedroom | integer | Minimum number of bedrooms. | - |
max_bedroom | integer | Maximum number of bedrooms. | - |
min_parking | integer | Minimum number of parking spaces required. | - |
3d_tour | boolean | When true, only includes listings with a virtual visit or 360-degree tour where available. | false |
epc_label | array of strings | EPC energy labels to include. Allowed values: A++, A+, A, B, C, D, E, F, G, X. Leave empty to include all available labels. | - |
sort_by | string | Result order. Allowed values: relevance, cheapest, most_expensive, postal_code, newest. | relevance |
enrich_data | boolean | When true, collects richer property listing details, such as full descriptions, all photos, detailed features, agent contacts, and more. | true |
maximize_coverage | boolean | When true, keeps collecting within the selected criteria when a broad search may exceed Immoweb's visible-result limit. | true |
limit | integer | Maximum number of listings to save. Minimum value: 1. Leave empty to collect as many matching listings as are available. | - |
Choosing Inputs
Use deal_type and property_type to define the core market segment before adding optional filters. A specific location is best for city, postal-code, district, province, neighborhood, or local market reporting; leaving it empty is better for broad Belgium-wide discovery. Narrower filters such as price, bedroom count, living area, construction year, immediate availability, parking, 3D tour, and EPC labels produce more targeted datasets, while broader inputs improve discovery. Use maximize_coverage for very broad searches where Immoweb reports more matching listings than are usually visible at once. Use sort_by to prioritize the collection order, for example newest for monitoring or cheapest for affordability analysis. Start with a small limit to validate the output shape, then increase it after confirming that the results match your intended scope.
Example Inputs
Broad discovery with a conservative limit
{"deal_type": "buy","property_type": "house_and_apartment","sort_by": "relevance","enrich_data": false,"limit": 25}
Brussels rental monitoring
{"deal_type": "rent","property_type": "apartment","location": "Brussels","max_price": 1800,"min_bedroom": 1,"sort_by": "newest","limit": 50}
Targeted sale search with energy and size filters
{"deal_type": "buy","property_type": "house","location": "Antwerp","min_area": 120,"min_bedroom": 3,"epc_label": ["A", "B", "C"],"enrich_data": true,"limit": 100}
Output
The actor writes one JSON object per Immoweb property listing to the default Apify dataset. Each record uses a normalized real estate envelope with stable snake_case field names and source-specific details preserved in nested objects.
Record envelope and stable identifiers
Each dataset item has record_type: "property_listing". Use record_id as the primary idempotency key for deduplication and upserts. It is the Immoweb listing identifier represented as a string so it remains safe across warehouses, spreadsheets, and CRM systems.
Use source_context.canonical_url, source_context.listing_url, and source_context.fingerprint as audit or fallback matching keys. source_context.external_ids preserves the listing id plus advertisement or external references when Immoweb provides them.
Example
{"record_type": "property_listing","record_id": "21548253","source_context": {"source_name": "Immoweb","source_domain": "www.immoweb.be","source_url": "https://www.immoweb.be/en/search-results/apartment/for-rent/brussels?countries=BE&page=1","canonical_url": "https://www.immoweb.be/en/classified/apartment/for-rent/ixelles/1050/21548253","listing_url": "https://www.immoweb.be/en/classified/apartment/for-rent/ixelles/1050/21548253","fingerprint": "838bb69ca1b8f627fac4","seed_type": "search","page_index": 1,"search_filters": {"deal_type": "rent","property_type": "apartment","sort_by": "relevance"},"external_ids": {"listing_id": "21548253"}},"entity": {"title": "Ixelles I Châtelain area","description": "Ideally located in the heart of the Châtelain district...","url": "https://www.immoweb.be/en/classified/apartment/for-rent/ixelles/1050/21548253","category": "APARTMENT","external_ids": {"listing_id": "21548253"}},"listing": {"listing_id": "21548253","listing_type": "APARTMENT","listing_subtype": "DUPLEX","transaction_type": "FOR_RENT","transaction_subtype": "RENT_REGULAR","updated_at": "2026-05-20T10:00:00Z","publication": {"updated_at": "2026-05-20T10:00:00Z"},"flags": {"is_new_classified": true},"transaction_details": {"type": "FOR_RENT","availability_date": "2026-08-01","certificates": {"epc_score": "C","primary_energy_consumption_per_sqm": 149,"carbon_emission": 29},"rental": {"monthly_rental_price": 2900,"monthly_rental_costs": 160,"is_furnished": false}}},"pricing": {"price": 2900,"price_text": "€2,900 (+ €160)","short_display_price": "€2.9K","accessibility_price": "2900€ + 160€ per month","currency": "EUR","price_type": "residential_monthly_rent","additional_value": 160,"details": {"main_value": 2900,"main_display_price": "€2,900 (+ €160)","label": "Requested monthly rental price","language": "en"}},"location": {"country": "Belgium","region": "Brussels","locality": "Ixelles","postal_code": "1050","street": "Rue du Chatelain","number": "34","latitude": 50.825382,"longitude": 4.3620849},"property": {"property_type": "APARTMENT","property_subtype": "DUPLEX","bedroom_count": 2,"bathroom_count": 2,"floor_area_sqm": 190,"building": {"condition": "AS_NEW","construction_year": 1910},"energy": {"heating_type": "GAS","has_double_glazing": true,"epc_score": "C"},"has_garden": true,"garden_surface": 110,"has_terrace": true,"terrace_surface": 20},"availability": {"available_from": "2026-08-01","availability_date": "2026-08-01"},"media": {"main_image_url": "https://media-resize.immowebstatic.be/classifieds/example/736x736/photo.jpg","image_urls": ["https://media-resize.immowebstatic.be/classifieds/example/736x736/photo.jpg"],"has_virtual_tour": false},"contact_details": {"name": "Example Realty Brussels","contacts": [{"name": "Example Realty Brussels","email": "brussels-office@example.com","phone_number": "+3225550199"}]},"relationships": {"agency": {"name": "Example Realty Brussels"},"contacts": [{"name": "Example Realty Brussels","email": "brussels-office@example.com","phone_number": "+3225550199"}]},"metrics": {"bookmark_count": 12,"view_count": 340},"attributes": {"has_sections": {"has_general_section": true,"has_energy_section": true},"visual_context": {"has_virtual_staging": false}}}
Field Reference
record_type (string, required): Stable discriminator. Immoweb listing rows use property_listing.
record_id (string, required): Stable Immoweb listing id used for upserts and deduplication.
source_context (object, required): Source, crawl, and audit context. Common fields include source_name, source_domain, source_url, canonical_url, listing_url, fingerprint, seed_id, seed_type, location_query, page_index, search_filters, and external_ids.
entity (object, required): Main public identity for the listing, including title, description, url, category, and external_ids.
listing (object, optional): Listing-level business context, including listing_id, listing_type, listing_subtype, transaction_type, transaction_subtype, listing_status, is_new_listing, publication dates, public flags, and the preserved transaction_details object.
pricing (object, optional): Price and rent information. Common fields include price, price_text, short_display_price, accessibility_price, currency, price_type, additional_value, range values, and details with the source price payload.
location (object, optional): Address and geography, including country, region, province, district, locality, postal code, street, house number, floor, coordinates, place names, and source location classifications when available.
property (object, optional): Physical property attributes, including property_type, property_subtype, room counts, floor_area_sqm, land_area_sqm, parking counts, building details, kitchen/living-room details, energy attributes, certificates, garden/terrace fields, amenities, and public alternative descriptions.
availability (object, optional): Availability fields such as available_from and the source availability_date.
media (object, optional): Listing media, including main_image_url, image_urls, rich pictures, virtual tour links, floor plans, specifications, documents, legal documents, and any remaining media details.
contact_details (object, optional): Direct contact channels and display names, including agency/contact names and the public contacts array when available.
relationships (object, optional): Linked real estate entities such as agency, contacts, and project/development details.
metrics (object, optional): Public listing metrics such as bookmark and view counts when Immoweb exposes them.
attributes (object, optional): Preservation bucket for useful source details that do not fit a stronger normalized group. It can include has_sections, visual_context, and source_specific.
Data Quality, Guarantees, And Handling
- Structured records: results are normalized into predictable JSON objects for downstream use.
- Best-effort extraction: fields may vary by region, session, availability, listing type, or source-side presentation changes.
- Optional fields: null-check optional fields in downstream code, especially media, contact, certificate, and detailed property attributes.
- Deduplication: use
idas the recommended stable key, withsource_context.canonical_urlorsource_context.fingerprintas useful fallback keys. - Freshness: results reflect the publicly available data at run time.
- Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, or internal applications.
Tips For Best Results
- Start with a small
limitto validate the output shape before scaling up. - Use one geography, property category, or market segment per run when you need cleaner segmentation.
- Leave optional filters empty when the goal is broad discovery.
- Add price, bedroom, area, construction-year, EPC, and availability filters gradually to understand how each field changes coverage.
- Use
sort_by: "newest"for recurring monitoring andsort_by: "relevance"for general discovery. - Enable
enrich_datawhen deeper property records are more important than faster lightweight collection. - Use stable identifiers for deduplication when storing results over time.
How to Run on Apify
- Open the actor in Apify Console.
- Configure the available input fields for your target scope.
- Set the maximum number of outputs to collect with
limit. - Click Start and wait for the run to finish.
- Open the dataset and review the first records.
- Download results in JSON, CSV, Excel, or another supported format.
Scheduling & Automation
Scheduling
Automated Data Collection
Schedule runs to keep Belgian property datasets current without manual collection. Recurring runs are useful for price monitoring, new-listing alerts, availability checks, and periodic reporting.
- Navigate to Schedules in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing
Integration Options
- BI dashboards: monitor pricing, availability, property type mix, EPC distribution, and geographic coverage over time.
- Data warehouses: load normalized listing records into historical tables for trend analysis and reporting.
- CRM enrichment: sync public property, agency, and contact attributes into account or lead records.
- Google Sheets or Airtable: review smaller market segments, validation runs, and curated lead lists with business users.
- Webhooks: trigger ingestion, validation, notification, or alerting workflows after each completed run.
- ETL and enrichment pipelines: merge listing data with internal portfolio, underwriting, or market intelligence datasets.
Export Formats And Downstream Use
Apify datasets can be exported or consumed by downstream systems for reporting, analysis, and operational workflows.
- JSON: for APIs, applications, and data pipelines
- CSV or Excel: for spreadsheet workflows and manual review
- API access: for automated ingestion into internal systems
- BI and warehouses: for reporting, dashboards, and historical analysis
Performance
These are estimated run times and can vary by input scope:
- Small runs (< 1,000 outputs): ~3–5 minutes
- Medium runs (1,000–5,000 outputs): ~5–15 minutes
- Large runs (5,000+ outputs): ~15–30 minutes
Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.
Limitations
- Availability depends on what https://www.immoweb.be publicly exposes at run time.
- Some optional fields may be missing on sparse listings or records with limited public information.
- Very broad searches may take longer or require higher
limitvalues to capture enough records. - Target-side changes can affect field availability, naming, formatting, or visible result counts.
- Regional, account, language, or availability differences may change which listings and attributes are visible.
- Media, contact, certificate, and engagement fields are available only when present in the public listing data.
Troubleshooting
- No results returned: check filters, location or category spelling, and whether Immoweb has matching public records for the selected scope.
- Fewer results than expected: broaden filters, raise
limit, or verify that the target contains enough matching public listings. - Some fields are empty: optional fields depend on what each listing publicly provides.
- Run takes longer than expected: reduce scope, lower
limitfor validation, or split broad collection into smaller market segments. - Output changed: compare the current output with the field reference and include a small sample when reporting the issue.
FAQ
What data does this actor collect?
It collects public Immoweb property listing records, including listing identifiers, URLs, titles, descriptions, property type, pricing, location, property attributes, transaction details, media, contact information when available, publication metadata, flags, metrics, and source context.
Can I filter by location, category, price, or other criteria?
Yes. The actor supports location, deal_type, property_type, price range, construction year, immediate availability, living area, bedroom count, parking, 3D tour availability, EPC labels, sorting, enrichment, and result limits.
Can I filter by date?
There is no date input parameter in the current schema. For monitoring recently active listings, use sort_by: "newest" with a recurring schedule and compare results across runs.
Why did I receive fewer results than my limit?
The selected filters may match fewer public listings than the requested limit, or some listings may not expose enough information to be saved as complete records.
Can I schedule recurring runs?
Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron schedule with the same input settings.
How do I avoid duplicates across runs?
Use id as the primary deduplication key. You can also keep source_context.canonical_url and source_context.fingerprint as fallback or audit fields.
Can I export the data to CSV, Excel, or JSON?
Yes. Apify datasets support exports in JSON, CSV, Excel, and other formats available in Apify Console.
Does this actor collect private data?
The actor is intended to collect publicly available listing information from Immoweb. Users are responsible for using the data in accordance with applicable laws, regulations, and platform terms.
What should I include when reporting an issue?
Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when helpful.
Compliance & Ethics
Responsible Data Collection
This actor collects publicly available Belgian real estate listing information from https://www.immoweb.be for legitimate business purposes, including:
- Real estate research and market analysis
- Property monitoring, pricing intelligence, and inventory reporting
- CRM enrichment, data validation, and operational analytics
This section is informational and not legal advice. Users are responsible for ensuring that their collection and use of data complies with applicable laws, regulations, and the target site's terms.
Best Practices
- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA
Support
For help, use the actor page or Issues section. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample if it helps explain the issue.