# Poland Apartment Valuation (AVM) – Notarial Deed Prices (`kris_fili/poland-apartment-valuation`) Actor

Estimate the market value of any apartment in Poland from real notarial deed prices (official RCN register): value, price per m², range, confidence and comparable sales.

- **URL**: https://apify.com/kris_fili/poland-apartment-valuation.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 $490.00 / 1,000 apartment valuations

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 Apartment Valuation (AVM) – value from real notarial deed prices

**How much is this apartment worth?** Give an address in Poland and the floor area – get an automated valuation based on **what buyers actually paid in notarial deeds** nearby, not on asking prices from listing portals.

The estimate comes from Poland's official **Real Estate Price Register (Rejestr Cen Nieruchomości, RCN)**, the register of notarial deeds kept by Polish counties and published by GUGiK. Comparable sales are adjusted to today's price level and weighted by how similar they are to your apartment.

![Median apartment price per m² from notarial deeds in Polish cities – refreshed weekly](https://api.apify.com/v2/key-value-stores/kris_fili~promotor-publiczne/records/mapa-ceny-en.png)

### What you get (one record per apartment)

- **estimated value** in PLN and **price per m²**
- **value range** (25th–75th percentile of similar sales) and a **confidence** level (high / medium / low)
- the **10 most similar sales** used: month or date, price, area, price per m², rooms, floor, street, distance
- the **local market**: median price per m² in the area, quarterly trend, year-on-year change, newest deed
- **developers' asking prices** for similar new apartments within 2 km (from their mandatory daily price lists) – a useful reference for new builds
- notes on data quality and the full methodology

### Example

Input:

```json
{
  "location": "Kraków, Długa 12",
  "areaM2": 54,
  "rooms": 2,
  "floor": 3
}
```

Output (shortened, real run from October 2026):

```json
{
  "recordType": "valuation",
  "estimatedValuePln": 930000,
  "estimatedPricePerM2Pln": 17226,
  "valueRangePln": { "low": 800000, "high": 1121000 },
  "confidence": "medium",
  "comparablesUsed": 312,
  "searchRadiusM": 1000,
  "localMarket": { "salesInRadius": 902, "medianPricePerM2Pln": 18595, "lastDeedMonth": "2026-08" },
  "newBuildAskingPrices": { "offers": 278, "medianPricePerM2Pln": 22900, "radiusM": 2000 },
  "comparables": [
    { "month": "2026-08", "priceTotalPln": 1240000, "areaM2": 58.19, "pricePerM2Pln": 21309.5, "roomsInclKitchen": 3, "floor": 3, "street": "Władysława Spasowskiego", "distanceM": 440, "similarity": 1.0 },
    { "date": "2026-01-08", "priceTotalPln": 837000, "areaM2": 46.69, "pricePerM2Pln": 17926.75, "adjustedPricePerM2Pln": 17233, "roomsInclKitchen": 3, "floor": 2, "street": "Biskupia", "distanceM": 303, "similarity": 0.909 }
  ]
}
```

More real results from the same day:

| Apartment | Estimate | PLN / m² | Confidence |
|---|---|---|---|
| Warszawa, Puławska 100 · 48 m² · 2 rooms | 792,000 PLN | 16,494 | high |
| Gdańsk, Grunwaldzka 100 · 60 m² · 3 rooms | 749,000 PLN | 12,476 | medium |
| Wieliczka, Słowackiego 5 · 50 m² | 646,000 PLN | 12,917 | high |
| Zakopane, Krupówki 10 · 40 m² | 762,000 PLN | 19,059 | medium |
| Lublin, Narutowicza 20 · 65 m² · 3 rooms | 570,000 PLN | 8,765 | high |

A valuation takes a few seconds.

### Value many apartments at once

Put up to 100 apartments in `apartments` – useful for portfolios, lenders, property managers and lead scoring:

```json
{
  "apartments": [
    { "location": "Gdańsk, Długa 1", "areaM2": 48, "rooms": 2, "floor": 3 },
    { "location": "Poznań, Półwiejska 20", "areaM2": 63, "rooms": 3 },
    { "location": "Wrocław, Świdnicka 10", "areaM2": 37, "market": "secondary" }
  ]
}
```

Each successful valuation is a separate record (and a separate charge). Addresses that cannot be valued get an error record and are **not charged**.

### Use it from an AI assistant (MCP)

Connect the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) to Claude, ChatGPT, Cursor or your own agent and ask in plain language, for example:
*"How much is a 54 m² two-room flat at Długa 12 in Kraków worth? Use notarial deed prices."* The assistant calls this Actor and answers with the estimate, the range and the comparable sales.

### How the estimate is calculated

1. **Comparable sales** – apartment sales from notarial deeds within 1 km (extended to 2.5 km or 6 km when there are too few), from the last 24 months by default. Only market sales of full ownership with a plausible price per m² are used.
2. **Time adjustment** – each sale is moved to today's price level with the local quarterly trend (smoothed, at most ±15%).
3. **Similarity weights** – distance, floor area (±30% weighs most), number of rooms, floor and how recent the sale is.
4. **Estimate** – the weighted median price per m² × your floor area; the range is the weighted 25th–75th percentile.
5. **Confidence** – high when there are many similar sales and prices are consistent; lower when sales are few, prices vary a lot or only the street/city of the address was recognised.

This is an automated valuation model (AVM), not a formal appraisal by a licensed valuer (*operat szacunkowy*). It does not see the apartment's condition, view, building age or standard – the range shows how much similar apartments differ.

### Who uses it

- **Buyers, sellers and investors** – a fact-based price check before an offer or a listing.
- **Real estate agents** – a quick, sourced valuation for a client meeting.
- **Lenders, fintechs and proptech** – automated pre-valuation and portfolio monitoring through the API.
- **AI agents** – call it through the Apify MCP server to answer "how much is my flat in Poland worth?" with official data.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Apartment valuation (only when an estimate is produced) | $0.49 |

Comparable sales, the local market and developers' asking prices are included at no extra cost.

### Inputs

| Field | Description |
|---|---|
| `location` | Street and building number in Poland (Polish characters), or coordinates `50.06, 19.94`. |
| `areaM2` | Usable floor area in m² (10–400). |
| `rooms` | Rooms as in listings, kitchen not counted (optional). |
| `floor` | 0 = ground floor (optional). |
| `market` | `secondary` (resale, default), `primary` (new from a developer) or `any`. |
| `monthsBack` | Period of sales to use, 12–60 months (default 24). |
| `apartments` | Optional list of apartments for a batch run. |

### Data sources and privacy

- Notarial deeds: Rejestr Cen Nieruchomości, GUGiK – official bulk export plus the register's live web service for the newest deeds. Public data, free to access since 13 Feb 2026.
- Developers' asking prices: official daily price lists published on dane.gov.pl.
- No personal data: the register has no names of buyers or sellers; deed numbers and notaries are not used.
- Counties publish deeds with a delay of weeks to months; every result shows the newest deed month used.

### Related Actors

- [Poland Real Estate Transaction Prices](https://apify.com/kris_fili/poland-real-estate-transaction-prices) – area statistics and the full list of deeds for any location.
- [Poland New-Build Apartment Prices](https://apify.com/kris_fili/poland-new-build-apartment-prices) – every developer offer around an address.
- [Poland Housing Price Gap](https://apify.com/kris_fili/poland-housing-price-gap) – asking vs transaction prices for any location.

***

#### Po polsku – wycena mieszkania online na podstawie aktów notarialnych

Ile jest warte mieszkanie? Podajesz adres i metraż (opcjonalnie liczbę pokoi i piętro), a agent szacuje **wartość mieszkania na podstawie prawdziwych cen transakcyjnych z aktów notarialnych** z Rejestru Cen Nieruchomości (RCN) – nie cen z ogłoszeń. Dostajesz szacowaną cenę, cenę za m², przedział wartości, poziom pewności, 10 najbardziej podobnych transakcji z okolicy oraz ceny ofertowe deweloperów w promieniu 2 km. Działa dla całej Polski: Warszawa, Kraków, Wrocław, Gdańsk, Poznań, Łódź i mniejsze miasta. To automatyczna wycena (AVM), a nie operat szacunkowy rzeczoznawcy.

# Actor input Schema

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

Street and building number in Poland (use Polish characters), e.g. 'Kraków, Długa 12' or 'Warszawa, Puławska 100'. Coordinates also work: '50.0614, 19.9372'. / Adres mieszkania.

## `areaM2` (type: `number`):

Usable floor area of the apartment in square metres (10–400). / Powierzchnia użytkowa.

## `rooms` (type: `integer`):

Number of rooms as in listings – a typical two-room flat = 2. Optional, improves the match. / Liczba pokoi.

## `floor` (type: `integer`):

0 = ground floor. Optional. / Piętro (0 = parter).

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

Secondary = resale (most valuations). Primary = new apartment bought from a developer. 'Any' uses both.

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

How many months of sales to use (12–60). Older sales are adjusted to today's prices with the local trend.

## `apartments` (type: `array`):

Value up to 100 apartments in one run, e.g. \[{"location": "Gdańsk, Długa 1", "areaM2": 48, "rooms": 2, "floor": 3}]. When set, the single-apartment fields above are ignored. Each successful valuation is charged separately.

## `includeComparables` (type: `boolean`):

List the comparable deeds used for the estimate (no extra charge).

## `includeNewBuildAskingPrices` (type: `boolean`):

Median asking price per m² of similar new apartments within 2 km, from developers' official daily price lists (no extra charge).

## Actor input object example

```json
{
  "location": "Kraków, Długa 12",
  "areaM2": 54,
  "market": "secondary",
  "monthsBack": 24,
  "apartments": [],
  "includeComparables": true,
  "includeNewBuildAskingPrices": true
}
```

# 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, Długa 12",
    "areaM2": 54,
    "apartments": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("kris_fili/poland-apartment-valuation").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, Długa 12",
    "areaM2": 54,
    "apartments": [],
}

# Run the Actor and wait for it to finish
run = client.actor("kris_fili/poland-apartment-valuation").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, Długa 12",
  "areaM2": 54,
  "apartments": []
}' |
apify call kris_fili/poland-apartment-valuation --silent --output-dataset

```

## MCP server setup

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

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/5KXCBv1LnCqIVges3/builds/MgjYG9NFTCXMrZ94i/openapi.json
