Imovirtual Scraper — Portugal Real Estate Data avatar

Imovirtual Scraper — Portugal Real Estate Data

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Imovirtual Scraper — Portugal Real Estate Data

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

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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

FieldTypeDescription
locationSlugsarrayImovirtual URL location paths. Each slug becomes its own task (e.g. lisboa, porto, lisboa/cascais, todo-o-pais). Required.
transactionstringsale (comprar) or rent (arrendar).
propertyTypestringapartment, house, plot, commercial, warehouse, garage, room, development or studio.
priceMinintegerMinimum price in EUR. 0 = no minimum.
priceMaxintegerMaximum price in EUR. 0 = no maximum.
areaMinintegerMinimum surface area in m². 0 = no minimum.
areaMaxintegerMaximum surface area in m². 0 = no maximum.
roomsMinintegerMinimum room count / T-typology (T0–T10). 0 = no minimum.
roomsMaxintegerMaximum room count / T-typology (T0–T10). 0 = no maximum.
marketstringALL, PRIMARY (new build) or SECONDARY (resale).
ownerTypestringALL, PRIVATE or AGENCY.
sortstringResult ordering: latest, price_asc/desc, price_per_m_asc/desc, area_asc/desc.
distanceRadiusintegerExpand search to nearby areas: 0, 5, 10, 15, 25, 50 or 75 km.
limitintegerListings per page: 24, 36, 48 or 72.
maxListingsintegerTotal cap across all location tasks. 0 = unlimited.
maxPagesPerTaskintegerPagination depth per location.
requestDelayintegerDelay between page requests in milliseconds (keep ≥ 600 ms).
maxRetriesintegerRetries per request on HTTP errors (rotates proxy IP).
proxyConfigurationobjectApify 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. Use todo-o-pais for all of Portugal, a district slug like lisboa, porto, faro, braga or setubal, a council like lisboa/cascais, or a parish like lisboa/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.

FieldDescription
adIdImovirtual's stable listing ID
detailUrlFull listing detail URL
slugListing URL slug
titleListing title
shortDescriptionShort description / snippet
transactionTypesale or rent
propertyTypeProperty type (apartment, house, etc.)
estateRaw estate enum (FLAT, HOUSE, TERRAIN, COMMERCIAL_PROPERTY, HALL, GARAGE, ROOM, INVESTMENT)
advertTypeAdvert type (AGENCY, PRIVATE, etc.)
isPrivateWhether the listing is from a private owner
marketPRIMARY (new build) or SECONDARY (resale)
priceListing price
priceCurrencyCurrency code (EUR)
pricePerSqmPrice per square meter (EUR/m²)
monthlyRentRecurring monthly rent (for rentals)
areaSqmSurface area in m²
terrainAreaSqmTerrain / plot area in m²
roomsNumber of bedrooms (T-typology)
floorFloor (enum, e.g. GROUND, SECOND)
totalFloorsTotal floors in the building
provinceDistrict (distrito)
countyCouncil (concelho / município)
cityParish (freguesia) / city label
districtNeighborhood (bairro)
streetStreet
postalCodePostal code (detail pages only)
fullAddressComposed full address
latitudeGPS latitude (detail pages only)
longitudeGPS longitude (detail pages only)
mainImageUrlMain listing image URL
imageUrlsArray of preview image URLs
imageCountNumber of preview images
totalPossibleImagesTotal images on the full listing
contactNameListing contact / seller name
agencyIdAgency ID
agencyNameAgency name
agencySlugAgency slug
agencyLogoUrlAgency logo URL
agencyTypeAgency type
isExclusiveExclusive listing flag
isFeaturedFeatured listing flag
isPromotedPromoted listing flag
hasOpenDayWhether the listing has an open day
developmentNameDevelopment / investment name (for primary market)
investmentStateDevelopment / investment state
sourceListing source / partner feed
dateCreatedDate the listing was created
dateCreatedFirstDate the listing was first created
pushedUpAtDate the listing was last bumped
labelsFeature/amenity tags (AIR_CONDITIONING, BALCONY, PARKING_SPOT, ...)
searchTransactionTransaction type used for this search
searchPropertyTypeProperty type used for this search
searchLocationLocation slug used for this search
searchUrlFull search URL used
scrapedAtScrape 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: PRIVATE to find direct-owner listings, or cluster agency listings by agencyId.
  • Price tracking — re-run on a schedule and diff against prior datasets using dateCreated and pushedUpAt.
  • Primary-market monitoring — use propertyType: development or market: PRIMARY to track new developer offers.
  • Cross-city comparison — pass multiple locationSlugs in 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.