Imovirtual Scraper — Portugal Real Estate Data
Pricing
from $3.50 / 1,000 results
Imovirtual Scraper — Portugal Real Estate Data
Scrape real estate listings from Imovirtual.com — Portugal's major property portal (OLX Group). No browser, no API key. Filter by location, buy/rent, property type, price (EUR), area, rooms and owner type. Returns price, m², price/m², full Portuguese address, agency and image gallery per listing.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Imovirtual Scraper — Scrape Portugal Real Estate Listings & Prices
Scrape property listings from Imovirtual.com, one of Portugal's largest real estate portals (OLX Group), with hundreds of thousands of active listings. This Imovirtual scraper extracts apartments, houses (moradias), plots/land, commercial property, warehouses, garages, rooms and new developments — by location, transaction type (buy or rent), price in EUR, area, rooms (T-typology), market and owner type. It returns price, price/m², full Portuguese address breakdown (distrito, concelho, freguesia), agency details and image galleries via direct __NEXT_DATA__ JSON parsing — fast, no browser, no API key required. Export Portuguese real estate data to JSON, CSV or Excel.
✨ What this Actor does / Key features
- 🏠 9 property categories — apartments, houses/moradias, plots/land, commercial, warehouses, garages, rooms, studios (T0) and new developments, for sale or rent.
- 📍 Nationwide location targeting — scrape all of Portugal, any district (distrito), council (concelho) or parish (freguesia) via location slugs.
- 💰 Powerful filters — price range (EUR), area range (m²), room range (T-typology), market (primary/secondary), owner type and distance radius.
- 🔀 Flexible sorting — by latest, price, price/m² or area, ascending or descending.
- 🗺️ Full Portuguese address — district, council, parish, neighborhood and street for every listing (GPS and postal code available on detail pages).
- 🏢 Agency data embedded — agency name, ID, slug, logo and type, plus exclusivity, featured and promoted flags.
- 🖼️ Image galleries — main image URL, preview image URLs and total image count.
- ⚡ Direct HTTP + JSON extraction — parses Imovirtual's
__NEXT_DATA__payload; no browser, no DOM walking, no GraphQL token. - 🛡️ Proxy support — Apify Proxy integration; residential + country=PT strongly recommended to avoid blocks.
Because Imovirtual belongs to the same OLX Group platform family as Otodom (Poland) and shares the same Next.js SSR data structure, this Actor reads the site's own embedded listing JSON directly — the fastest and most reliable way to get structured Portuguese property data without an official API.
🔍 Input
| Field | Type | Description |
|---|---|---|
locationSlugs | array | Imovirtual URL location paths. Each slug becomes its own task (e.g. lisboa, porto, lisboa/cascais, todo-o-pais). Required. |
transaction | string | sale (comprar) or rent (arrendar). |
propertyType | string | apartment, house, plot, commercial, warehouse, garage, room, development or studio. |
priceMin | integer | Minimum price in EUR. 0 = no minimum. |
priceMax | integer | Maximum price in EUR. 0 = no maximum. |
areaMin | integer | Minimum surface area in m². 0 = no minimum. |
areaMax | integer | Maximum surface area in m². 0 = no maximum. |
roomsMin | integer | Minimum room count / T-typology (T0–T10). 0 = no minimum. |
roomsMax | integer | Maximum room count / T-typology (T0–T10). 0 = no maximum. |
market | string | ALL, PRIMARY (new build) or SECONDARY (resale). |
ownerType | string | ALL, PRIVATE or AGENCY. |
sort | string | Result ordering: latest, price_asc/desc, price_per_m_asc/desc, area_asc/desc. |
distanceRadius | integer | Expand search to nearby areas: 0, 5, 10, 15, 25, 50 or 75 km. |
limit | integer | Listings per page: 24, 36, 48 or 72. |
maxListings | integer | Total cap across all location tasks. 0 = unlimited. |
maxPagesPerTask | integer | Pagination depth per location. |
requestDelay | integer | Delay between page requests in milliseconds (keep ≥ 600 ms). |
maxRetries | integer | Retries per request on HTTP errors (rotates proxy IP). |
proxyConfiguration | object | Apify Proxy settings. Residential with country=PT strongly recommended. |
🚀 Example input
{"locationSlugs": ["lisboa", "porto"],"transaction": "sale","propertyType": "apartment","priceMin": 200000,"priceMax": 600000,"areaMin": 50,"areaMax": 120,"roomsMin": 2,"roomsMax": 3,"market": "SECONDARY","ownerType": "ALL","sort": "latest","distanceRadius": 0,"limit": 72,"maxListings": 500,"maxPagesPerTask": 10,"requestDelay": 800,"maxRetries": 3,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "PT" }}
Finding a location slug: browse imovirtual.com, apply a location filter, and copy the path between
/resultados/{txn}/{type}/and?from the URL. Usetodo-o-paisfor all of Portugal, a district slug likelisboa,porto,faro,bragaorsetubal, a council likelisboa/cascais, or a parish likelisboa/cascais/cascais-e-estoril. These slugs follow the Portuguese administrative hierarchy (distrito → concelho → freguesia).
📦 Output
Each property listing is saved as a structured item in the dataset. Export to JSON, CSV, Excel or XML, or pull via the Apify API.
| Field | Description |
|---|---|
adId | Imovirtual's stable listing ID |
detailUrl | Full listing detail URL |
slug | Listing URL slug |
title | Listing title |
shortDescription | Short description / snippet |
transactionType | sale or rent |
propertyType | Property type (apartment, house, etc.) |
estate | Raw estate enum (FLAT, HOUSE, TERRAIN, COMMERCIAL_PROPERTY, HALL, GARAGE, ROOM, INVESTMENT) |
advertType | Advert type (AGENCY, PRIVATE, etc.) |
isPrivate | Whether the listing is from a private owner |
market | PRIMARY (new build) or SECONDARY (resale) |
price | Listing price |
priceCurrency | Currency code (EUR) |
pricePerSqm | Price per square meter (EUR/m²) |
monthlyRent | Recurring monthly rent (for rentals) |
areaSqm | Surface area in m² |
terrainAreaSqm | Terrain / plot area in m² |
rooms | Number of bedrooms (T-typology) |
floor | Floor (enum, e.g. GROUND, SECOND) |
totalFloors | Total floors in the building |
province | District (distrito) |
county | Council (concelho / município) |
city | Parish (freguesia) / city label |
district | Neighborhood (bairro) |
street | Street |
postalCode | Postal code (detail pages only) |
fullAddress | Composed full address |
latitude | GPS latitude (detail pages only) |
longitude | GPS longitude (detail pages only) |
mainImageUrl | Main listing image URL |
imageUrls | Array of preview image URLs |
imageCount | Number of preview images |
totalPossibleImages | Total images on the full listing |
contactName | Listing contact / seller name |
agencyId | Agency ID |
agencyName | Agency name |
agencySlug | Agency slug |
agencyLogoUrl | Agency logo URL |
agencyType | Agency type |
isExclusive | Exclusive listing flag |
isFeatured | Featured listing flag |
isPromoted | Promoted listing flag |
hasOpenDay | Whether the listing has an open day |
developmentName | Development / investment name (for primary market) |
investmentState | Development / investment state |
source | Listing source / partner feed |
dateCreated | Date the listing was created |
dateCreatedFirst | Date the listing was first created |
pushedUpAt | Date the listing was last bumped |
labels | Feature/amenity tags (AIR_CONDITIONING, BALCONY, PARKING_SPOT, ...) |
searchTransaction | Transaction type used for this search |
searchPropertyType | Property type used for this search |
searchLocation | Location slug used for this search |
searchUrl | Full search URL used |
scrapedAt | Scrape timestamp (ISO 8601) |
💡 Use cases
- Market research — build EUR/m² heatmaps by district, council and parish across Portugal.
- Investment screening — calculate rental yield (monthly rent vs. sale price) per area, from Lisboa and Porto to the Algarve.
- Lead generation — use
ownerType: PRIVATEto find direct-owner listings, or cluster agency listings byagencyId. - Price tracking — re-run on a schedule and diff against prior datasets using
dateCreatedandpushedUpAt. - Primary-market monitoring — use
propertyType: developmentormarket: PRIMARYto track new developer offers. - Cross-city comparison — pass multiple
locationSlugsin one run to benchmark prices across Portuguese cities.
❓ Frequently Asked Questions
Is it legal to scrape Imovirtual.com? The Actor only collects publicly available property listing data. You are responsible for using the data in compliance with Imovirtual's terms and applicable laws such as the GDPR.
Does Imovirtual.com have a public API?
Imovirtual does not offer an open public data API for listings, so this Actor reads the site's own embedded __NEXT_DATA__ JSON instead — giving you structured Portuguese real estate data without any API key.
Do I need an API key or a login? No. There is no Imovirtual account, login or API key required — only an Apify account.
Do I need a proxy? Imovirtual deploys mild bot protection. Datacenter proxies often get blocked, so residential Apify Proxy with country=PT is strongly recommended; the Actor runs cleanly with it at a ≥600 ms request delay.
How do I target a specific city, council or parish?
Imovirtual uses URL location slugs following Portugal's distrito → concelho → freguesia hierarchy. Browse imovirtual.com, apply a location filter, and copy the path from the URL. Examples: lisboa, porto, lisboa/cascais, lisboa/cascais/cascais-e-estoril.
How much data can I get? You can scrape thousands of listings per run. Imovirtual paginates deep filter sets, so narrow with price and area filters to reach the full inventory across multiple locations.
Does it return rental prices separately?
Yes. For rental listings, the recurring monthly rent is returned in the monthlyRent field, alongside the headline price.
What output formats are supported? Results are stored in a structured Apify dataset and can be exported as JSON, CSV, Excel or XML, or accessed via the Apify API.
Is this an Imovirtual API alternative?
Yes. Imovirtual has no open public listings API, so this Actor works as an unofficial Imovirtual API alternative — it reads the site's embedded __NEXT_DATA__ JSON and returns structured Portuguese real estate data with no API key.
Can I scrape Imovirtual without an API or login?
Yes. No Imovirtual account, login or API key is needed — only an Apify account. The Actor pulls publicly available property listings over direct HTTP, so you can scrape Imovirtual without an API.
How do I export Imovirtual data to CSV or JSON?
Run the Actor, then export the resulting dataset as CSV, JSON, Excel or XML from the Apify console or via the Apify API. This makes it easy to export Imovirtual property data to CSV or JSON for spreadsheets and BI tools.
How do I scrape apartments for sale in Lisbon from Imovirtual?
Set locationSlugs to lisboa, transaction to sale and propertyType to apartment. The scraper returns Lisbon apartments with price, price/m², area, T-typology, address and agency details. Swap the slug to porto, faro or braga for other regions.
What is the T-typology (T0, T1, T2, T3) in Portuguese listings?
In Portugal, apartments and houses are classified by "T" number: T0 is a studio, T1 has one bedroom, T2 two bedrooms, and so on. This Actor parses the T-typology into the numeric rooms field, and you can filter with roomsMin/roomsMax.
⏰ Scheduling & integration
Schedule this Actor on Apify to track the Portuguese property market daily or weekly. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API.
📝 Changelog
2026-07-06 — Initial release
- Scrapes Imovirtual.com (Portugal, OLX Group) real estate listings via direct HTTP +
__NEXT_DATA__JSON extraction — no browser, no API key. - Filters by location slug (distrito/concelho/freguesia), transaction (buy/rent), property type, price (EUR), area, rooms (T-typology), market, owner type, distance radius and sort order.
- Returns price, price/m², full Portuguese address breakdown, agency data, image galleries and promotion flags per listing.
- Verified end-to-end on live data within the 5-minute quality window on the default input.