Imovirtual Portugal Real Estate Listings avatar

Imovirtual Portugal Real Estate Listings

Pricing

from $1.70 / 1,000 listing founds

Go to Apify Store
Imovirtual Portugal Real Estate Listings

Imovirtual Portugal Real Estate Listings

Pull live apartment and house listings straight from Imovirtual.com — Portugal's biggest real-estate classifieds portal — by deal type, property type and city. No login, no browser, no proxies. Unofficial, independent tool — not affiliated with, endorsed by, or sponsored by Imovirtual.

Pricing

from $1.70 / 1,000 listing founds

Rating

0.0

(0)

Developer

Tim Zinin

Tim Zinin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Categories

Share

Pull live apartment and house listings straight from Imovirtual.com — Portugal's biggest real-estate classifieds portal — filtered by deal type (buy/rent), property type and city. No login, no API key, no browser needed on your side.

What you get

  • Title, price (with currency), rooms, floor area, district/council/parish location, a short description, preview photos and the direct listing URL for every ad found.
  • Filter by buy or rent, apartment or house, and any Imovirtual.com city.
  • Runs on Apify: schedule it, monitor it, call it from the API, export to JSON/CSV/Excel or push straight into your own pipeline.

How to run it

  1. Click Try for free — no card needed on the free plan.
  2. Pick Deal type (buy/rent) and Property type (apartment/house), and set City path — for example lisboa/lisboa for the city of Lisbon.
  3. Hit Start and pull the results from the dataset (UI, API or webhook).

Pricing

Pay-per-event: $0.005 per run start + $0.002 per result. No monthly seat, no minimum. 100 listings found cost about $0.21 (the one-time start fee plus 100 result rows). Rows where the source returned nothing (an unrecognized combination, a search with zero matching listings, or a request that failed) are returned for transparency but are never charged for.

Input

FieldRequiredWhat it does
deal_typenocomprar (buy) or arrendar (rent). Default comprar.
property_typenoapartamento (apartment) or casa (house). Default apartamento.
citynoImovirtual.com location path, e.g. lisboa/lisboa for the city of Lisbon. Default lisboa/lisboa.
max_itemsnoTotal row cap for this run (default 100).
max_pagesnoHow many result pages to walk before stopping (default 3).
{
"deal_type": "comprar",
"property_type": "apartamento",
"city": "lisboa/lisboa",
"max_items": 5,
"max_pages": 1
}

Output

Real row from a live run (9WQINK3wcT4NuHq0C, 2026-07-30):

{
"found": true,
"url": "https://www.imovirtual.com/pt/ad/apartamento-t2-em-beco-do-monte-ID1iG40",
"title": "Apartamento T2 em Beco do Monte",
"price": 250000,
"currency": "EUR",
"deal_type": "sale",
"property_type": "FLAT",
"rooms": 3,
"area_sqm": 55,
"location": "Alameda - Praça do Chile - Almirante Reis, Arroios, Lisboa, Lisboa",
"lat": null,
"lng": null,
"posted_date": "2026-07-30 11:38:22",
"description": "Apartamento T2 com Quintal Privativo no Coração Histórico de Lisboa | Arroios / Graça\n\nDescubra uma excelente oportunidade de investimento ou de habitação própria numa das zonas mais autênticas e valo...",
"images": [
"https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6Im5tdHU3dDE3NnVobTEtRUNPU1lTVEVNIiwidyI6W3siZm4iOiI2OW5scGE3ZWNxbTcxLUFQVCIsInMiOiIxNCIsInAiOiIxMCwtMTAiLCJhIjoiMCJ9XX0.9y5DhhilatWc0EqRhNqexn-0C3Aw31e528QA_YEKyh0/image;s=655x491;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6IjI0bWtmbmdjaXpveDEtRUNPU1lTVEVNIiwidyI6W3siZm4iOiI2OW5scGE3ZWNxbTcxLUFQVCIsInMiOiIxNCIsInAiOiIxMCwtMTAiLCJhIjoiMCJ9XX0.ZriCK5SVCLWjNGRjYggq7JK178jEtl3HIPkYbfPAQrQ/image;s=655x491;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6Im80dnM1dmptNTJ4ZDItRUNPU1lTVEVNIiwidyI6W3siZm4iOiI2OW5scGE3ZWNxbTcxLUFQVCIsInMiOiIxNCIsInAiOiIxMCwtMTAiLCJhIjoiMCJ9XX0.bYt6VleHWuMlzdHsefZiExpcekK56E9JoWuMXePmt-w/image;s=655x491;q=80"
],
"source_portal": "imovirtual-lisbon",
"scraped_at": "2026-07-30T11:03:36.651Z",
"partial": false,
"partial_reason": null
}
FieldMeaning
foundtrue for a real listing row; false for an empty-result or error row.
urlDirect link to the listing.
titleListing headline as published.
priceSale price, or monthly rent for rentals.
currencyAlways EUR on Imovirtual.com.
deal_typesale or rent.
property_typeImovirtual's own classification: FLAT, HOUSE, or INVESTMENT (new-development project).
roomsNumber of rooms. null when Imovirtual reports an open-ended "5+" instead of an exact count.
area_sqmFloor area in square meters.
locationMost specific location Imovirtual gives (neighborhood/parish where available, otherwise city/district).
lat / lngCoordinates if Imovirtual's own listing page exposes them; null on the overwhelming majority of listings, which don't.
posted_dateRaw timestamp as Imovirtual publishes it.
descriptionListing description text, truncated to roughly 200 characters (source-side truncation, not ours).
imagesUp to 5 photo URLs.
source_portalAlways imovirtual-lisbon.
scraped_atISO-8601 UTC timestamp of when this Actor fetched the row.
partialtrue when this run stopped (via max_pages/max_items) before Imovirtual confirmed there were no more matching listings; false when the source confirmed the result set was already complete.
partial_reasonHuman-readable explanation of why the run stopped early when partial is true; null otherwise.

API

Start a run with a bearer token and explicit JSON input:

curl -sS -X POST 'https://api.apify.com/v2/acts/zinin~imovirtual-lisbon/runs?waitForFinish=60' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
--data '{"deal_type":"comprar","property_type":"apartamento","city":"lisboa/lisboa","max_items":5,"max_pages":1}'

Read Dataset rows using the returned defaultDatasetId:

curl -sS "https://api.apify.com/v2/datasets/$DEFAULT_DATASET_ID/items?clean=true&format=json" \
-H "Authorization: Bearer $APIFY_TOKEN"

MCP

For an Apify MCP client exposing the standard call-actor tool, send this exact payload:

{
"name": "call-actor",
"arguments": {
"actor": "zinin/imovirtual-lisbon",
"input": {
"deal_type": "comprar",
"property_type": "apartamento",
"city": "lisboa/lisboa",
"max_items": 5,
"max_pages": 1
}
}
}

Other major European real-estate portals, for a buyer comparing markets or running a multi-country portfolio rather than looking at Lisbon alone.

ActorUse it when
Otodom Poland Real Estate ListingsScanning Warsaw alongside Lisbon for a rental-arbitrage or portfolio-diversification play across EU capitals — same query shape, same account.
Storia Romania Real Estate ListingsAdding Bucharest to the same pipeline for a lower entry-price EU market, without new plumbing.
Rightmove UK Property Listings (London and beyond)Benchmarking Lisbon's prices against London's for a buyer who's being priced out of the UK market.

FAQ / Limitations

Does this need a login or API key on Imovirtual's side? No — it reads the same public listing pages a visitor would see.

What this is NOT. This is not a valuation tool and does not enrich listings with data Imovirtual itself doesn't publish (no coordinates, no agent phone numbers). Rooms reported by Imovirtual as an open-ended "5+" come back as null, not a guessed number.

Found a bug or need this adapted to your case — issues on the Actor page.

Machine use

The Actor is callable through the Apify API, SDK, and Apify MCP server. The input and Dataset row are the machine-facing contract; images returns preview photo URLs only, not the full listing gallery, and rooms/posted_date are null whenever Imovirtual itself doesn't publish a resolvable value — this Actor never fills either gap with a guess.