Free, read-only REST API for Polish real estate data from dimdom.pl — property listings (houses, flats, plots, garages, rooms, commercial, warehouses), agency & developer profiles, blog articles, and the full Polish TERYT geographic hierarchy (województwa → powiaty → gminy → miejscowości → ulice).
- No authentication — every endpoint is public.
- schema.org-aligned, personal contact details scrubbed.
- Prices in PLN; Polish market.
- 📖 Interactive docs: https://api.dimdom.pl/api/public/docs
- 📄 OpenAPI 3.0.3 spec: https://api.dimdom.pl/api/public/openapi.json (mirrored in this repo)
- 🤖 For AI agents: https://dimdom.pl/llms.txt ·
/.well-known/ai-plugin.json· API catalog (RFC 9727)
https://api.dimdom.pl/api/public
| Method & path | Description |
|---|---|
GET /listings |
Cursor-paginated listing search (filter by type, price, location, owner) |
GET /listings/{id} |
Full canonical listing (POIs, environment, details, agency) |
GET /entities/{slug} |
Agency / developer profile + agents + active listing count |
GET /blog/posts |
Published blog posts (filter by language, tag) |
GET /blog/posts/{slug} |
Single blog post with rendered content |
GET /geo/hierarchy |
Browse the TERYT geographic tree (level, parentId, search) |
GET /feeds/listings.xml |
Atom 1.0 feed of recently published listings |
GET /export/listings.ndjson |
Bulk NDJSON export for indexers & pipelines |
GET /schema |
Machine-readable JSON Schema data dictionary |
Rate limit: 60 req/min per IP (10 req/min for the bulk NDJSON export).
# 5 newest flats for sale in PLN, cheapest first
curl "https://api.dimdom.pl/api/public/listings?property_type=flat&listing_type=sell&limit=5"
# One listing with full detail
curl "https://api.dimdom.pl/api/public/listings/42001"
# Find a locality in the TERYT tree
curl "https://api.dimdom.pl/api/public/geo/hierarchy?level=miejscowosc&search=krak"const res = await fetch(
"https://api.dimdom.pl/api/public/listings?property_type=house&maxPrice=800000&limit=10"
);
const { data, pagination } = await res.json();
console.log(data.length, "houses; next cursor:", pagination.cursor);import requests
r = requests.get(
"https://api.dimdom.pl/api/public/listings",
params={"listing_type": "rent", "property_type": "flat", "limit": 20},
)
for listing in r.json()["data"]:
print(listing["title"], "—", listing["price"]["amount"], "PLN")Every response is a versioned envelope:
Paginate by passing the returned pagination.cursor back as ?cursor=.
- Website: https://dimdom.pl
- Listings API docs: https://api.dimdom.pl/api/public/docs
- Terms of service: https://dimdom.pl/regulamin
- Privacy policy: https://dimdom.pl/polityka-prywatnosci
Example code in this repository is released under the MIT License. The API itself and the data it returns are governed by the Dimdom terms of service.
{ "data": [ /* … */ ], "pagination": { "cursor": "…", "hasMore": true }, // list endpoints only "meta": { "apiVersion": "v1", "dataFreshness": "2026-01-10T12:00:00Z", "requestId": "req_…" } }