# Poland New-Build Apartment Prices (Developers) (`kris_fili/poland-new-build-apartment-prices`) Actor

Asking prices of new apartments from Polish developers' mandatory daily price lists (dane.gov.pl), cleaned and geocoded for any city or address. Updated daily: 284,337 offers now.

- **URL**: https://apify.com/kris_fili/poland-new-build-apartment-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 New-Build Apartment Prices – official developer price lists

**Every Polish developer must publish its prices every day.** Since September 2025 the law requires developers to post the price of each apartment and house they sell on the national open-data portal dane.gov.pl. The files are scattered across thousands of developers and dozens of formats. This Actor collects them daily, cleans them, puts every investment on the map and lets you query any place in Poland.

### What you get

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

- number of offers and developers in the area
- median asking price per m² with quartiles, median total price and size
- price per m² by number of rooms
- list of investments nearby: developer, address, number of offers, median price per m², cheapest unit, distance

**2. Individual offers** (closest first)

- developer, investment, address, unit number
- area, rooms, floor
- total price, price per m², date the price applies from
- availability (when the developer publishes a status), coordinates, distance

### Example

Input:

```json
{ "location": "Gdańsk", "searchArea": "whole_city", "propertyType": "apartment" }
```

Offers report (shortened, real output from October 2026 – the run took about 1 second):

```json
{
  "recordType": "summary",
  "searchArea": "whole city: Gdańsk",
  "statistics": {
    "offersFound": 9629,
    "developersCount": 70,
    "pricePerM2Pln": { "median": 15900, "p25": 11427, "p75": 19987 },
    "priceTotalPln": { "median": 757000 },
    "investments": [
      { "developer": "INPRO S. A.", "investment": "City Park", "street": "al. Jana Pawła II",
        "offers": 612, "medianPricePerM2Pln": 18252, "minPriceTotalPln": 603113 }
    ]
  },
  "indexUpdatedAt": "2026-10-02T18:28:46+00:00"
}
```

Offer (from a 2 km radius search around Kraków's Main Square):

```json
{
  "recordType": "offer",
  "developer": "NOHO Signature sp. z o.o.",
  "city": "Kraków",
  "street": "Dolnych Młynów",
  "number": "10",
  "unit": "2B/11",
  "areaM2": 68.79,
  "priceTotalPln": 1989080,
  "pricePerM2Pln": 28915.25,
  "priceValidFrom": "2025-09-25",
  "available": true,
  "geoPrecision": "address",
  "distanceM": 730,
  "dataDate": "2026-10-02"
}
```

The index behind this Actor currently holds about 280,000 offers from 4,300 price lists of 6,700 developers registered on dane.gov.pl, 86% of them placed on the map.

### Who uses it

- **Buyers and advisors** – compare every new-build offer around an address in one table.
- **Developers and sales teams** – monitor competitors' price lists daily.
- **Banks, analysts, journalists** – a clean primary-market price index for any city.
- **AI agents** – one call returns structured, sourced prices for a location.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Offers report (once per run, only when offers were found) | $0.20 |
| Offer record | $0.002 each ($2 per 1,000) |

### How fresh is it?

The index is rebuilt every morning from the files developers published in the last days. The report shows `indexUpdatedAt`. Offers disappear when a developer stops publishing them for three weeks.

### Good to know

- These are **asking prices** declared by developers. For prices actually paid, see our *Poland Real Estate Transaction Prices (RCN)* Actor, or compare both with *Poland Housing Price Gap*.
- Locations come from the investment address declared by the developer, geocoded with the official GUGiK geocoder. `geoPrecision` tells you how exact the point is: `address`, `street`, `town` (centre of a small town or village) or `city` (centre of a big city – such offers are used only in *whole city* search, never in radius search).
- Developers publish in dozens of formats (CSV, XLSX, ODS, JSON, XML, web tables). Some publish only the price per m² or only the total price – the missing value is calculated when the area is known, otherwise left empty.
- "Rooms" are as declared by the developer (kitchen not counted).

***

#### Po polsku

Ceny ofertowe nowych mieszkań z obowiązkowych, codziennych cenników deweloperów (dane.gov.pl). Agent zbiera pliki tysięcy deweloperów, ujednolica je i nanosi inwestycje na mapę. Podajesz miasto lub adres – dostajesz medianę ceny za m², listę inwestycji i wszystkie oferty z okolicy.

# Actor input Schema

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

City, street or address in Poland (with Polish characters), e.g. 'Gdańsk', 'Kraków, Lipska 12', or coordinates '54.352, 18.646'.

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

'Radius around the location' or 'Whole city' (matches the city name declared by developers).

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

Used for radius search. 100–20000 m.

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

Apartments, single-family houses, or any.

## `onlyAvailable` (type: `boolean`):

Skip units marked as sold or reserved (when the developer publishes a status).

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

Optional.

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

Optional.

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

Optional (rooms as declared by the developer, kitchen not counted).

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

Optional.

## `includeOffers` (type: `boolean`):

If off, you get only the summary report.

## `maxOffers` (type: `integer`):

Closest first. Statistics always use all offers found.

## Actor input object example

```json
{
  "location": "Gdańsk",
  "searchArea": "radius",
  "radiusMeters": 2000,
  "propertyType": "apartment",
  "onlyAvailable": true,
  "includeOffers": true,
  "maxOffers": 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": "Gdańsk"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kris_fili/poland-new-build-apartment-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": "Gdańsk" }

# Run the Actor and wait for it to finish
run = client.actor("kris_fili/poland-new-build-apartment-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": "Gdańsk"
}' |
apify call kris_fili/poland-new-build-apartment-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kris_fili/poland-new-build-apartment-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/hfZ8KwJOVJWrAffPd/builds/wGQztgdIbyqChe7LV/openapi.json
