# Poland Real Estate Transaction Prices (RCN) (`kris_fili/poland-real-estate-transaction-prices`) Actor

Real apartment prices from notarial deeds in Poland: median price per m², trend and transactions for any address. Official register, no scraping. Latest medians: Warsaw 15,742 PLN/m², Krakow 14,961 PLN/m² (deeds to September 2026).

- **URL**: https://apify.com/kris_fili/poland-real-estate-transaction-prices.md
- **Developed by:** [Krzysztof Filipiak](https://apify.com/kris_fili) (community)
- **Categories:** Real estate, AI, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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.

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

## Poland Real Estate Transaction Prices (RCN) – what apartments really sold for

**Real prices from notarial deeds, not asking prices.** Give any place in Poland – a city, a street, an address or coordinates – and get the median price per m², the price range, the trend and the individual transactions from Poland's official **Real Estate Price Register (Rejestr Cen Nieruchomości, RCN)**.

Listing portals only show what sellers *hope* to get. This Actor shows what buyers *actually paid*, straight from the register kept by Polish counties and published by the Head Office of Geodesy and Cartography (GUGiK). Since February 2026 the register is free to access – this Actor turns it into clean, ready-to-use data.

### What you get

**1. Area report** (one record per run)

- median price per m² with p10 / p25 / p75 / p90, mean, min and max
- median total price and median apartment size
- price per m² by number of rooms and by market (primary = from developer, secondary = resale)
- quarterly trend and year-over-year change
- how many transactions were found and why some were left out of the statistics

**2. Individual transactions** (newest first)

- deed date, total price, usable area, price per m²
- rooms (incl. kitchen, as recorded in the register), floor
- market type, seller and buyer type (person / company / municipality)
- street and building number, distance from your location, coordinates

### Example

Input:

```json
{
  "location": "Kraków, Rynek Główny 1",
  "radiusMeters": 1000,
  "propertyType": "apartment",
  "monthsBack": 24
}
```

Area report (shortened, real output from October 2026):

```json
{
  "recordType": "summary",
  "location": { "matched": "Kraków, Rynek Główny, 1", "latitude": 50.061449, "longitude": 19.936491 },
  "searchArea": "radius 1000 m around: Kraków, Rynek Główny, 1",
  "statistics": {
    "transactionsFound": 569,
    "transactionsUsedInStatistics": 514,
    "pricePerM2Pln": { "median": 19985, "p25": 15646, "p75": 25795 },
    "pricePerM2ByMarket": { "primary": { "median": 29256 }, "secondary": { "median": 18555 } },
    "yearOverYear": { "changePct": -4.2 },
    "lastTransactionDate": "2026-08-20"
  }
}
```

Transaction:

```json
{
  "recordType": "transaction",
  "date": "2026-08-20",
  "market": "secondary",
  "priceTotalPln": 755000,
  "areaM2": 31.32,
  "pricePerM2Pln": 24106.0,
  "roomsInclKitchen": 2,
  "floor": 2,
  "city": "Kraków",
  "street": "Henryka Siemiradzkiego",
  "buildingNumber": "14",
  "distanceM": 907,
  "usedInStatistics": true
}
```

The whole run took about 6 seconds.

### Who uses it

- **Investors and flippers** – check the real exit price before you buy.
- **Appraisers and lenders** – comparable transactions in seconds.
- **Real estate agents** – show clients facts, not portal asking prices.
- **Proptech and analysts** – a clean, repeatable feed for models and dashboards.
- **AI agents** – call it through the Apify MCP server to answer "what do flats sell for near X?" with real data.

### Property types

- **Apartments** – the most complete data (recommended).
- **Commercial units**, **garages / parking**.
- **Houses with land** and **land plots** – provided as published (beta); prices often cover the whole deed.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Area report (once per run, only when transactions were found) | $0.25 |
| Transaction record | $0.003 each ($3 per 1,000) |

A typical run – one area report plus 200 transactions – costs about **$0.85**. Set *Include individual transactions* to off to pay only for the report.

### Data quality and privacy

- Source: Rejestr Cen Nieruchomości, WFS service of GUGiK (public register, free since 13 Feb 2026).
- No personal data: no names, no flat numbers, no deed numbers, no notary offices – only the building address.
- Transactions are left out of statistics (but still listed) when the price covers a whole deed with several properties, only a share was sold, the sale was not on the free market, the date is invalid or the price per m² is implausible (below 35% or above 300% of the local median – typically discounted municipal flats). The reason is in `excludedReason`.
- Coverage: most counties publish to the national service, including Warsaw, Kraków, Wrocław, Poznań, Gdańsk, Łódź, Szczecin, Lublin and Katowice; a few do not yet (e.g. Bydgoszcz). Counties add deeds with a delay of a few weeks to several months – every report shows `lastTransactionDate` and adds a note when the newest deed is older than 4 months.

### FAQ

**Why "rooms incl. kitchen"?** The register counts rooms the official way ("izby"), kitchen included. A typical 2-room flat has `roomsInclKitchen = 3`.

**What does "whole city" do?** It takes all transactions in the city's county – available for the 66 cities with county rights (Warszawa, Kraków, Wrocław, Łódź, Poznań, Gdańsk and others).

**Parking spaces?** In shared garages a parking space is sold as a share of the whole garage. Such records are kept with their price per space (`priceScope: "parking_space_share"`) and without a price per m².

**My address was not found.** Use Polish characters ("Świdnicka", not "Swidnicka") or paste coordinates like `51.1079, 17.0385`.

***

#### Po polsku

Prawdziwe ceny transakcyjne mieszkań z Rejestru Cen Nieruchomości (akty notarialne). Podajesz miasto, ulicę albo adres – dostajesz medianę ceny za m², rozrzut cen, trend i listę transakcji z okolicy. Dane bez danych osobowych, aktualizowane przez starostwa.

# Actor input Schema

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

City, street or full address in Poland (use Polish characters), e.g. 'Kraków', 'Warszawa, Puławska 100', 'Gdańsk, Długa 1'. You can also paste coordinates: '50.0614, 19.9372'. / Miasto, ulica albo adres.

## `searchArea` (type: `string`):

'Radius around the location' or 'Whole city' (whole city works for the 66 cities with county rights, e.g. Warszawa, Kraków, Wrocław, Poznań, Gdańsk, Łódź).

## `radiusMeters` (type: `integer`):

Used when search area is a radius. 100–5000 m.

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

Apartments are the most complete data. Houses and land are provided as-is (beta).

## `market` (type: `string`):

Primary = bought from a developer, secondary = resale. 'Any' includes both.

## `monthsBack` (type: `integer`):

How many months of transactions to analyse (ignored when 'Date from' is set).

## `dateFrom` (type: `string`):

YYYY-MM-DD

## `dateTo` (type: `string`):

YYYY-MM-DD, default today

## `minAreaM2` (type: `integer`):

Only transactions with usable area at least this many m² (optional).

## `maxAreaM2` (type: `integer`):

Only transactions with usable area at most this many m² (optional).

## `minRooms` (type: `integer`):

Apartments only. The register counts rooms INCLUDING the kitchen ('izby'): a typical 2-room flat = 3. Optional.

## `maxRooms` (type: `integer`):

Apartments only, rooms including the kitchen ('izby'). Optional.

## `includeTransactions` (type: `boolean`):

If off, you get only the area report (statistics).

## `maxTransactions` (type: `integer`):

Newest first. Statistics always use all transactions found.

## Actor input object example

```json
{
  "location": "Kraków, Rynek Główny 1",
  "searchArea": "radius",
  "radiusMeters": 1000,
  "propertyType": "apartment",
  "market": "any",
  "monthsBack": 24,
  "includeTransactions": true,
  "maxTransactions": 200
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "location": "Kraków, Rynek Główny 1"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kris_fili/poland-real-estate-transaction-prices").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 = { "location": "Kraków, Rynek Główny 1" }

# Run the Actor and wait for it to finish
run = client.actor("kris_fili/poland-real-estate-transaction-prices").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 '{
  "location": "Kraków, Rynek Główny 1"
}' |
apify call kris_fili/poland-real-estate-transaction-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kris_fili/poland-real-estate-transaction-prices"
        }
    }
}
```

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/eHbJrN5WVQjMz5yAW/builds/hAHRDDZTtq32f4p0R/openapi.json
