Real Estate Property Listings & Market Intelligence API
Pricing
from $0.20 / 1,000 results
Real Estate Property Listings & Market Intelligence API
Enterprise real estate scraper and property market intelligence engine. Extracts normalized property listings, price-per-sqm metrics, surface area, room counts, energy ratings, and agency contacts for PropTech, investors, and B2B lead generation.
Pricing
from $0.20 / 1,000 results
Rating
0.0
(0)
Developer
Akkouch Sofiane
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
High-throughput real estate listing and property market intelligence engine engineered for PropTech platforms, real estate investment funds, asset managers, and B2B brokerage prospecting.
Instead of relying on brittle headless browsers that consume excessive compute units and fail on layout shifts, this Actor queries structured JSON property endpoints, official municipal geocoding APIs (api-adresse.data.gouv.fr), and Schema.org RealEstateListing feeds directly over asynchronous httpx connections. Every record is normalized, enriched with automated price-per-square-meter ($\text{price} / \text{m}^2$) metrics and DPE energy ratings, and validated through Pydantic v2 before storage.
Core Capabilities & Architectural Advantages
| Feature | Technical Implementation | Value for PropTech & Investors |
|---|---|---|
| Automated Price / $\text{m}^2$ Valuation | Computes pricePerSqm across living (surfaceArea) and plot (landArea) surfaces automatically | Instant detection of undervalued properties and neighborhood pricing anomalies without post-processing |
| Municipality & INSEE Resolution | Resolves city names, arrondissements, and postal codes via the French National Address Base (BAN) | Eliminates ambiguous location matching across metropolitan areas (Paris, Lyon, Bordeaux, Nice, etc.) |
| DPE Energy Rating Enrichment | Concurrent asynchronous lookup of official Energy Performance (A to G class) | Critical for evaluating renovation CapEx and regulatory rental compliance (passoires thermiques F/G) |
| Agency & Brokerage Attribution | Extracts agency name, branch code, direct phone number (agentPhone), and canonical listing URL | Ready-to-use B2B lead lists for mortgage brokers, SaaS vendors, renovation contractors, and syndics |
| Universal Direct URL Parser | Parses Schema.org JSON-LD (RealEstateListing, Apartment, SingleFamilyResidence, Offer) | Allows on-demand ingestion of custom brokerage or developer pages alongside city-wide searches |
| Low-Overhead HTTPX Engine | Runs comfortably inside a 128 MB–256 MB container without Chromium overhead | Up to 15x lower Apify Compute Unit consumption compared to browser-based scrapers |
High-ROI Use Cases
1. Automated Deal Sourcing & Undervalued Asset Detection
Configure scheduled runs across target municipalities with strict maxPrice, minSurfaceArea, and minRooms thresholds. Pipe the output Dataset into Make, n8n, or Airtable to trigger instant Slack or email alerts whenever a listing drops below your target pricePerSqm benchmark or carries an F/G energy rating suitable for value-add renovation.
2. B2B Lead Generation for Real Estate Service Providers
Extract active real estate agencies (agentOrAgency), direct branch phone numbers (agentPhone), and active inventory volumes by postal code. Ideal for PropTech SaaS sales teams, property photography studios, energy audit firms, and commercial insurance brokers building hyper-targeted outbound campaigns in Clay or HubSpot.
3. Quantitative Market Research & Valuation Indexes
Aggregate thousands of standardized property records (price, pricePerSqm, surfaceArea, rooms, bedrooms, latitude, longitude) into BigQuery, Snowflake, or Power BI to monitor real-time supply levels, price dispersion, and asset-class breakdowns (apartment, house, commercial, land).
Input Configuration Reference
| Parameter | Type | Default | Description |
|---|---|---|---|
locations | array<string> | ["Paris", "Lyon", "Bordeaux"] | Target cities, municipalities, or postal codes to query (e.g., "Paris", "69006", "Bordeaux", "Marseille", "Nice"). |
propertyTypes | array<string> | ["apartment", "house", "commercial"] | Filter by normalized asset class: "apartment", "house", "commercial", or "land". |
transactionType | string | "sale" | Filter by deal type: "sale" (acquisition), "rent" (leasing), or "all". |
minPrice | integer | 50000 | Minimum listing price threshold in local currency (0 disables the minimum filter). |
maxPrice | integer | 0 | Maximum listing price threshold in local currency (0 disables the maximum limit). |
minSurfaceArea | integer | 15 | Minimum floor area in square meters ($\text{m}^2$). |
minRooms | integer | 1 | Minimum number of main rooms (pièces principales). |
targetUrls | array<string> | [] | Optional list of direct property or brokerage URLs to parse via Schema.org JSON-LD. |
maxResults | integer | 25 | Maximum number of validated listings to extract per target location (1–500). |
Example Input JSON
{"locations": ["Paris","Lyon","Bordeaux"],"propertyTypes": ["apartment","house"],"transactionType": "sale","minPrice": 150000,"maxPrice": 950000,"minSurfaceArea": 30,"minRooms": 2,"targetUrls": [],"maxResults": 25}
Output Dataset Schema Reference
Every item pushed to the default Apify Dataset conforms strictly to .actor/dataset_schema.json:
| Field | Type | Description |
|---|---|---|
propertyId | string | Deterministic unique identifier for deduplication across runs. |
propertyTitle | string | Normalized headline of the property listing. |
price | number | Total listed price in local currency. |
pricePerSqm | number | null | Automatically calculated price per square meter ($\text{price} / \text{surfaceArea}$). |
currency | string | ISO 4217 currency code (EUR). |
location | string | Complete formatted address string (street, postal code, city). |
city | string | null | Normalized municipality name. |
postalCode | string | null | Postal or ZIP code. |
country | string | ISO country code (FR). |
surfaceArea | number | null | Living or commercial floor area in square meters ($\text{m}^2$). |
landArea | number | null | Plot or land area in square meters ($\text{m}^2$), when applicable. |
rooms | integer | null | Total number of main rooms. |
bedrooms | integer | null | Number of bedrooms. |
propertyType | string | Normalized asset category (apartment, house, commercial, land). |
transactionType | string | Normalized transaction type (sale or rent). |
energyRating | string | null | Official DPE energy performance class (A through G). |
agentOrAgency | string | Name of the listing real estate agency or brokerage branch. |
agentPhone | string | null | Direct telephone number of the listing agency branch. |
agentEmail | string | null | Public contact email of the agency, when available. |
latitude | number | null | WGS84 geographic latitude coordinate. |
longitude | number | null | WGS84 geographic longitude coordinate. |
listingUrl | string | Canonical URL to the full property listing. |
sourcePlatform | string | Identifier of the upstream data source (laforet-immo-api or direct-jsonld). |
listedAt | string | null | ISO 8601 publication timestamp of the listing. |
scrapedAt | string | ISO 8601 UTC timestamp of extraction. |
Sample Output Record
{"propertyId": "lf-53007812","propertyTitle": "Appartement Paris 3 pièce(s) 64.50 m2","price": 585000.0,"pricePerSqm": 9069.77,"currency": "EUR","location": "75015, PARIS","city": "Paris","postalCode": "75015","country": "FR","surfaceArea": 64.5,"landArea": null,"rooms": 3,"bedrooms": 2,"propertyType": "apartment","transactionType": "sale","energyRating": "D","agentOrAgency": "Laforêt PARIS 15 CONVENTION","agentPhone": "0145321010","agentEmail": null,"latitude": 48.839612,"longitude": 2.296145,"listingUrl": "https://www.laforet.com/agence-immobiliere/paris15convention/acheter/paris-15/appartement-3-pieces-53007812","sourcePlatform": "laforet-immo-api","listedAt": "2026-10-30T14:20:00+00:00","scrapedAt": "2026-10-31T22:55:00.114209+00:00"}
Programmatic Usage (Python SDK)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_API_TOKEN")run_input = {"locations": ["Paris", "Lyon", "Bordeaux"],"propertyTypes": ["apartment", "house"],"transactionType": "sale","minPrice": 150000,"minSurfaceArea": 30,"maxResults": 50,}run = client.actor("kleioks/real-estate-market-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"[{item['city']} {item['postalCode']}] {item['propertyTitle']} — "f"{item['price']:,.0f} {item['currency']} ({item['pricePerSqm']} €/m²) | "f"DPE: {item['energyRating']} | Agency: {item['agentOrAgency']} ({item['agentPhone']})")
No-Code, Make, n8n, Clay & AI Agent (MCP) Integrations
1. Make.com & n8n Automated Deal-Sourcing Alerts
- Schedule the Apify Node in n8n or Make.com to run every morning across your target cities (
Paris,Lyon,Bordeaux,Nice,Nantes). - Add a router condition filtering properties where
pricePerSqmis 15% below your neighborhood threshold or whereenergyRatingis"F"or"G"(passoires thermiques with high negotiation margin). - Send instant deal cards with
listingUrl,price,surfaceArea, andagentPhoneto Slack, Telegram, Airtable, or Notion.
2. Clay.com Real Estate Agency B2B Prospecting
Import the dataset directly into Clay using agentOrAgency, agentPhone, city, and postalCode to build segmented outbound lists of active real estate brokerages for PropTech SaaS, mortgage brokerage partnerships, or renovation services.
3. Model Context Protocol (MCP) for Claude, Cursor & AI Agents
Connect this Actor to Claude Desktop, Cursor, or custom PropTech AI assistants via the official Apify MCP server:
{"mcpServers": {"apify-real-estate": {"command": "npx","args": ["-y","@apify/actors-mcp-server","--actors","kleioks/real-estate-market-scraper"],"env": {"APIFY_TOKEN": "YOUR_APIFY_API_TOKEN"}}}}
Frequently Asked Questions (FAQ)
How does this Real Estate scraper calculate Price per Square Meter ($\text{price}/\text{m}^2$)?
Every extracted property record is validated through Pydantic v2, which automatically divides the listed price by the verified surfaceArea (Carrez or living floor area) and rounds pricePerSqm to two decimal places—delivering ready-to-analyze valuation metrics with zero spreadsheet formulas.
Can I filter properties by Energy Performance Rating (DPE A to G)?
Yes. The Actor asynchronously enriches listings with their official DPE class (A through G) (energyRating), allowing institutional investors and marchands de biens to identify thermal-renovation opportunities (F and G ratings) immediately.
Can I scrape custom real estate agency URLs in addition to city searches?
Yes. Any URL passed in targetUrls is parsed using a universal Schema.org JSON-LD (RealEstateListing, Apartment, SingleFamilyResidence, Offer) and contact extractor.
Complete B2B Intelligence Suite by Kleioks
Combine this Actor with our specialized B2B data engines on the Apify Store to build end-to-end GTM, RevOps, and market research pipelines:
| Actor | Primary B2B Use Case | Store Link |
|---|---|---|
| Real Estate Market Intelligence API | Normalized property listings, automated price/m² valuation, DPE ratings & agency contacts | Open on Apify Store |
| Google Maps B2B Lead Machine | High-speed local business lead extractor (phone, website, rating & missing-website signals) | Open on Apify Store |
| Multi-ATS Career Jobs API | Track real-time hiring intent & tech-stack signals across Greenhouse, Lever, Ashby & Workable | Open on Apify Store |
| Reddit B2B Buying Intent Scraper | Monitor competitor churn, software recommendations & high-intent buyer threads on Reddit | Open on Apify Store |
| B2B Social Leads & Intent Extractor | Discover SaaS founders, developers & decision-makers across Bluesky, GitHub & Hacker News | Open on Apify Store |
| Influencer & Creator Discovery API | Extract TikTok, Instagram & YouTube creator profiles, engagement rates & verified PR emails | Open on Apify Store |