Imovirtual Scraper
Pricing
from $0.30 / 1,000 property listing extracteds
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
Maintained by CommunityActor 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?
| Field | Description | Example |
|---|---|---|
listingId | Unique Imovirtual listing ID | 19100936 |
url | Full URL to the listing page | https://www.imovirtual.com/pt/ad/... |
title | Listing title | T3 na Penha de França, Lisboa |
shortDescription | Short description from search results | Apartamento renovado em... |
estate | Property type | FLAT, HOUSE, TERRAIN, COMMERCIAL |
transaction | Sale or rent | SELL, RENT |
price | Asking price | 428000 |
currency | Price currency | EUR |
pricePerSqm | Price per square metre | 6114 |
areaM2 | Usable floor area (m²) | 70 |
terrainAreaM2 | Plot/terrain area (m²) | null |
rooms | Room count | ONE, TWO, THREE, FOUR, MORE |
floor | Floor number | 3 |
city | City/neighbourhood | Penha de França |
district | Administrative district | Lisboa |
province | Province/region | Lisboa |
parish | Parish | Penha de França |
street | Street name | Rua Doutor Oliveira Ramos |
agencyName | Agency or private owner name | ComprarCasa Foros de Amora |
agencyId | Agency ID on Imovirtual | 1277149 |
isPrivateOwner | Private owner listing? | false |
photos | Array of large photo URLs | ["https://..."] |
dateCreated | Listing creation date | 2026-05-10 10:44:44 |
pushedUpAt | Last bumped/renewed date | 2026-05-10T10:44:44+01:00 |
isPromoted | Promoted/featured ad? | false |
How to use it
Step 1 — Go to Imovirtual and run your search
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/lisboahttps://www.imovirtual.com/pt/resultados/arrendar/apartamento/porto/portohttps://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
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | string[] | (Lisbon apartments) | Imovirtual search result URLs to scrape |
maxItems | integer | 100 | Maximum listings to extract across all URLs |
maxRequestRetries | integer | 3 | Retry 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 tier | Price per listing | Cost per 1,000 | Cost 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
startUrlsto merge results across regions in a single run. ThemaxItemslimit 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 ApifyClientclient = 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}'
Related actors
Looking for real estate data from other European portals? Browse the Apify Store real estate collection for scrapers covering Spain, Italy, France, and more.