Subito Real Estate Scraper
Pricing
from $2.00 / 1,000 listings
Pricing
from $2.00 / 1,000 listings
Rating
0.0
(0)
Developer
Epic Scrapers
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
π Subito Real Estate Scraper
Scrape thousands of real estate listings from Subito.it β Italy's largest classifieds marketplace β with structured output, automatic pagination, optional enrichment, and built-in proxy support.
What It Does
This Actor connects to Subito.it's internal API (the same one the Android app uses) to extract real estate listings across all 8 property subcategories β apartments, villas, rooms, land, garages, lofts, holiday homes, and commercial spaces. It handles pagination automatically, resolves search URLs, enriches listings with phone numbers and seller info, and outputs clean JSON ready for analysis.
Who It's For
Real estate analysts, property investors, market researchers, lead generation teams, and anyone who needs Subito.it listing data at scale without writing custom scrapers or dealing with anti-bot protection.
Key Benefits
| Instead of... | This Actor... |
|---|---|
| Manually clicking through pages on Subito.it | Scrapes thousands of listings in one run with automatic pagination |
| Writing a custom scraper that breaks every week | We maintain the scraper for you |
| Getting blocked and needing to rotate proxies | Built-in Apify proxy with Italian residential IPs |
| Copy-pasting phone numbers one by one | Optional phone number extraction built-in |
| Wondering if a seller is trustworthy | Optional seller badges, listing history, and shop details |
| Parsing messy HTML | Clean structured JSON with all real estate features extracted |
Features
Input & Search
| Feature | Advantage | Benefit |
|---|---|---|
| Start URLs | Paste any Subito.it search URL, detail URL, or API URL | Start scraping in 10 seconds without configuring filters |
| Keyword search | Add keywords like "centro Milano trilocale" | Find exactly what you need, even without a URL |
| Property filters | 11+ filter options (region, price, surface, rooms, floor, energy class, seller type, more) | Narrow results precisely β no post-processing needed |
| Multiple queries | Run URLs and keywords in a single execution | Combine different searches in one run |
| Max results control | Limit results per query | Stay within API budgets and run predictable costs |
Data Extraction
| Feature | Advantage | Benefit |
|---|---|---|
| Structured real estate fields | Surface area, rooms, bathrooms, floor, energy class, heating, building condition, parking, balcony, garden, elevator, and more | Every real estate feature is extracted as a typed field β no regex or HTML parsing |
| Category-specific fields | CIN code for holiday rentals, room type / gender / smoking for shared rooms, office type for commercial spaces | Complete data for every property subcategory |
| Price formatting | Extracted as both raw number and Italian-formatted string | Ready for analysis and comparison |
| Image URLs | All listing images as CDN URLs | Build image galleries, train ML models, or archive listings |
| Geo data | City, province, region | Map listings or filter by location programmatically |
Enrichment
| Feature | Advantage | Benefit |
|---|---|---|
| Phone numbers | Fetches seller phone via Subito's contact endpoint | Build lead lists directly β no manual lookup |
| Shop details | Shop name, address, logo, website, listing count for professional sellers | Identify agencies, compare portfolio sizes |
| Seller account info | Badges (verified, premium), total listings, first listing date | Assess seller trustworthiness at a glance |
Reliability & Performance
| Feature | Advantage | Benefit |
|---|---|---|
| Automatic retries | 4 retries with exponential backoff + jitter | Survives rate limits and temporary failures |
| Proactive rate limiting | 150ms minimum gap between requests | Avoids triggering Subito's rate limits |
| Concurrent enrichment | Processes 5 ads in parallel per page | Faster enrichment without overwhelming the API |
| Graceful exhaustion | Stops charging when budget runs out, exits cleanly | No surprise failed runs or overcharges |
| Proxy support | Apify proxy with Italian residential IPs | Works reliably at scale with minimal blocking |
Example Output
{"request_url": "https://www.subito.it/annunci-lazio/vendita/immobili/appartamenti/roma","category": "Immobili","sub_category": "Appartamenti","sub_category_slug": "appartamenti","type": "In vendita","type_key": "s","publication_date": {"iso": "2026-07-07T14:30:00.000Z","date": "2026-07-07","time": "14:30:00","timestamp": 1751812200000,"local": "7 luglio 2026 alle ore 14:30"},"advertiser_type": "privato","advertiser_name": "Mario Rossi","page_url": "https://www.subito.it/annunci-lazio/vendita/immobili/appartamenti/roma/monolocale-parioli-123456789.htm","title": "Monolocale in zona Parioli","description": "Bellissimo monolocale ristrutturato situato in zona Parioli...","geo": {"city": "Roma","province": "Roma","province_code": "RM","region": "Lazio"},"features": {"price": {"value": 185000,"formatted": "185.000 β¬","label": "Prezzo"},"surface": {"value": 55,"unit": "mq","formatted": "55 mq"},"rooms": 2,"bathrooms": 1,"floor": "3","building_condition": "Ottimo - ristrutturato","energy_class": "D","heating": "Autonomo","elevator": true,"balcony": true,"furnished": true},"images": ["https://img-subito.kwcdn.com/v1/...","https://img-subito.kwcdn.com/v1/..."],"advertiser_shop_data": {"name": "Agenzia Immobiliare XYZ","shop_id": "abc123","listing_count": null},"features_raw": [ ... ]}
With enrichment enabled, additional fields appear:
{"phone_number": "+39 345 1234567","advertiser_shop_data": {"name": "Agenzia Immobiliare XYZ","shop_categories": ["Vendita", "Affitto"],"address": "Via Roma 1, Roma, Lazio","listing_count": 47,"impresapiu_shop_page": "https://www.subito.it/agenzie/xyz","website": "https://www.agenziaxyz.it","logo": "https://img-subito.kwcdn.com/..."},"advertiser_account": {"user_id": "user_abc","first_ad_insertion_date": "2020-03-15","total_num_approved_ads": 89,"badges": [{"name": "verified","description": "Account verificato","is_active": true},{"name": "premium","description": "Utente premium","is_active": false}]}}
Input Options
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | string[] | [] | Subito.it search URLs, detail URLs, or direct API URLs. Paste URLs from the browser β filters are extracted automatically. |
searchKeywords | string[] | [] | Free-text keywords to search (e.g. "centro Milano trilocale", "villa giardino piscina"). Each keyword runs as a separate search. |
propertyType | string | "appartamenti" | One of: appartamenti, camere-posti-letto, ville-singole-e-a-schiera, terreni-e-rustici, garage-e-box, loft-e-mansarde, case-vacanza, uffici-locali-commerciali. Leave empty for all types. |
adType | string | "" | s = sale, u = rent, h = holiday rental. Leave empty for all. |
advertiserType | string | "" | private = only private sellers, professional = only agencies. Leave empty for both. |
region | string | "" | Italian region slug (e.g. lombardia, lazio, sicilia). See schema for full list. Leave empty for all Italy. |
minPrice | integer | β | Minimum price in β¬ |
maxPrice | integer | β | Maximum price in β¬ |
minSurface | integer | β | Minimum surface area in mΒ² |
maxSurface | integer | β | Maximum surface area in mΒ² |
minRooms | integer | β | Minimum number of rooms |
maxRooms | integer | β | Maximum number of rooms |
floor | string | β | Preferred floor (1β7). 1 = ground floor. |
energyClass | string | β | Energy class filter (e.g. A4, B, D, G) |
maxItemsPerQuery | integer | 100 | Maximum listings per URL or keyword. 0 = unlimited. |
enrichPhone | boolean | false | Fetch seller phone numbers (extra API call per listing) |
enrichShop | boolean | false | Fetch shop details for professional sellers |
enrichUserAccount | boolean | false | Fetch seller badges, total listings, account age |
proxyConfiguration | proxy | Apify IT residential | Proxy configuration. Defaults to Italian residential proxies. |
Quick Start Examples
| You want... | Input |
|---|---|
| Apartments for sale in Milan | startUrls: ["https://www.subito.it/annunci-lombardia/vendita/immobili/appartamenti/"] |
| Houses with pool under β¬500k in Tuscany | startUrls: ["https://www.subito.it/annunci-toscana/vendita/immobili/ville-singole-e-a-schiera/?pr=,500000&q=piscina"] |
| Rentals near a specific address | searchKeywords: ["trilocale corso venezia milano affitto"] |
| All garages in Rome on sale | propertyType: "garage-e-box", region: "lazio", adType: "s" |
| Holiday homes in Sicily with phone numbers | propertyType: "case-vacanza", region: "sicilia", adType: "h", enrichPhone: true |
| A single listing detail page | startUrls: ["https://www.subito.it/...qualche-annuncio-123456789.htm"] |
Common Use Cases
ποΈ Market Research
Track property prices, listing volumes, and trends across Italian regions and property types. Run weekly to build a historical dataset.
π° Price Monitoring
Monitor specific segments (e.g. 2-room apartments in Rome under β¬200k). Set a max price and run daily to catch new listings.
π₯ Lead Generation
Extract contact information from listings with enrichPhone: true. Build prospect lists for agencies or investors.
π Inventory Tracking
Track how many listings a specific agency has active, what properties they offer, and at what prices β useful for competitive analysis.
π Niche Searching
Find specific features (garage, garden, elevator) in combination with price and location β Subito's web search can't combine all these filters on mobile; this Actor can.
Why This Actor?
It talks to the Subito API directly. Unlike HTML scrapers that parse rendered pages and break every time Subito updates its markup, this Actor uses the same API endpoints as the Android app. API responses are stable, structured JSON.
It's built for real estate. Instead of a generic scraper that treats every listing as title + price + description, this Actor extracts 25+ property-specific fields: surface area, rooms, bathrooms, floor, energy class, heating type, building condition, parking types, balcony, garden, elevator, furnished status, and more.
It's reliable at scale. Exponential backoff retries, proactive rate limiting, concurrent enrichment, and a shared throttle across all requests mean the Actor behaves well even on large runs and doesn't burn through your budget on retries.
It's transparent. Pay-per-event pricing means you only pay for what you use. The Actor exits gracefully when the budget is exhausted instead of failing mid-run.
FAQ / Common Issues
Does it require proxies?
No β the Actor works without proxies. However, if you're scraping at scale, it's recommended to use Apify's Italian residential proxies (enabled by default). The Actor automatically routes all requests through the configured proxy.
Can it scrape ALL listings?
It scrapes everything Subito's search API returns. Subito limits search results to a maximum number of pages for any single query. To get more results, use multiple more specific queries (narrower region, different property types, multiple keywords).
Does it support Italian regions?
Yes β all 20 Italian regions are supported via the region parameter. City-level filtering is available through URLs (pasting a Subito URL that already has a city filter).
Does it require login?
No. All API endpoints used by this Actor are public. No cookies, no authentication, no session management needed.
How much does it cost?
The Actor uses Apify's pay-per-event model:
listing-scrapedβ always charged (one unit per listing pushed to the dataset)phone-number-enrichedβ charged when a phone number is retrievedshop-details-enrichedβ charged when shop details are retrievedseller-account-enrichedβ charged when seller account info is retrieved
If you don't enable enrichment, you pay only for the listings. Set maxItemsPerQuery to control how many listings are scraped per run.
What happens if Subito changes their API?
The Actor uses the same API as the Android app, which is backwards-compatible by design. Major API changes are extremely rare. If something breaks, enrichment failures are handled silently so the rest of the run completes.
Can I scrape a single listing detail page?
Yes β paste the detail URL (ending in -123456789.htm) into startUrls. The Actor detects it automatically and fetches that single ad by its numeric ID.
What if a URL doesn't work?
The Actor has three fallback mechanisms for URLs: (1) direct API URL passthrough, (2) Subito's deeplink resolver, and (3) a built-in URL parser that extracts region, ad type, category, and query parameters from the URL path. Usually at least one succeeds.
Try It
- Paste a URL β Copy any Subito.it real estate search URL into
startUrls - Add filters β Narrow by region, price, surface, rooms
- Enable enrichment β Turn on phone numbers, shop details, or seller account info
- Run it β Hit "Start" and get clean JSON in seconds
# Or run locally with Apify CLIapify run --input my-search.json
Built for Apify. Works on the Apify platform and locally with the Apify CLI.