Real Estate · Vibe Scraping avatar
Real Estate · Vibe Scraping

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Real Estate · Vibe Scraping

Real Estate · Vibe Scraping

The last real estate scraper you'll need. Our AI analyzes any listing site, builds a custom crawler, and delivers rich property data in a consistent schema.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(2)

Developer

Extralt

Extralt

Maintained by Community

Actor stats

3

Bookmarked

17

Total users

6

Monthly active users

8 hours ago

Last modified

Share


Real Estate · Vibe Scraping


One actor, any real estate website

Part of our Vibe Scraping series:
AI-built crawlers for structured data extraction.




⚠️ Beta Release

This actor is currently in beta. We're actively improving based on feedback. Report issues on the issues tab.

🔥 Why This Actor

The last real estate scraper you'll need. One actor, any listing site, consistent schema.

  • Any real estate site: Works on most listing sites out of the box — no hunting for site-specific actors
  • Consistent schema: Same property structure across all sites — no per-site field mapping
  • Portable: Reuse across portals with consistent output for your pipeline
  • Fast & cheap: Custom Rust engine — no AI during extraction, orders of magnitude faster than LLM-based scraping

✨ Use Cases

  • Market Analysis: Monitor property prices and trends across multiple listing sites
  • Lead Generation: Track new listings across agencies and portals
  • Investment Research: Aggregate property data from entire markets
  • Multi-portal Aggregation: Combine listings from dozens of sites into one consistent dataset

💡 About Extralt

We're rethinking web scraping. Our crawlers are generated by AI but run as compiled code — giving you enterprise-scale performance without the brittleness of traditional scrapers or the cost of pure AI solutions.

🪙 Pricing

This actor uses a pay-per-event pricing model — you only pay for successfully extracted pages:

SubscriptionDiscountPrice per dataset item
StarterBronze$0.002
ScaleSilver$0.0015
BusinessGold$0.001

Example: Extracting 1,000 pages on a Business plan costs: 1,000 × $0.001 = $1.00

All-inclusive pricing: We only use premium residential proxies, with no hidden costs or add-ons.

Why paid plans only? Apify excludes free plan users from revenue calculations (see docs), so we restrict this actor to paying customers only.

Concurrent runs: You can run up to 3 Extralt actors simultaneously. If you need more concurrent runs, please wait for one to finish before starting a new one. This number will increase as we scale up our infrastructure.

⬇️ Input

ParameterRequiredDescription
Start URLsYesOne or more URLs to begin crawling
CountryYesProxy location for regional content
BudgetNoMaximum number of listings to extract
Graph ModeNoAlso extract non-item pages and generate site structure

Start URLs

The crawler adapts based on URL type:

  • Listing/search page: Follows pagination, extracts listings until budget is reached
  • Any other page: Parses sitemap or follows internal links

Constraints:

  • All URLs must be from the same host
  • URLs should match your target country (e.g., example.fr or example.com/fr for France)
  • Only real estate URLs are supported (this actor uses a listing-specific schema)

Graph Mode

Extracts all page types (Home, List, Item, Other) and generates a site structure graph.

When to use: You need to understand the website's architecture before extraction.

When to skip: You just want listing data. Non-graph mode is faster, cheaper, and better leverages sitemaps.

For more details about graph mode, see the Graph · Vibe Scraping actor.

⬆️ Output

1. Dataset

Each extracted item contains metadata and extracted data:

FieldDescription
extracted_atUnix timestamp of extraction
urlPage URL
page_kindPage type: home, list, item, or other
titlePage title
dataExtracted listing data (item pages only)
outbound_linksLinks found on the page

Use the Overview view in Apify to browse results as a formatted table, or download in JSON, CSV, HTML, or Excel.

Page Kind

The crawler classifies each page into one of four kinds:

Page KindDescriptionExample
homeMain entry point of the sitehttps://www.zillow.com/
listCategory or collection pages listing multiple itemshttps://www.zillow.com/homes/3227_rid/
itemPages containing 1 main itemhttps://www.zillow.com/homedetails/357-Vallejo-St-361A-San-Francisco-CA-94131/459839930_zpid/
otherLanding, navigation, help, or non-content pageshttps://www.zillow.com/browse/homes/

Data

The data field is only present for item pages. See below for the extraction schema as well as an example.

The crawler extracts different links depending on the page type:

Page KindGraph Mode OnlyLinks Extracted
homeYesHeader navigation links only
listYesItem pages in the catalog (ignores navigation, header, footer)
itemNoRelated / recommended listings
otherYesAll content links (excludes header/footer navigation)

Dataset Views

Use the Overview view to browse all fields, or the Highlight view for a quick glance at key listing info (title, city, price, image).

Dataset Overview

Dataset Highlight

Listing Data Schema

The data field contains comprehensive property information. Fields depend on what's available on the target website.

{
"breadcrumbs": {
"description": "Page navigation breadcrumbs.",
"type": "string"
},
"categories": {
"description": "List of category names.",
"type": "array"
},
"condition": {
"description": "Condition of the property (e.g., New construction, Renovated, Good, Needs renovation).",
"type": "string"
},
"description": {
"description": "Detailed description of the property.",
"type": "string"
},
"energy_rating": {
"description": "Energy efficiency rating.",
"type": "string"
},
"features_dict": {
"description": "Dictionary of additional property details.",
"type": "dict"
},
"features_list": {
"description": "List of features and amenities.",
"type": "array"
},
"floor_level": {
"description": "Floor level for apartments.",
"type": "string"
},
"floor_size": {
"description": "Interior living area with unit.",
"type": "string"
},
"furnished": {
"description": "Furnishing status. Primarily relevant for rentals.",
"type": "string"
},
"heating_type": {
"description": "Type of heating.",
"type": "string"
},
"identifiers": {
"description": "Listing identifiers.",
"properties": {
"listing_id": {
"description": "Unique identifier for this listing on the website.",
"type": "string"
},
"reference_number": {
"description": "Reference number or MLS ID used by agents/agencies.",
"type": "string"
}
},
"type": "record"
},
"images": {
"description": "List of image URLs for the property.",
"type": "array"
},
"listing_date": {
"description": "Date the listing was published on the website.",
"type": "date"
},
"location": {
"description": "Property location details.",
"properties": {
"address": {
"description": "Street address.",
"type": "string"
},
"city": {
"description": "City name.",
"type": "string"
},
"coordinates": {
"description": "Geographic coordinates.",
"properties": {
"latitude": {
"description": "Latitude coordinate.",
"type": "number"
},
"longitude": {
"description": "Longitude coordinate.",
"type": "number"
}
},
"type": "record"
},
"country": {
"description": "Country name or code.",
"type": "string"
},
"neighborhood": {
"description": "Neighborhood, district, or area name if displayed.",
"type": "string"
},
"postal_code": {
"description": "Postal or ZIP code.",
"type": "string"
},
"region": {
"description": "State, province, or region.",
"type": "string"
}
},
"type": "record"
},
"lot_size": {
"description": "Total land/lot size with unit.",
"type": "string"
},
"main_image": {
"description": "Main image URL of the property.",
"type": "url"
},
"number_of_bathrooms": {
"description": "Number of bathrooms.",
"type": "number"
},
"number_of_bedrooms": {
"description": "Number of bedrooms.",
"type": "number"
},
"number_of_rooms": {
"description": "Total number of rooms.",
"type": "number"
},
"offer": {
"description": "Offer details including price, agent/seller, and availability.",
"properties": {
"agent": {
"description": "Agent or seller information.",
"properties": {
"email": {
"description": "Contact email address.",
"type": "string"
},
"name": {
"description": "Name of the agent, agency, or seller.",
"type": "string"
},
"phone": {
"description": "Contact phone number.",
"type": "string"
},
"type": {
"description": "Type of seller (typically agency, private, developer)",
"type": "string"
}
},
"type": "record"
},
"price": {
"description": "Price information for the property.",
"properties": {
"amount": {
"description": "Listed price amount. For rentals, this is typically monthly rent.",
"type": "number"
},
"currency": {
"description": "Currency code (e.g., EUR, USD, GBP).",
"type": "string"
},
"price_per_sqm": {
"description": "Price per square meter/foot.",
"type": "number"
},
"price_period": {
"description": "Price period for rentals (e.g., 'per month', 'per week', 'per year').",
"type": "string"
},
"price_type": {
"description": "Type of price if specified (e.g., 'Asking price', 'Fixed price', 'Negotiable', 'Auction').",
"type": "string"
}
},
"type": "record"
}
},
"type": "record"
},
"orientation": {
"description": "Property orientation or exposure.",
"type": "string"
},
"outdoor_space": {
"description": "Outdoor space details.",
"type": "string"
},
"parking": {
"description": "Parking information.",
"type": "string"
},
"property_type": {
"description": "Type of property.",
"type": "string"
},
"subtitle": {
"description": "Subtitle for the listing.",
"type": "string"
},
"title": {
"description": "Title of the listing.",
"type": "string"
},
"total_floors": {
"description": "Total number of floors in the building.",
"type": "number"
},
"transaction_type": {
"description": "Type of transaction.",
"options": [
"sale",
"rent"
],
"type": "enum"
},
"videos": {
"description": "List of video URLs for the property.",
"type": "array"
},
"virtual_tour_url": {
"description": "URL for 360� virtual tour or 3D walkthrough, if available.",
"type": "url"
},
"year_built": {
"description": "Year the property was built.",
"type": "number"
}
}

Example Output

This page was extracted from https://www.zillow.com:

{
"extracted_at": 1764864060100,
"url": "https://www.zillow.com/homedetails/650-Pendlebury-Ln-Blackfoot-ID-83221/119384950_zpid/",
"page_kind": "item",
"title": "650 Pendlebury Ln, Blackfoot, ID 83221",
"data": {
"breadcrumbs": null,
"categories": null,
"condition": "Updated",
"description": "Move-in ready Blackfoot home featuring new carpet and hardwood bamboo flooring. Enjoy main-floor living with a spacious primary bedroom and updated ensuite bathroom, plus convenient main-level laundry. An oversized attached two-car garage offers great storage and parking. Brand new roof, mature landscaping including backyard fruit tree. Ready for new owners!",
"energy_rating": null,
"features_dict": {
"HOA": "$-- HOA",
"Zestimate": "$--",
"Pricepersqft": "$139/sqft"
},
"features_list": [
"Garage",
"Updated Bathroom"
],
"floor_level": null,
"floor_size": "3237 sqft",
"furnished": null,
"heating_type": null,
"identifiers": {
"listing_id": "",
"reference_number": null
},
"images": [
"https://photos.zillowstatic.com/fp/d9fa3a8a78bae3f88f6b9316e55d1d32-cc_ft_1536.jpg"
],
"listing_date": null,
"location": {
"address": "650 Pendlebury Ln",
"city": "Blackfoot",
"coordinates": {
"latitude": 43.179153,
"longitude": -112.33614
},
"country": "USA",
"neighborhood": null,
"postal_code": "83221",
"region": "ID"
},
"lot_size": "0.34 Acres Lot",
"main_image": "https://photos.zillowstatic.com/fp/d9fa3a8a78bae3f88f6b9316e55d1d32-cc_ft_1536.jpg",
"number_of_bathrooms": 4,
"number_of_bedrooms": 5,
"number_of_rooms": null,
"offer": {
"agent": null,
"price": {
"amount": 450000,
"currency": "USD",
"price_per_sqm": 139,
"price_period": null,
"price_type": null
}
},
"orientation": null,
"outdoor_space": "Deck",
"parking": "Garage",
"property_type": "Single Family Residence",
"subtitle": "Price cut: $9K (12/4)",
"title": "650 Pendlebury Ln, Blackfoot, ID 83221",
"total_floors": 1,
"transaction_type": "sale",
"videos": null,
"virtual_tour_url": null,
"year_built": 1999
},
"outbound_links": []
}

2. Key-Value Store

Only in Graph Mode, see our Graph Actor for more details.

⚙️ Under the Hood

How It Works

  1. First run — AI analyzes the site and generates a custom crawler (3-5 minutes)
  2. Subsequent runs — Crawler is reused, extraction starts immediately

The crawler is regenerated when you change the website or country.

Why It's Fast

Unlike LLM-based scrapers that call AI for every page, we use AI once to generate a compiled Rust extractor. This means:

  • No per-page AI costs — extraction runs as pure code
  • High throughput — up to 50 pages/second (3,000/minute)
  • Consistent results — same extractor, deterministic output

Infrastructure

Extraction runs on our dedicated infrastructure, not Apify's platform. There may be a brief delay (~15-20s) while provisioning resources before the crawl starts.

Stealth

Our Rust engine includes custom HTTP and browser implementations built specifically for web scraping:

  • Smart request routing (Chrome rendering, fast HTTP, direct API calls)
  • Anti-detection measures to avoid blocks
  • Premium residential proxies included

🛠️ Troubleshooting

Extraction taking longer than expected?

  • First run: AI is generating your custom crawler (3-5 minutes). Subsequent runs start immediately.
  • Provisioning: Brief delay (~15-20s) while infrastructure spins up.

Getting blocked or no results?

  • Verify the start URL is accessible in your browser
  • Ensure the selected country matches the website's region
  • Try a smaller budget to reduce request volume
  • Some sites have aggressive bot protection — report persistent issues

🎙️ Feedback & Support

We're actively improving extraction quality based on your feedback.