# Nieruchomosci-online Scraper - Polish Real Estate Listings (`studio-amba/nieruchomosci-online-scraper`) Actor

Scrape real estate listings from Nieruchomosci-online.pl, a major Polish property portal. Get prices, price per m2, area, rooms, floor, location, and owner-vs-agency seller type. Filter for owner-only listings. Covers apartments, houses, land. Sale and rental. No login needed.

- **URL**: https://apify.com/studio-amba/nieruchomosci-online-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Nieruchomosci-online Scraper

Extract real estate listings from [Nieruchomosci-online.pl](https://www.nieruchomosci-online.pl) (also written "Nieruchomości Online"), one of Poland's largest property portals ("Tu zaczyna się dom" — "Where home begins"). It covers apartments (mieszkania), houses (domy), land (działki), and commercial units across every Polish city and voivodeship, from both real estate agencies and private sellers.

### Why use this actor?

Nieruchomosci-online.pl sits alongside Otodom as one of Poland's top property portals, and often carries listings the bigger portals don't. It's also known in the Polish market for a large share of **owner-placed listings** — properties advertised bezpośrednio od właściciela (directly by the owner, no agency, no commission). This actor can isolate exactly those FSBO ("for sale by owner") listings with a single input toggle, which is useful for buyers who want to skip agency commissions and for anyone building lead lists of private sellers.

This actor pulls structured property data at scale — prices, price per m², areas, room counts, floors, locations, and seller type (owner vs agency) — without manual browsing, cookies, or a login.

Use cases: property market analysis, investment research, relocation planning, price monitoring across Polish cities, FSBO lead generation, academic housing studies, and competitor tracking for real estate agencies.

### How to scrape Nieruchomosci-online data

1. Go to the actor's page on the Apify Store.
2. Pick a property type: mieszkanie (apartment), dom (house), działka (land), lokal użytkowy or budynek użytkowy (commercial).
3. Choose transaction type: sprzedaż (sale) or wynajem (rent).
4. Enter a location, e.g. "Warszawa", "Krakow", "Wroclaw" — works with or without Polish diacritics.
5. Optionally switch on "Owner-only listings (FSBO)" to keep only ads placed bezpośrednio od właściciela, cutting out every agency listing.
6. Optionally set a price range in PLN, or paste your own search-result URLs from the site under "Direct Search URLs".
7. Click "Start" to run the scraper.
8. Download results as JSON, CSV, or Excel when it finishes.

The actor reads the schema.org listing data the site already renders server-side into every search page, so it works over plain HTTP (no browser needed) and is fast and cheap to run.

#### Jak zescrapować dane z Nieruchomosci-online.pl (PL)

1. Otwórz stronę actora w Apify Store.
2. Wybierz rodzaj nieruchomości: mieszkanie, dom, działka, lokal użytkowy lub budynek użytkowy.
3. Wybierz typ transakcji: sprzedaż lub wynajem.
4. Podaj lokalizację, np. "Warszawa", "Kraków", "Wrocław".
5. Zaznacz "Owner-only listings (FSBO)", jeśli chcesz wyłącznie ogłoszenia bezpośrednio od właściciela — bez pośredników i biur nieruchomości.
6. Opcjonalnie ustaw widełki cenowe albo wklej własne linki do wyników wyszukiwania.
7. Uruchom actora i pobierz wyniki w formacie JSON, CSV lub Excel.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `propertyType` | String | No | `mieszkanie` (apartment, default), `dom` (house), `dzialka` (land), `lokal-uzytkowy` (commercial unit), `budynek-uzytkowy` (commercial building) |
| `transactionType` | String | No | `sprzedaz` (sale, default) or `wynajem` (rent) |
| `location` | String | No | City or region, e.g. "Warszawa", "Krakow", "Gdansk". Works with or without diacritics. Empty = all Poland. |
| `ownerOnly` | Boolean | No | When `true`, returns only listings placed directly by the owner (bezpośrednio od właściciela) — no agencies. Default `false`. |
| `priceFrom` | Integer | No | Minimum price in PLN |
| `priceTo` | Integer | No | Maximum price in PLN |
| `startUrls` | Array | No | Advanced: paste your own Nieruchomosci-online.pl search-result URLs instead of building one from the fields above |
| `maxResults` | Integer | No | Maximum listings to return (default: 50) |
| `proxyConfiguration` | Object | No | Proxy settings. Polish residential proxies configured by default. |

### Output

Each listing contains:

| Field | Type | Example |
|-------|------|---------|
| `title` | String | `"Sprzedam Mieszkanie Warszawa - 83,30 m²"` |
| `propertyType` | String | `"mieszkanie"` |
| `transactionType` | String | `"sprzedaz"` |
| `price` | Number | null | `3250000` |
| `currency` | String | `"PLN"` |
| `pricePerM2` | Number | null | `39015.61` |
| `area` | Number | null | `83.3` |
| `rooms` | Number | null | `3` |
| `floor` | String | null | `"12/12"` |
| `city` | String | null | `"Warszawa"` |
| `district` | String | null | `"Ochota"` |
| `address` | String | null | `"Głębocka 84A, Warszawa"` |
| `sellerType` | String | null | `"owner"`, `"agency"`, or `"unknown"` |
| `phone` | String | null | Usually `null` — the site gates phone numbers behind a reveal click |
| `description` | String | null | Listing description snippet |
| `url` | String | Full listing URL |
| `imageUrl` | String | null | Primary listing photo URL |
| `imagesCount` | Number | `1` (search pages expose only the cover photo) |
| `publishedDate` | String | null | Usually `null` — not exposed on search-results pages |
| `scrapedAt` | String | ISO 8601 timestamp |

### Example output

```json
{
    "title": "Sprzedam Mieszkanie Warszawa - 83,30 m²",
    "propertyType": "mieszkanie",
    "transactionType": "sprzedaz",
    "price": 3250000,
    "currency": "PLN",
    "pricePerM2": 39015.61,
    "area": 83.3,
    "rooms": 3,
    "floor": "12/12",
    "city": "Warszawa",
    "district": null,
    "address": "Warszawa",
    "sellerType": "owner",
    "phone": null,
    "description": "Apartament w chmurach ostatnie 12 piętro i dwa tarasy...",
    "url": "https://warszawa.nieruchomosci-online.pl/mieszkanie-w-apartamentowcu,wysoki-standard/26772494.html",
    "imageUrl": "https://i.st-nieruchomosci-online.pl/kys96gl/mieszkanie-warszawa-sprzedaz.jpg",
    "imagesCount": 1,
    "publishedDate": null,
    "scrapedAt": "2026-07-16T19:24:33.416Z"
}
```

### Cost estimate

This actor uses a plain HTTP crawler (no browser), so it's cheap to run:

- **~50 results**: $0.05-0.15 in platform credits
- **~500 results**: $0.30-0.80 in platform credits
- **~5,000 results**: $2.00-5.00 in platform credits

Costs depend on proxy usage and the number of search pages scraped.

### Tips for best results

- **Use the owner-only filter** to isolate FSBO listings — Nieruchomosci-online.pl is one of the better Polish portals for finding sellers who skip agencies.
- **Start small** — test with `maxResults: 20` before running large scrapes.
- **Use specific locations** — searching "Warszawa" returns more focused results than searching all of Poland.
- **Combine filters** — narrow results with price range, location, and property type for targeted data.
- **Residential proxies** (configured by default) give the most reliable access.

### Limitations

- Price, area, and room count reflect what the search-results page exposes. A minority of new-development ("nowe mieszkanie") sub-listings don't disclose a per-unit price on the search page — those come back with `price: null`, which is a real gap in the source data, not a scraping error.
- `sellerType` is derived from the listing description text (unless `ownerOnly` is on, in which case it's site-verified). Listings with no clear owner/agency language in the description come back as `"unknown"`.
- `phone` and `publishedDate` are not exposed on search-results pages, so they're `null` for every listing. Getting them would require an extra request per listing to the detail page, which this actor doesn't do by default to keep runs fast.
- The actor scrapes the public website. No login or authentication is used. No cookies required.
- Price data reflects the listed asking price, not the final transaction price.
- Search pages return a fixed 47 listings per page (verified — page-size query params are ignored by the server).

### Supported property types

| Polish | English | Input value |
|--------|---------|-------------|
| Mieszkanie | Apartment | `mieszkanie` |
| Dom | House | `dom` |
| Działka | Land / Plot | `dzialka` |
| Lokal użytkowy | Commercial unit | `lokal-uzytkowy` |
| Budynek użytkowy | Commercial building | `budynek-uzytkowy` |

### Related scrapers

- [Otodom Scraper](https://apify.com/itsnotyouitsme/otodom-scraper) — Poland's largest real estate portal
- [Gratka Scraper](https://apify.com/itsnotyouitsme/gratka-scraper) — another major Polish property portal
- [OLX Scraper](https://apify.com/itsnotyouitsme/olx-scraper) — OLX.pl classifieds (covers real estate too)
- [Immoweb Scraper](https://apify.com/itsnotyouitsme/immoweb-scraper) — Belgium's #1 real estate portal
- [ImmoScout24 Scraper](https://apify.com/itsnotyouitsme/immoscout24-scraper) — German/Austrian real estate
- [Idealista Scraper](https://apify.com/itsnotyouitsme/idealista-scraper) — Spanish real estate portal
- [Funda Scraper](https://apify.com/itsnotyouitsme/funda-scraper) — Dutch real estate listings

# Actor input Schema

## `propertyType` (type: `string`):

Type of property to search for on Nieruchomosci-online.pl.

## `transactionType` (type: `string`):

Search for properties for sale or for rent.

## `location` (type: `string`):

City or region to search, e.g. 'Warszawa', 'Krakow', 'Wroclaw', 'Gdansk'. Works with or without Polish diacritics. Leave empty to search all of Poland.

## `ownerOnly` (type: `boolean`):

Nieruchomosci-online.pl is known for private-seller listings. Enable this to return ONLY listings placed directly by owners (bezposrednio od wlasciciela) — no real estate agencies.

## `priceFrom` (type: `integer`):

Minimum listing price in PLN.

## `priceTo` (type: `integer`):

Maximum listing price in PLN.

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

Advanced: paste one or more Nieruchomosci-online.pl search-result URLs directly (e.g. from applying filters on the site). When set, these are used instead of building a URL from the fields above.

## `maxResults` (type: `integer`):

Maximum number of property listings to scrape.

## `proxyConfiguration` (type: `object`):

Residential proxies recommended for best results. Polish proxies have the highest success rate.

## Actor input object example

```json
{
  "propertyType": "mieszkanie",
  "transactionType": "sprzedaz",
  "location": "Warszawa",
  "ownerOnly": false,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PL"
  }
}
```

# 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 = {
    "propertyType": "mieszkanie",
    "transactionType": "sprzedaz",
    "location": "Warszawa",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "PL"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/nieruchomosci-online-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 = {
    "propertyType": "mieszkanie",
    "transactionType": "sprzedaz",
    "location": "Warszawa",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "PL",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/nieruchomosci-online-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 '{
  "propertyType": "mieszkanie",
  "transactionType": "sprzedaz",
  "location": "Warszawa",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PL"
  }
}' |
apify call studio-amba/nieruchomosci-online-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/nieruchomosci-online-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/tHR7gx5A7mdI7oOWf/builds/m6hT8j9yroERvYipd/openapi.json
