# Storia Scraper (`ribtools/storia-scraper`) Actor

Scrape Storia.ro property listings (apartments, houses, land, rooms, commercial, developments) from any search, ad, agency or developer URL: prices, areas, locations, agency contacts.

- **URL**: https://apify.com/ribtools/storia-scraper.md
- **Developed by:** [RibTools](https://apify.com/ribtools) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 property data results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Storia Scraper

Extract property listings from **Storia**, Romania's OLX Group real-estate portal. Each listing comes with price, area, rooms, floor, full location and agency, for sale or rent. Optional add-ons fetch the full ad details and agency office phone numbers.

### What is Storia Scraper?

**Storia Scraper** collects property listings from [Storia](https://www.storia.ro/), the Romanian portal for apartments, studios, houses, land, rooms, commercial spaces, warehouses, garages and new residential developments. You give it starting URLs and it returns structured data for each listing:

- property type, sale or rent, and price in euro or lei (including price per m²)
- area and plot area, rooms, floor and the monthly rent an ad states
- county, city, commune and village (rural ads), Bucharest sector, neighborhood and street
- the agency or developer, plus promotion and exclusivity flags
- for new developments: construction stage, delivery date, number of units and the range of unit areas

Two optional add-ons go further. Ad details adds the full description, every photo, map coordinates, the build year, the unit's condition, primary or secondary market and every listed attribute. Seller data adds the agency's or developer's office phone numbers and address.

The scraper handles pagination, retries and data normalization itself, so the dataset is ready to analyze or feed into your systems.

### What can this Actor do?

- **Extract every property type**: apartments, studios, houses, land, rooms, commercial spaces, warehouses, garages and new developments, for sale and for rent
- **Handle multiple entry points**: searches with any filters, older Storia search links, single ad URLs, development URLs, and agency or developer pages
- **Automatic pagination**: crawls through every search result page, 72 properties per page
- **Ad details add-on**: full description, every photo, map coordinates, update date, build year, condition, market, features and every listed attribute
- **Seller data add-on**: agency or developer office phone numbers, address and Storia page
- **No duplicates**: each property is returned (and charged) once per run, even when listings move between pages
- **Premium proxies included**: Romanian residential proxies built in at no additional cost
- **Structured output**: JSON, CSV and Excel formats
- **API integration**: real-time data access through the Apify API
- **Scheduled runs**: automated daily or weekly collection

### What data can Storia Scraper extract?

| Field | Description | Example |
| ----- | ----------- | ------- |
| **ID** | Storia ad identifier | 10717228 |
| **Title** | Ad title | Vanzare ap 3 camere Bd Constantin Brancoveanu renovat et 2/4 |
| **Property Type** | What is for sale or rent | flat, house, room, terrain, commercial_property, hall, garage, investment |
| **Transaction** | Sale or rent | sale, rent |
| **Price** | Asking price or monthly rent, currency and price per m² | 122500, EUR, 1828.36 |
| **Monthly rent** | The monthly rent ("Chirie") an ad states | 750 |
| **Area** | Usable area and plot area in m² | 67 |
| **Rooms / Floor** | Room count and floor (0 = ground floor) | 3, 2 |
| **Location** | County, city, commune, village, Bucharest sector, neighborhood, street | Bucuresti, Sectorul 1, Cismigiu |
| **Development** | Construction stage, delivery, units and unit area range for new developments | ready, 2027-Q4, 36 |
| **Seller** | Seller type, agency or developer name and page | agency, Habitat Group Estate |
| **Flags and badges** | Promoted, exclusive, search highlights | BALCONY, AIR_CONDITIONING |
| **Media** | Thumbnail, photo count, video and virtual tour links | |
| **Dates** | Original publication and last push-up | 2026-10-21T18:43:29+00:00 |
| **Details** (add-on) | Description, photos, coordinates, condition, market, attributes | See below |
| **Seller** (add-on) | Agency or developer office phones and address | See below |

### How to scrape Storia

#### Step-by-step tutorial:

1. **Add starting URLs**: paste Storia search, ad, development or agency URLs (see compatible formats below)
2. **Configure options** (optional): turn on the ad details and/or seller data add-ons
3. **Run the scraper**: click "Start" and watch progress in real time
4. **Download results**: export the data as JSON, CSV or Excel

Proxies are included automatically — no setup required.

#### Compatible URL examples:

- **Apartments for sale**: `https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti`
- **Houses for rent**: `https://www.storia.ro/ro/rezultate/inchiriere/casa/toata-romania`
- **Filtered search (price, rooms, sort)**: `https://www.storia.ro/ro/rezultate/vanzare/apartament/cluj/cluj--napoca?priceMax=150000&roomsNumber=%5BTWO%5D&by=LATEST&direction=DESC`
- **All of Romania**: `https://www.storia.ro/ro/rezultate/vanzare/teren/toata-romania`
- **New developments**: `https://www.storia.ro/ro/rezultate/vanzare/investitii/toata-romania`
- **Older Storia search links**: `https://www.storia.ro/vanzare/apartament/bucuresti/`
- **Single ad** (with or without `.html`): `https://www.storia.ro/ro/oferta/vanzare-ap-3-camere-bd-constantin-brancoveanu-renovat-et-2-4-IDIY2v`
- **Single development**: `https://www.storia.ro/ro/ansamblu/astoria-residence-apartamente-intabulate-1-si-2-camere-decomandate-IDIzKa`
- **Agency page (whole inventory, sale and rent)**: `https://www.storia.ro/ro/companii/agentii/agentia-imobiliara-imobicom-srl-ID5146807`
- **Developer page**: `https://www.storia.ro/ro/companii/dezvoltatori/astoria-residence-ID4783256`

**Important**: only URLs that match these patterns will work, in Romanian (`/ro/`): Storia doesn't serve other language versions. Search URLs are run exactly as you copied them, with every filter. Storia answers a search for a property type it doesn't recognise with apartments from all of Romania; the scraper skips such a URL rather than return results you didn't ask for.

### How much does it cost to scrape Storia?

Storia Scraper uses **pay-per-result (PPR)** pricing: you only pay for properties it successfully extracts.

#### Is scraping Storia free?

The scraper follows Apify's PPR model with the following structure:

- **Base extraction**: one charge per scraped property (price, area, rooms, location, agency)
- **Ad details add-on**: one additional charge per property, only when the details add-on is on and the ad returns data
- **Seller data add-on**: one additional charge per property, only when at least one office phone number is returned. You are never charged it for private owners or for agencies without a published phone.

The scraper keeps compute usage low while maintaining a high success rate. Contact support for volume discounts on large-scale projects.

### Input configuration

The scraper accepts the following inputs:

#### Start URLs

Storia URLs copied from your browser:

- searches for sale (`/ro/rezultate/vanzare/...`) or rent (`/ro/rezultate/inchiriere/...`), for any property type and with any filters applied (location, price, area, rooms, sort), and older Storia search links (`/vanzare/apartament/bucuresti/`)
- single ad URLs (`/ro/oferta/...-IDIY2v`) and development URLs (`/ro/ansamblu/...`)
- agency or developer pages (`/ro/companii/agentii/...-ID5146807`, `/ro/companii/dezvoltatori/...`)

#### Maximum items

Maximum number of properties to scrape (each result is a charged event). Leave empty for no limit.

#### Fetch ad details (add-on)

Opens each ad to add:

- the full description and every photo
- map coordinates and the update date
- bathrooms, build year, energy certificate, the unit's condition and primary or secondary market
- features and every listed attribute

Charged per property with details.

#### Fetch seller data (add-on)

Adds the seller profile: the agency's or developer's office phone numbers, address and Storia page. You are charged only when a phone number is returned.

### Output example

```json
{
  "type": "property",
  "id": 10717228,
  "url": "https://www.storia.ro/ro/oferta/vanzare-ap-3-camere-bd-constantin-brancoveanu-renovat-et-2-4-IDIY2v",
  "title": "Vanzare ap 3 camere Bd Constantin Brancoveanu renovat et 2/4",
  "property_type": "flat",
  "transaction": "sale",
  "price": 122500,
  "currency": "EUR",
  "price_per_m2": 1828.36,
  "price_from_per_m2": null,
  "area_m2": 67.0,
  "terrain_area_m2": null,
  "rooms": 3,
  "rooms_label": "THREE",
  "floor": 2,
  "monthly_rent": null,
  "region": "Bucuresti",
  "city": "Bucuresti",
  "commune": null,
  "village": null,
  "sector": "Sectorul 1",
  "neighborhood": "Cismigiu",
  "street": "Bulevardul Constantin Brancoveanu",
  "construction_status": null,
  "development_delivery": null,
  "development_units": null,
  "development_area_min_m2": null,
  "development_area_max_m2": null,
  "seller_type": "agency",
  "seller_id": "4421398",
  "seller_name": "Habitat Group Estate",
  "seller_url": "https://www.storia.ro/ro/companii/agentii/habitat-group-estate-ID4421398",
  "is_promoted": false,
  "is_exclusive": false,
  "badges": [
    "AIR_CONDITIONING",
    "SEPARATE_KITCHEN",
    "BALCONY"
  ],
  "thumbnail": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Imx4NXp6cndsdjJkazItRUNPU1lTVEVNIiwidyI6W3siZm4iOiIzdzU2NnhnanB5MnAxLUFSTyIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.hGaDgIWFskIi78NfN8A5ym5EOW7amsFZF1cw7OLCJ68/image;s=1280x1024;q=80",
  "photo_count": 11,
  "video_url": null,
  "virtual_tour_url": null,
  "listed_at": "2026-10-21T18:43:29+00:00",
  "bumped_at": null,
  "details": {
    "description": "Vă propun spre vânzare un apartament cu 3 camere, situat pe Bulevardul Brâncoveanu, la etajul 2 din 4.\n\nApartamentul are 67 mp, este semidecomandat și a fost renovat complet în 2023...",
    "photos": [
      "https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6Imx4NXp6cndsdjJkazItRUNPU1lTVEVNIiwidyI6W3siZm4iOiIzdzU2NnhnanB5MnAxLUFSTyIsInMiOiIxNCIsInAiOiIxMCwtMTAiLCJhIjoiMCJ9XX0.FnnYmXDUQH2U0-zOqb3EpC6rQhLe5NecAv2y9rTsxbs/image;s=1280x1024;q=80"
    ],
    "latitude": 44.436141,
    "longitude": 26.102684,
    "updated_at": "2026-10-21T21:43:45+03:00",
    "bathrooms": null,
    "build_year": 1968,
    "energy_certificate": null,
    "condition": "ready_to_use",
    "market": "secondary",
    "building_type": "apartment",
    "features": [
      "mobilier",
      "frigider",
      "masina de spalat",
      "balcon",
      "aer conditionat",
      "bucatarie separata"
    ],
    "attributes": {
      "price": "122500",
      "m": "67",
      "price_per_m": "1828.36",
      "rooms_num": "3",
      "market": "secondary",
      "building_type": "apartment",
      "floor_no": "floor_2",
      "building_floors_num": "4"
    }
  },
  "seller": {
    "type": "agency",
    "id": "4421398",
    "name": "Habitat Group Estate",
    "phones": [
      "+40210000000"
    ],
    "address": "Turnu Magurele 270D, 040894, Bulevardul Constantin Brancoveanu, Berceni, Sectorul 4, Bucuresti (strada)",
    "profile_url": "https://www.storia.ro/ro/companii/agentii/habitat-group-estate-ID4421398"
  }
}
```

This example is shortened: real items carry the full description, every photo and every listed attribute. The phone number above is a placeholder.

The search-only fields (`is_promoted`, `badges`, `photo_count`, `rooms_label`, `development_delivery`, `development_units`, `development_area_min_m2`, `development_area_max_m2`) are empty for single ad and development URLs. `photo_count` is also empty for agency pages.

You can download the dataset extracted by **Storia Scraper** as **JSON, HTML, CSV or Excel**. The data is already cleaned and normalized, ready for analysis tools, databases or business applications.

### Use cases and applications

- **Housing market research**: track asking prices, rents and price per m² by county, city, Bucharest sector, neighborhood and property type across Romania
- **Property valuation**: compare comparable listings by area, rooms, floor, build year and condition
- **New-development tracking**: follow developments, their construction stage, delivery dates, unit counts and price per m²
- **Agency lead generation and monitoring**: build lists of agencies and developers with office phones, or follow an agency's whole inventory on a schedule

### Integrations and API access

Storia Scraper integrates with these platforms:

- **Zapier**: automate data workflows and notifications (via the [Apify Zapier integration](https://docs.apify.com/platform/integrations/zapier))
- **Make (Integromat)**: build multi-step automations (via the [Apify Make integration](https://www.make.com/en/integrations/apify))
- **Google Sheets**: export data directly for analysis
- **REST API**: programmatic access to the extracted data ([instructions here](https://docs.apify.com/academy/api/run-actor-and-retrieve-data-via-api))
- **Python/Node.js SDKs**: integrate the scraper into your applications ([instructions here](https://docs.apify.com/academy/api/run-actor-and-retrieve-data-via-api#javascript-and-python-client))

### FAQ and Support

#### Do I need to configure a proxy?

No. The Actor includes Romanian residential proxies automatically at no additional cost. There's nothing to configure.

#### Why are there no phone numbers or names for private owners or agents?

To protect individuals' privacy under the EU's GDPR, the scraper returns only agency and developer business data: their trading name, office phone numbers and office address. Private owners come back as `seller_type: "private"` with no name and no phone, and they are not charged for the seller add-on. Individual agents' names and personal mobiles are never returned as fields. The street is returned as the ad's page shows it. In the ad description, phone numbers are replaced with `[phone hidden]`, as Storia hides them on the ad page.

#### What are `rooms`, `monthly_rent` and `sector`?

`rooms` is Storia's own room count (camere), which includes the living room. `monthly_rent` is the monthly rent ("Chirie") an ad states: on rental ads it repeats the price, and some sale ads give the rent the property earns. It is empty when the ad doesn't give one. `sector` is one of Bucharest's six sectors. `price` is empty for new developments (the units have their own prices) and for "price on request" ads.

#### How often is the data updated?

Storia updates listings in real time. For fresh data, schedule regular runs or call the API on demand.

#### What if some URLs don't work?

The scraper only supports the Storia URL patterns listed above, and it skips any other URL. That includes searches for a property type Storia doesn't recognise, older search links Storia itself no longer resolves, and non-Romanian language URLs.

#### Do you offer custom solutions?

Yes. We can customize the scraper for specific requirements, extra data points, or integration with your existing systems. Contact us through the Issues tab for enterprise solutions.

#### Need help or have feedback?

- **Report issues**: use the Issues tab for bug reports and feature requests
- **Custom development**: contact us for tailored solutions and enterprise integrations

### În română

**Storia Scraper** extrage anunțuri imobiliare de vânzare și închiriere de pe [Storia](https://www.storia.ro/). Fiecare anunț conține:

- tipul proprietății și prețul în euro sau lei (și prețul pe m²)
- suprafața utilă, suprafața terenului, numărul de camere, etajul și chiria lunară
- județul, orașul, comuna și satul (anunțuri rurale), sectorul din București, cartierul și strada
- agenția imobiliară sau dezvoltatorul
- la ansambluri rezidențiale: stadiul construcției, termenul de finalizare, numărul de unități și intervalul de suprafețe

Proxy inclus, fără configurare.

**Adrese URL acceptate:**

- căutări de vânzare (`/ro/rezultate/vanzare/...`) sau închiriere (`/ro/rezultate/inchiriere/...`), orice tip de proprietate și orice filtre, precum și linkurile vechi de căutare Storia (`/vanzare/apartament/bucuresti/`)
- anunțuri individuale (`/ro/oferta/...-IDIY2v`, și cu `.html`) și ansambluri (`/ro/ansamblu/...`)
- paginile agențiilor și dezvoltatorilor (`/ro/companii/agentii/...-ID5146807`, `/ro/companii/dezvoltatori/...`), cu toată oferta de vânzare și închiriere

**Suplimente (add-ons):**

- **Detaliile anunțului**: descrierea completă, toate fotografiile, coordonatele, data actualizării, anul construcției, starea, piața primară sau secundară, dotările și toate atributele anunțului. Taxat pentru fiecare proprietate cu detalii.
- **Datele vânzătorului**: telefoanele de birou ale agenției sau dezvoltatorului, adresa și pagina Storia. Conform GDPR, doar date ale firmelor: proprietarii persoane fizice apar cu `seller_type: "private"`, fără nume și fără telefon, iar suplimentul nu se taxează pentru ei. Numele și telefoanele personale ale agenților nu sunt returnate. În descriere, numerele de telefon sunt înlocuite cu `[phone hidden]`, așa cum le ascunde și Storia. Taxat doar când este returnat cel puțin un număr de telefon.

**Note:**

- Fiecare proprietate este returnată (și taxată) o singură dată pe rulare.
- `rooms` este numărul de camere după Storia (inclusiv livingul).
- `price` este gol la ansambluri și la anunțurile cu „preț la cerere”; `monthly_rent` este chiria lunară menționată în anunț.

# Changelog

This Actor's version history is a separate document: https://apify.com/ribtools/storia-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Storia URLs copied from your browser. Search URLs for sale (`/ro/rezultate/vanzare/...`) or rent (`/ro/rezultate/inchiriere/...`) of any property type, with any filters applied (location, price, area, rooms, sort), e.g. `https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti?priceMax=100000`. Older search links (`https://www.storia.ro/vanzare/apartament/bucuresti/`), single ad URLs (`/ro/oferta/...-IDIY2v`, with or without `.html`), development URLs (`/ro/ansamblu/...`) and agency or developer pages (`/ro/companii/agentii/...-ID5146807`, `/ro/companii/dezvoltatori/...`) also work.

## `maxRequests` (type: `integer`):

Maximum number of properties to scrape (each result is a charged event). Leave empty for no limit.

## `detailsAddon` (type: `boolean`):

Open each ad to add the full description, every photo, map coordinates, the update date, bathrooms, build year, energy certificate, the unit's condition, primary or secondary market, features and every listed attribute. Charged per property with details.

## `sellerDataAddon` (type: `boolean`):

Add the seller profile: agency or developer office phone numbers, address and Storia page. Phone numbers are returned for agencies and developers only, never for private owners. You are charged only when a phone number is returned.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti"
    }
  ],
  "maxRequests": 10,
  "detailsAddon": false,
  "sellerDataAddon": false
}
```

# Actor output Schema

## `items` (type: `string`):

All scraped items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti"
        }
    ],
    "maxRequests": 10,
    "detailsAddon": false,
    "sellerDataAddon": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("ribtools/storia-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti" }],
    "maxRequests": 10,
    "detailsAddon": False,
    "sellerDataAddon": False,
}

# Run the Actor and wait for it to finish
run = client.actor("ribtools/storia-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti"
    }
  ],
  "maxRequests": 10,
  "detailsAddon": false,
  "sellerDataAddon": false
}' |
apify call ribtools/storia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ribtools/storia-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xwDlasm13n4hleUW4/builds/tjt9ntaidgQHZXR1b/openapi.json
