Otodom, Storia, Imovirtual Scraper (search, filters, alerts)
Pricing
from $0.80 / 1,000 result items
Otodom, Storia, Imovirtual Scraper (search, filters, alerts)
Otodom.pl, Storia.ro and Imovirtual.com scraper for OLX Group real estate: flats, houses and land to rent or buy, by location, price, area and rooms or any result URL. Rows with price, price per m2, area, rooms, floor, district, city, agency, photos. Monitor mode alerts on new listings.
Pricing
from $0.80 / 1,000 result items
Rating
0.0
(0)
Developer
Viktor Dubnytskiy
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
17 days ago
Last modified
Categories
Share
One scraper for OLX Group's three property portals — Otodom.pl (Poland), Storia.ro (Romania) and Imovirtual.com (Portugal) — no login, no cookies, no proxy.
What you get
Real rows from the example dataset (site: storia, rent, flat, bucuresti):
| title | price | area | district | agencyName |
|---|---|---|---|---|
| Inchiriere 2 camere 13Septembrie|Bloc Nou|Parcare | 649 EUR | 55 m² | 13 Septembrie | George Estate Group |
| Apartament 2 Camere | Victoriei | Complet Mobilat si Utilat, Parcare | 699 EUR | 55 m² | Dorobanti | Focus Imobiliare |
| Apartament 2 camere Drumul Taberei zona Favorit | 400 EUR | 53 m² | Drumul Taberei | Galaxy Imob |
Full row: listingId, site, country, url, title, transaction, estate, price, currency, rentPrice, pricePerSqm, area, terrainArea, rooms, floor, city, district, province, locationPath, lat, lon, isPrivateOwner, isPromoted, isExclusive, agencyId, agencyName, developmentId, developmentTitle, createdAt, pushedUpAt, images[], description, tags[], page, rank, scrapedAt.
Use cases
- Rental yield and price research — pull a district with
price,areaandpricePerSqmalready computed and compare neighbourhoods directly. - Flat hunting with alerts — watch one city and price band and get notified the moment a matching listing appears or drops price.
- Agency and market analysis — measure how much of a market is agency-listed vs. private (
isPrivateOwner,agencyName) and how fast listings are bumped.
Try it in 10 seconds
Hit Start/Try it — the input already works: site: storia, transaction: rent, estate: flat, location: bucuresti, maxPages: 3, maxItems: 20, nothing required.
To track a search over time instead of a one-off pull: save the task, set Mode to monitor, and put it on a schedule (Apify → Schedules → cron 0 8 * * 1 for weekly). Each run then returns only listings that are new or re-priced since last time, and can post the diff to a webhook or Telegram.
How it works
All three portals are one Next.js platform, so the actor reads the structured listing data the pages embed — no login, no cookies, no proxy. Give site, transaction, estate and a location segment copied from the portal's own URL, plus optional price/area/room bounds; or paste searchUrls to reuse a filter set exactly. Pagination runs 36 listings per page until maxPages or maxItems. In monitor mode the run is compared with the previous run of the same Task and only new or re-priced listings are pushed, with an optional webhook or Telegram summary.
Input
| Field | Meaning | Default |
|---|---|---|
site | storia (RO), otodom (PL) or imovirtual (PT) — one per run | storia |
transaction | rent or sale | rent |
estate | flat, house, room, terrain, commercial, office | flat |
location | Location segment as in the portal URL, e.g. bucuresti | bucuresti |
priceFrom / priceTo | Price range in the portal's currency, e.g. 400 / 900 | — |
areaFrom | Minimum living area in m², e.g. 50 | — |
roomsFrom | Minimum rooms, 1–6 | — |
searchUrls | Any result URLs of that portal; overrides the fields above | — |
maxPages | Pages per search, 36 listings each | 3 |
maxItems | Stop after this many listings | 20 |
mode | scrape, or monitor for new/changed only | scrape |
webhookUrl, telegramBotToken, telegramChatId | Where monitor-mode change summaries are sent | — |
Pricing
| Event | Price |
|---|---|
| result | $0.001 per listing ($1 per 1,000) |
| monitor-check | $0.005 per monitor run |
| change | $0.001 per new/changed listing |
Charged only for listings actually pushed — an empty run costs you nothing. No proxy needed.
Why this actor
- Three countries, one schema: Otodom, Storia and Imovirtual rows line up field for field.
pricePerSqmcomes straight from the portal, so €/m² comparisons need no maths of your own.- Private-owner and agency flags on every row, which is what separates real market supply from agency churn.
- Any result URL can be pasted in, so the filters you set on the site are preserved exactly.
- Monitor mode with new-listing and price-change alerts, delivered by webhook or Telegram — and no proxy to configure.
Limits
- Listing detail pages are not opened (
urlleads to the ad). - Location must be given as the portal's URL segment (copy it from the site's address bar).
lat/lonare filled only where the portal exposes them;city,district,provinceandlocationPathare always present.- One run covers one portal; schedule one Task per country to cover all three.
FAQ
Can I monitor new listings for a search? Yes. Save the input as a Task, set mode: monitor and schedule it — each run returns only listings that appeared or changed price since the previous run, and can POST a summary to webhookUrl or a Telegram chat.
Which countries and portals are supported? Poland via Otodom.pl, Romania via Storia.ro and Portugal via Imovirtual.com. Pick one per run with the site field; prices come back in that portal's own currency.
How do I set the location? Copy the location part of the portal's own search URL: bucuresti or cluj-napoca on Storia, mazowieckie/warszawa/warszawa/warszawa on Otodom, lisboa on Imovirtual. Or skip it and paste the whole result URL into searchUrls.
Changelog
- 0.1: initial release.
If this actor saved you time, please leave a review on its Store page — it is the main way other buyers find it. Bug reports and field requests are welcome in the Issues tab.