# Storia Ro Scraper \[Only $1.5💰] | Bucharest | Prices (`ahmed_jasarevic/storia-ro-scraper`) Actor

Scrape Romanian real estate listings from storia.ro — Romania's go-to property portal, part of OLX Group. Extract price, price/m², area, rooms, city/sector, GPS coordinates and agency or owner contacts for sale and rent. From $0.0015 per listing — the cheapest Storia scraper in the Apify Store.

- **URL**: https://apify.com/ahmed\_jasarevic/storia-ro-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.39 / 1,000 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 Ro Scraper

**Extract Romanian real estate listings from [storia.ro](https://www.storia.ro) — apartments, houses, plots and commercial property for sale and rent across all of Romania.** Get price, price per m², area, rooms, city/county, agency and owner contacts, GPS coordinates and listing attributes as structured JSON for Bucharest property market research, price monitoring and Romanian real estate databases.

At **$0.0015 per result**, this is the most affordable Storia.ro scraper in the Apify Store (competing Storia actors charge $0.002–$0.0045 per listing).

### Romanian Real Estate Use Cases

- **Bucharest apartment price monitoring** — track asking prices and new listings per city, county, district or sector over time
- **Romanian property market research** — analyze price per m², room counts and listing velocity per city (Bucharest, Cluj-Napoca, Timișoara, Iași, Brașov, …)
- **Real estate investment analysis** — screen sale listings for yield, price trends and area-level pricing for buy-to-rent strategies
- **Property lead generation** — collect agency and owner contact details (phone, email, profile links) for every listing, nationwide
- **Building a Romanian real estate database** — a full, structured dataset of Romania's largest classifieds network with GPS and attributes
- **Rental market tracking** — monitor rental listings per city for portfolio or relocation services

### How It Works

Put one or more storia.ro search URLs into `startUrls`. The actor uses Storia's internal API to page through search results and — optionally — visits each listing's detail page for extra fields (description, full attribute list, advertiser contact details). Each listing becomes one clean JSON row in your dataset.

### Build a Romanian Property Database Without an Official API

storia.ro is part of the **OLX Group** — the same classifieds family as Otodom and Imovirtual — and is Romania's go-to real estate classifieds platform (a top-2 property portal in the country by traffic). It offers no official listing API. This actor reads the structured data behind the site's own pages, so you get complete, analysis-ready records without a browser or API key.

### Input

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `startUrls` | array | ✅ | — | Storia.ro search URLs, e.g. `https://www.storia.ro/ro/rezidential/vanzare/apartament/bucuresti`, `https://www.storia.ro/ro/rezidential/vanzare`. Direct listing URLs also supported. |
| `maxItems` | integer | – | 100 | Maximum listings to export (0 = unlimited). Free tier: 10 items. |
| `scrapeDetails` | boolean | – | true | Visit each listing detail page to fetch extra fields (description, attributes, advertiser contacts). Adds **$0.0008 per listing**. |
| `proxy` | object | – | off | Use residential proxy if you hit anti-bot blocks. |

#### Example Input

```json
{
    "startUrls": [{ "url": "https://www.storia.ro/ro/rezidential/vanzare/apartament/bucuresti" }],
    "maxItems": 1000,
    "scrapeDetails": true
}
```

### Output

One dataset row per listing; set `scrapeDetails: true` to enrich records with owner/agency contacts, description and the full attribute set.

| Field | Description |
| --- | --- |
| `id` / `url` | Listing id and URL |
| `title` | Listing title |
| `transaction` | `SELL` / `RENT` |
| `price` / `currency` | Asking price (RON/EUR) |
| `pricePerSquareMeter` | Price per m² |
| `areaInSquareMeters` | Surface area |
| `roomsNumber` | Number of rooms |
| `city` / `county` | Location |
| `district` / `sector` / `street` | Sub-location (when available) |
| `advertiserType` | `agency` or `owner` |
| `agencyName`, `agencyPhones`, `agencyUrl` | Agency contact data (detail page) |
| `ownerName`, `ownerPhones`, `ownerContacts` | Owner contact data (detail page) |
| `gpsLatitude` / `gpsLongitude` | GPS coordinates (detail page) |
| `detailScraped` | Whether detail enrichment was applied |
| `event` | Monetization event name — `detail_scrape` when details were scraped, otherwise `null` |
| `attributes` / `description` | Full attributes and text (detail page) |
| `dateCreated` / `pushedUpAt` | Listing timestamps |

#### Example Output

```json
{
    "id": 312456789,
    "url": "https://www.storia.ro/ro/rezidential/vanzare/apartament/bucuresti/312456789",
    "title": "Apartament 3 camere, Drumul Taberei",
    "transaction": "SELL",
    "price": 145000,
    "currency": "EUR",
    "pricePerSquareMeter": 1611,
    "areaInSquareMeters": 90,
    "roomsNumber": 3,
    "city": "Bucuresti",
    "county": "Bucuresti",
    "district": "Sector 6",
    "advertiserType": "agency",
    "agencyName": "Imobiliare Alpha",
    "sellerPhones": ["+40721234567"],
    "gpsLatitude": 44.41,
    "gpsLongitude": 26.06,
    "detailScraped": true,
    "event": "listing",
    "dateCreated": "2026-09-20T10:12:00"
}
```

Download the dataset as **JSON, HTML, CSV or Excel**, or pull it via the Apify API.

### Integrations & Automation

Use the actor's **API endpoint** directly, chain **webhooks** to your pipeline on run completion, or trigger it from **Zapier / Make**. For Romanian property price monitoring, schedule **weekly runs per city** — recurring runs reveal price-per-m² trends and new-listing velocity over time.

### Related Actors

- [Imobiliare.ro – Romanian Real Estate](https://apify.com/swerve/imobiliare-scraper) — listings and prices from Romania's largest property portal
- [Imobiliare.ro Scraper – Romania Property Listings & Prices](https://apify.com/unfenced-group/imobiliare-ro-scraper) — Imobiliare.ro with optional detail enrichment
- [Zimmo Be Scraper](https://apify.com/ahmed_jasarevic/zimmo-be-scraper) — Belgian real estate listings by the same developer
- [Storia.ro Scraper – Romania Real Estate](https://apify.com/logiover/storia-ro-scraper-romania-real-estate) — another Storia.ro option

### FAQ

#### Why use this actor instead of the official Storia.ro website?

Storia.ro, like other OLX Group portals, offers **no official listing API**. Browsing the site page-by-page gives you no bulk export. This actor calls Storia's internal listing API directly, pages through results automatically and returns clean, structured records — including price-per-m² and GPS — ready for analysis.

#### What are alternatives to this actor for Romanian property data?

The main alternative is scraping **imobiliare.ro**, Romania's largest property portal (see Related Actors). For Storia.ro specifically, competing actors exist at $0.002–$0.0045 per listing; this actor is priced at **$0.0015 per result** (+ $0.0008/listing only when detail enrichment is enabled).

#### Which cities are covered?

All of Romania. Use any storia.ro search URL — nationwide (`/ro/rezidential/vanzare`), per city (`/apartament/bucuresti`, `/cluj-napoca`), or filtered (rooms, price, type, owner-only). The actor supports district/sector-level detail where the site provides it (e.g. Bucharest sectors).

#### Does the actor return owner and agency contacts?

Yes — with `scrapeDetails: true` (default), each listing's detail page is visited and **agency or owner phone numbers and profile links** are extracted. For a Romanian real estate data pipeline without contact data, set `scrapeDetails: false` and the price drops to $0.0015/listing.

#### What is the `event` field in the output?

`event` is the monetization event name: rows enriched via the detail page carry `event: "detail_scrape"` (the pay-per-event charged when `scrapeDetails` is enabled); non-enriched rows have `event: null`. Filter on `event` to separate enriched from listing-only rows, and on `transaction` (`SELL` vs `RENT`) to split sale from rental listings.

#### Is scraping storia.ro legal?

Web scraping operates in a legal gray area. This actor only reads publicly available listing data. You are responsible for complying with storia.ro's Terms of Service and applicable law (GDPR applies when processing personal data such as owner names and phone numbers).

### For AI Agents & LLM Apps

**Purpose:** Returns structured Romanian real estate listings from storia.ro — price, price/m², area, rooms, city/county, GPS, attributes and advertiser contacts — from one or more search URLs.

**Minimal input:**

```json
{ "startUrls": [{ "url": "https://www.storia.ro/ro/rezidential/vanzare/apartament/bucuresti" }] }
```

**Output fields:** `id`, `url`, `title`, `transaction`, `price`, `currency`, `pricePerSquareMeter`, `areaInSquareMeters`, `roomsNumber`, `city`, `county`, `district`, `sector`, `street`, `advertiserType`, `agencyName`, `agencyPhones`, `agencyUrl`, `ownerName`, `ownerPhones`, `ownerContacts`, `gpsLatitude`, `gpsLongitude`, `detailScraped`, `event`, `attributes`, `description`, `dateCreated`, `pushedUpAt`.

**Behaviors an agent should know:**

- `startUrls` is required; search URLs and direct listing URLs are both accepted.
- `scrapeDetails` defaults to **true** — it adds $0.0008 per listing but yields owner/agency contacts, description and full attributes (rows flagged `event: "detail_scrape"`). Set it to `false` for the cheapest listing-only runs.
- `maxItems: 0` means unlimited (billing uncapped); the free tier is capped at 10 items.
- `transaction` is `SELL` or `RENT`; `event` is `detail_scrape` when details were scraped, otherwise `null`.
- **Billing (pay-per-result):** $0.0015 per listing + $0.0008 per listing when `scrapeDetails` is enabled + $0.00005 actor start.

### SEO Keywords

storia scraper, storia.ro scraper, romania real estate data, bucharest apartment prices, romania property listings, price per square meter romania, bucharest real estate market, cluj-napoca apartments, timisoara real estate, brasov property listings, romania property investment, romanian real estate database, imobiliare.ro alternative, storia.ro api, romania rental listings, bucharest sectors property, romania agency contacts, romanian property lead generation, olx group real estate, romania house prices, storia.ro apartamente, agentii imobiliare bucuresti, vanzare apartament bucuresti

### Legal & Compliance Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Storia.ro or OLX Group**.

It accesses only **publicly available listing pages and Storia's internal listing API** — no login bypass, no CAPTCHA solving, no credentials.

Users are responsible for their own compliance with storia.ro's Terms of Service and applicable data-protection law (GDPR applies to output containing personal data such as owner names/phones and agency contacts). Personal contact data should not be used for unsolicited commercial outreach in violation of applicable law (e.g. GDPR). This section is informational, not legal advice.

# Actor input Schema

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

Storia.ro search result URLs to scrape. The actor follows pagination automatically. Examples: https://www.storia.ro/ro/rezultate/vanzare/apartament/toata-romania (sale, all Romania), https://www.storia.ro/ro/rezultate/inchiriere/apartament/toata-romania (rent), or a city-specific URL such as https://www.storia.ro/ro/rezultate/vanzare/apartament/bucuresti.

## `maxItems` (type: `integer`):

Maximum number of listings to scrape. 0 = unlimited (still capped by the actor's request safety limit). Free users are capped at 10 listings.

## `scrapeDetails` (type: `boolean`):

Visit each listing's detail page and merge GPS coordinates, agency/owner phone numbers, and full property attributes into the SAME dataset row (one row per listing). Each enriched row triggers the billable 'detail\_scrape' monetization event. Doubles the number of requests.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.storia.ro/ro/rezultate/vanzare/apartament/toata-romania"
    }
  ],
  "maxItems": 100,
  "scrapeDetails": true,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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/toata-romania"
        }
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/storia-ro-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/toata-romania" }],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/storia-ro-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/toata-romania"
    }
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/storia-ro-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/storia-ro-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/jN9AfqW4XNeh1PH5t/builds/f6vZ9P6ZvfFfHn3DH/openapi.json
