Imovirtual Scraper avatar

Imovirtual Scraper

Pricing

from $0.30 / 1,000 property listing extracteds

Go to Apify Store
Imovirtual Scraper

Imovirtual Scraper

Scrape property listings from Imovirtual, Portugal's leading real estate portal. Extract price, location, property type, area, rooms, agent info, photos, and more.

Pricing

from $0.30 / 1,000 property listing extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Imovirtual Portuguese Real Estate Scraper

Extract property listings from Imovirtual — Portugal's largest real estate portal with over 200,000 listings across residential, commercial, and land categories. Get prices, locations, property types, room counts, agent info, photos, and more for any search on the site.

What does it do?

Imovirtual Scraper takes Imovirtual search result URLs and extracts all listing data returned by those searches. It paginates automatically until your maxItems limit is reached.

  • Any property type — apartments, houses, villas, land, commercial
  • Sale or rent — specify via the URL (comprar/arrendar)
  • Any Portuguese location — Lisbon, Porto, Algarve, Braga, and all regions/councils/parishes
  • Full listing detail — price, area, rooms, floor, agency, photos, and location hierarchy

The scraper reads data from Imovirtual's server-side-rendered HTML (Next.js __NEXT_DATA__ JSON), so it works without a headless browser — fast, reliable, and proxy-friendly.

Who is it for?

🏠 Real Estate Investors

Monitor the Portuguese market for price trends, deal-finding, and portfolio research in Lisbon, Porto, the Algarve, and emerging regions.

📊 Market Research Analysts

Build datasets of active listings to track median prices, price-per-sqm by parish, transaction volume, and market saturation in any area.

🌍 Expat & Digital Nomad Platforms

Portugal is among Europe's most popular expat destinations. Aggregate Imovirtual data for relocation guides, rental market overviews, or comparison tools.

🏢 Real Estate Agencies & Proptech

Monitor competitor listings, track new-to-market properties, or enrich your CRM with market-wide listing data.

📈 Financial & Academic Research

Study Iberian real estate pricing, urban growth patterns, and housing affordability using live listing data.

🤖 AI & Data Science Teams

Build property valuation models, location scoring algorithms, or investment analytics tools using structured Imovirtual data.

Why use this scraper?

  • No browser needed — HTTP + SSR JSON extraction; fast and cost-efficient.
  • Full pagination — Automatically handles Imovirtual's 36-items-per-page search results.
  • Complete location hierarchy — district, province, parish, and street from both address and geocoding data.
  • Both sale and rental — Works with any Imovirtual search URL.
  • Photo URLs included — Large-resolution images for every listing.
  • Agency or private owner — Distinguishes between agency-listed and owner-listed properties.
  • Apify proxy support — Works with residential proxies for uninterrupted scraping at scale.

What data does it extract?

FieldDescriptionExample
listingIdUnique Imovirtual listing ID19100936
urlFull URL to the listing pagehttps://www.imovirtual.com/pt/ad/...
titleListing titleT3 na Penha de França, Lisboa
shortDescriptionShort description from search resultsApartamento renovado em...
estateProperty typeFLAT, HOUSE, TERRAIN, COMMERCIAL
transactionSale or rentSELL, RENT
priceAsking price428000
currencyPrice currencyEUR
pricePerSqmPrice per square metre6114
areaM2Usable floor area (m²)70
terrainAreaM2Plot/terrain area (m²)null
roomsRoom countONE, TWO, THREE, FOUR, MORE
floorFloor number3
cityCity/neighbourhoodPenha de França
districtAdministrative districtLisboa
provinceProvince/regionLisboa
parishParishPenha de França
streetStreet nameRua Doutor Oliveira Ramos
agencyNameAgency or private owner nameComprarCasa Foros de Amora
agencyIdAgency ID on Imovirtual1277149
isPrivateOwnerPrivate owner listing?false
photosArray of large photo URLs["https://..."]
dateCreatedListing creation date2026-05-10 10:44:44
pushedUpAtLast bumped/renewed date2026-05-10T10:44:44+01:00
isPromotedPromoted/featured ad?false

How to use it

Visit imovirtual.com and filter by:

  • Transaction type (buy or rent)
  • Property type (apartment, house, land, etc.)
  • Location (city, district, parish)

Copy the resulting URL from your browser address bar.

Step 2 — Paste the URL into the actor

In the Start URLs field, paste one or more Imovirtual search result URLs.

Example URLs:

https://www.imovirtual.com/pt/resultados/comprar/apartamento/lisboa/lisboa
https://www.imovirtual.com/pt/resultados/arrendar/apartamento/porto/porto
https://www.imovirtual.com/pt/resultados/comprar/moradia/algarve

Step 3 — Set your limit

Set Max items to control how many listings to extract. See the Pricing section below for per-listing costs by plan tier.

Step 4 — Run and export

Download results as JSON, CSV, Excel, or XML from the dataset.

Input parameters

ParameterTypeDefaultDescription
startUrlsstring[](Lisbon apartments)Imovirtual search result URLs to scrape
maxItemsinteger100Maximum listings to extract across all URLs
maxRequestRetriesinteger3Retry attempts for failed HTTP requests

Example input

{
"startUrls": [
"https://www.imovirtual.com/pt/resultados/comprar/apartamento/lisboa/lisboa",
"https://www.imovirtual.com/pt/resultados/arrendar/moradia/porto"
],
"maxItems": 500
}

Example output

{
"listingId": 19100936,
"url": "https://www.imovirtual.com/pt/ad/t3-na-penha-de-franca-lisboa-ID1i91C",
"title": "T3 na Penha de França, Lisboa",
"shortDescription": "Este apartamento T3 situa-se numa das zonas mais centrais de Lisboa...",
"estate": "FLAT",
"transaction": "SELL",
"price": 428000,
"currency": "EUR",
"pricePerSqm": 6114,
"areaM2": 70,
"terrainAreaM2": null,
"rooms": "FOUR",
"floor": null,
"city": "Penha de França",
"district": "Lisboa",
"province": "Lisboa",
"parish": "Penha de França",
"street": "Rua Doutor Oliveira Ramos",
"agencyName": "ComprarCasa Foros de Amora",
"agencyId": 1277149,
"isPrivateOwner": false,
"photos": [
"https://ireland.apollo.olxcdn.com/v1/files/eyJ...image;s=1280x1024;q=80"
],
"dateCreated": "2026-05-10 10:44:44",
"pushedUpAt": "2026-05-10T10:44:44+01:00",
"isPromoted": false
}

How much does it cost to scrape Imovirtual listings?

This actor uses pay-per-result pricing — you only pay for listings successfully extracted, never per run.

Plan tierPrice per listingCost per 1,000Cost per 10,000
FREE$0.000575$0.575$5.75
BRONZE$0.0005$0.50$5.00
SILVER$0.00039$0.39$3.90
GOLD$0.0003$0.30$3.00
PLATINUM$0.0002$0.20$2.00
DIAMOND$0.00014$0.14$1.40

The Apify free plan includes $5/month in platform credit — enough to extract approximately 8,700 Imovirtual listings at FREE tier pricing. A typical Lisbon apartment search returns up to 7,000+ listings.

No flat fee per run — you only pay for what you extract.

Tips

  • Use residential proxies for large-scale runs — For scraping 1,000+ listings, enable Apify residential proxies in the actor settings. This reduces the chance of temporary IP blocks from Imovirtual.
  • Combine multiple search URLs — Pass several URLs in startUrls to merge results across regions in a single run. The maxItems limit applies globally across all URLs.
  • Scope your search with Imovirtual filters first — Before running, use Imovirtual's web interface to apply price range, area, and room filters. Copy the filtered URL — the actor will respect those filters.
  • Recommended maxItems by use case:
    • Quick market snapshot: 100–500 items (~$0.05–$0.25 at BRONZE)
    • Regional analysis: 1,000–5,000 items (~$0.50–$2.50 at BRONZE)
    • Full national scrape: 50,000+ items (~$25 at BRONZE, ~$7 at DIAMOND tier)
  • Schedule regular runs — Use Apify's scheduler to run the actor daily or weekly and track price trends over time.
  • Export to CSV for Excel/Sheets analysis — Use the dataset's CSV export for quick pivot table analysis in Excel or Google Sheets.

Integrations

Connect Imovirtual data to the tools your team already uses:

  • Google Sheets — Use the Apify → Google Sheets integration to push new listings into a spreadsheet automatically. Great for tracking Lisbon price trends week-over-week.
  • Airtable — Route extracted listings into an Airtable base as property pipeline records. Filter by parish, price range, or room count using Airtable views.
  • Slack notifications — Set up a webhook trigger to post new Algarve listings to a Slack channel whenever the actor runs, so your team never misses a fresh deal.
  • Make (Integromat) / n8n — Wire the actor's dataset output into multi-step automation workflows — filter by price, enrich with Google Maps data, or post to a CRM.
  • BigQuery / data warehouse — Export large datasets directly to cloud storage via Apify's built-in integrations for long-term price trend analysis.
  • OpenAI / Claude — Use the MCP integration (see below) to ask AI assistants to analyse the scraped data, generate summaries, or filter listings by natural language criteria.

Use with AI via MCP

Imovirtual Scraper is compatible with the Apify MCP server, letting you use it directly from AI assistants like Claude, Cursor, or VS Code Copilot.

Claude Code setup

$claude mcp add --transport http "https://mcp.apify.com?tools=automation-lab/imovirtual-scraper&token=YOUR_APIFY_TOKEN"

Desktop / Cursor / VS Code JSON config

{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com?tools=automation-lab/imovirtual-scraper&token=YOUR_APIFY_TOKEN"
}
}
}

Example AI prompts

Once connected, you can ask your AI assistant:

  • "Scrape all Lisbon apartments for sale under €400,000 and show me the cheapest 10 by price-per-sqm."
  • "Get the first 200 rental listings in Porto and calculate the average monthly rent by parish."
  • "Find all private-owner listings in the Algarve — skip agency listings — and export them as a CSV."

Limitations

  • Search results only — The scraper extracts data visible in Imovirtual search result pages. It does not visit individual listing pages, so fields only visible on the detail page (e.g. full description, specific room dimensions, energy rating) are not extracted.
  • Imovirtual Portugal only — This actor targets imovirtual.com. For Spain, use a separate Idealista or Fotocasa scraper.
  • Max 36 listings per page — Imovirtual paginates at 36 items/page. The actor handles pagination automatically.

FAQ

Can I scrape all listings in Portugal? Yes — use broad regional URLs (e.g. /comprar/apartamento/ without a location filter) and set maxItems to a high value. Imovirtual has ~200,000+ active listings.

Does it work for rental listings? Yes — use URLs with /arrendar/ instead of /comprar/.

Can I scrape land and commercial properties? Yes — use /terreno/ or /comercial/ in the URL path.

Will it work with proxy? Yes — the actor works with Apify's residential and datacenter proxies. For large-scale runs, residential proxies are recommended.

How fresh is the data? Data is live at the time of the run. Imovirtual updates listings continuously.

What if the scraper returns 0 results? Check that your URL points to a search results page (not a listing detail page). Open the URL in a browser and confirm it displays a list of properties. Also verify the URL contains /resultados/ — detail page URLs won't work.

Why is my run failing or returning partial results? Imovirtual may be temporarily rate-limiting requests from your IP range. Try enabling residential proxies in the actor settings (Proxy > Apify Proxy > Residential). For very large runs (10,000+ items), residential proxies are strongly recommended.

Legality and disclaimer

This actor scrapes publicly accessible data from Imovirtual's website. It does not bypass any authentication or access controls. Users are responsible for ensuring their use of scraped data complies with applicable laws and Imovirtual's terms of service. This tool is intended for research, analysis, and internal business purposes only.

API usage

You can run this actor programmatically via the Apify API or SDK.

Node.js (ApifyClient)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('automation-lab/imovirtual-scraper').call({
startUrls: ['https://www.imovirtual.com/pt/resultados/comprar/apartamento/lisboa/lisboa'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python (ApifyClient)

from apify_client import ApifyClient
client = ApifyClient(token='YOUR_API_TOKEN')
run = client.actor('automation-lab/imovirtual-scraper').call(run_input={
'startUrls': ['https://www.imovirtual.com/pt/resultados/comprar/apartamento/lisboa/lisboa'],
'maxItems': 100,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

cURL

curl -X POST \
'https://api.apify.com/v2/acts/automation-lab~imovirtual-scraper/runs?token=YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"startUrls": ["https://www.imovirtual.com/pt/resultados/comprar/apartamento/lisboa/lisboa"],
"maxItems": 100
}'

Looking for real estate data from other European portals? Browse the Apify Store real estate collection for scrapers covering Spain, Italy, France, and more.