# Poland Housing Price Gap: Asking vs Sold (`kris_fili/poland-housing-price-gap`) Actor

How far Polish developers' asking prices are from real prices paid in notarial deeds, for any location. Medians, gap %, size buckets. Now: Warsaw +13.0%, Krakow +5.3% vs new-build deeds.

- **URL**: https://apify.com/kris_fili/poland-housing-price-gap.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 Housing Price Gap – developer asking prices vs real transaction prices

**How much above the real market are developers asking?** For any place in Poland this Actor puts two official sources side by side:

- **asking prices** from developers' mandatory daily price lists (dane.gov.pl), and
- **prices actually paid**, from notarial deeds in the Real Estate Price Register (RCN),

and returns one clear report: the median price per m² on each side, the gap in percent, the same comparison by apartment size, and how confident the comparison is.

### Why it matters

- **Buyers**: know how much room there is to negotiate before you talk to the sales office.
- **Investors**: spot areas where new builds are priced far above resale.
- **Developers**: check whether your price list is ahead of the market.
- **Analysts and media**: a ready indicator for any city or district.

### Example

Input:

```json
{ "location": "Kraków", "searchArea": "whole_city", "monthsBack": 12 }
```

Report (shortened, real output from October 2026 – the run took about 15 seconds):

```json
{
  "recordType": "gapReport",
  "medianPricePerM2Pln": {
    "developerOffers": 15762,
    "primaryMarketTransactions": 15009,
    "secondaryMarketTransactions": 14833
  },
  "gapOfferVsPrimaryPct": 5.0,
  "gapOfferVsSecondaryPct": 6.3,
  "counts": { "developerOffers": 16406, "primaryTransactions": 5284, "secondaryTransactions": 4929 },
  "byAreaBucket": { "80+": { "gapOfferVsPrimaryPct": 15.6 } },
  "confidence": "high",
  "interpretation": [
    "Developers currently ask 5.0% more per m² than the median primary-market transaction price recorded in this area in the last 12 months."
  ]
}
```

Markets differ a lot: in the very centre of Wrocław (1.5 km around Świdnicka 10) the same report showed asking prices 57% above recent primary-market deeds, and in Gdańsk 31%.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Gap report (charged only when both sides have data) | $0.49 |

### How to read it

- `gapOfferVsPrimaryPct` – today's asking prices vs prices paid for new apartments (primary market).
- `gapOfferVsSecondaryPct` – new-build asking prices vs resale transactions.
- `byAreaBucket` – the same comparison for <40, 40–60, 60–80 and 80+ m², so a mix of small and big flats does not distort the result.
- `confidence` – high (30+ records on both sides), medium (10+), low (fewer).

Primary-market deeds are often signed at handover, so transaction prices can lag behind current price lists – the gap is partly the market moving. That is exactly what the report helps you see.

***

#### Po polsku

Luka cenowa: o ile ceny ofertowe deweloperów różnią się od cen, po których naprawdę sprzedano mieszkania w okolicy (akty notarialne, RCN). Jeden raport: mediany, różnica w procentach, porównanie według metrażu i ocena wiarygodności.

# Actor input Schema

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

City, street or address (with Polish characters), e.g. 'Wrocław, Świdnicka 10' or coordinates '51.1079, 17.0385'.

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

'Radius around the location' or 'Whole city' (whole city works for cities with county rights).

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

200–5000 m.

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

How many months of notarial deeds to compare with today's price lists.

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

Optional – compare only apartments of at least this size.

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

Optional – compare only apartments up to this size.

## Actor input object example

```json
{
  "location": "Wrocław, Świdnicka 10",
  "searchArea": "radius",
  "radiusMeters": 1500,
  "monthsBack": 12
}
```

# 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": "Wrocław, Świdnicka 10"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kris_fili/poland-housing-price-gap").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": "Wrocław, Świdnicka 10" }

# Run the Actor and wait for it to finish
run = client.actor("kris_fili/poland-housing-price-gap").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": "Wrocław, Świdnicka 10"
}' |
apify call kris_fili/poland-housing-price-gap --silent --output-dataset

```

## MCP server setup

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

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/bO6WeFYxC1jRd8xe9/builds/bdZ4B6XXzhhqkkH4b/openapi.json
