Skip to main content
Glama

Cenogram - Polish Real Estate Data

search_transactions

Read-only

Find individual Polish real-estate transactions from the national RCN registry (8M+ notarial deeds, not asking prices) by place, property type, price, area, date or street. Returns address, date, price, area, price/m² and property type. Resolve the place first: list_locations(search=...), then pass its TERYT code as teryt= (exact match). Use location= only for a name that result flags as an RCN district (rcn_district) - other names silently return zero rows. Neighborhoods (osiedla) are not TERYT districts: pass latitude + longitude (+ radiusKm, default 2) instead of a place. Radius 0.3-0.5 km for a street, 0.5-1 km for a neighborhood, 2-5 km for a city area; the area is a bounding box, so corners extend beyond radiusKm. Take coordinates from the user, never invent them. A point excludes location, teryt, street, buildingNumber and parcelId, and is sorted by date only (pages 1-10). For an exact boundary pass polygon instead of a place or a point: rows only (no summary), newest first, pages 1-20, costs 5 API tokens. location (as district) and street narrow it; teryt, parcelId, buildingNumber, summaryOnly, groupBy, flood/heritage/landslide filters, sort and order are refused. For the land plots inside a shape (not deeds) pass the same polygon to list_parcels_in_area. Data note: ~1.7% of records have no transaction_date. Permalink: https://cenogram.pl/ceny-transakcyjne?src=mcphttp#v=1&lat=&lng=&z=16&tx= (use row id and coordinates A,B = lat,lng; omit &tx= for area only). Inline [...] notes flag computed values (summed or converted parcel area, inferred property type) and approximated streets; all else is as recorded in the deed.

Input Schema

NameRequiredDescriptionDefault
pageNoPage number; a point serves pages 1-10, a polygon 1-20.
sortNoSort by field, default date; a point is sorted by date only, a polygon takes no sort.
floorNoUnit floor, multi-select: integers ('0' = parter, negatives = basement), 'Nplus' ('0plus' = ground and above), 'unknown' (none recorded). Not building storeys; rows with no floor drop out unless 'unknown' is listed.
limitNoNumber of results.
orderNoSort order, default desc; a polygon takes no order.
roomsNoRooms (izby), residential units only; multi-select ('8plus' = 8 or more). Rows with no count drop out unless 'unknown' is listed.
terytNoTERYT code(s), comma-separated, max 10: 2-digit (voivodeship), 4 (county), 6 (municipality) or a precinct code (e.g. '321705_2.0054').
dateToNoEnd date (YYYY-MM-DD)
formatNoRow detail; compact by default, full = every recorded field.
streetNoStreet name (partial match). Give the NOMINATIVE ('Karmelickiej' misses 'Karmelicka'); with buildingNumber, case and diacritics are ignored.
groupByNoPer-year series (median price/m², sample size, deed count; up to 20 years, default last 10) instead of rows. Same filters; one summary call.
landUseNoLand-use category, multi-select, case-sensitive (gruntyZabudowaneIZurbanizowane = built-up, gruntyRolne = agricultural, gruntyLesne = forest, terenyKomunikacyjne = transport); 'unknown' = none recorded (NULL), not 'no use'.
maxAreaNoMaximum area in m²
minAreaNoMinimum area in m²
polygonNoGeoJSON Polygon: [longitude, latitude] pairs, first and last point identical, max 500 vertices total. Replaces the point; of the place filters only location and street apply.
dateFromNoStart date (YYYY-MM-DD)
latitudeNoLatitude of the search point; pair with longitude. Replaces the place filters.
locationNoCity (e.g. 'Warszawa') or RCN district (e.g. 'Mokotów', 'Kraków-Podgórze'); 'Warszawa', 'Kraków', 'Łódź' expand to all sub-districts.
maxPriceNoMaximum price in PLN
minPriceNoMinimum price in PLN
parcelIdNoExact parcel ID, copied from a search result's parcel_id field (e.g. '146518_8.0108.27').
radiusKmNoSearch radius in km around the point (default 2).
floodRiskNoFlood-hazard zone, multi-select: high ~1-in-10-year, medium ~1-in-100, low ~1-in-500. Mapped zones only; absence of a zone is never 'safe'.
longitudeNoLongitude of the search point; pair with latitude.
marketTypeNoprimary (developer) or secondary (resale); the ~55% of records with no market type drop out when this is set.
summaryOnlyNoAggregates only (total, median price/m² with sample size, period), no rows; cheapest call. limit/sort/page/format ignored.
buildingTypeNoBuilding type (PKOB); 'unknown' = none recorded (NULL, ~39% of buildings), any other value excludes such rows.
propertyTypeNoProperty type: building = no land; house with plot = developed_land
unitFunctionNoUnit function; 'unknown' = none recorded (NULL), any other value excludes such rows. Garages only via 'garage'.
landslideRiskNoLandslide hazard, multi-select: landslide = mapped landslide area; threatened = area threatened by mass movements. Mapped areas only; absence of a zone is never 'safe'.
ownershipTypeNoLegal-right type (rodzaj prawa), multi-select; perpetual_usufruct = użytkowanie wieczyste; 'unknown' = none recorded.
buildingNumberNoBuilding number (e.g. '12A'). Needs location or street; with street, both on one address. An empty page may list nearby numbers.
heritageStatusNoHeritage listing, multi-select: listed = protected monument on the land; zone = protected urban layout or monument surroundings. Detected listings only; absence of a detection is never 'not listed'.
buildingStoreysNoAbove-ground storeys, multi-select: integers, 'Nplus' ('3plus' = 3+), 'unknown' (no count). Single-building deeds only, so 'unknown' also covers multi-building deeds. Not the unit floor; rows with no count drop out unless 'unknown' is listed.
mpzpDesignationNoMPZP zoning designation, exact token match; comma-separated = OR (e.g. 'MN,MW'). 'unknown' = none recorded (NULL), distinct from the code 'brakMPZPLubWZ' (no plan/WZ). Common codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogPublicznych, budownictwoMieszkanioweWielorodzinne, las, and short plan symbols (MN, MW, U, KD). An unrecognised value is still sent, with a warning listing every known code.
transactionTypeNoMulti-select. For market analysis ALWAYS set it to exclude non-market deeds (subsidized, foreclosure, public_purpose); no-type rows (~2%) drop out unless 'unknown' is listed.
maxFootprintAreaNoMaximum building footprint in m²; same rules as minFootprintArea.
minFootprintAreaNoMinimum building footprint in m², summed over the transaction's buildings; measured rows only (absence = 'not measured', not 'no building'). Not usable area.
excludeFractionalSharesNotrue = clean land prices: drops fractional ownership shares, whose price reflects the whole deed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedInput schema / properties / latitude
      Added value: +{
      +  "description": "Latitude of the search point; pair with longitude. Replaces the place filters.",
      +  "maximum": 55,
      +  "minimum": 49,
      +  "type": "number"
      +}
    • addedInput schema / properties / longitude
      Added value: +{
      +  "description": "Longitude of the search point; pair with latitude.",
      +  "maximum": 25,
      +  "minimum": 14,
      +  "type": "number"
      +}
    • removedInput schema / properties / order / default
      Removed value: -"desc"
    • changedInput schema / properties / order / description
      Previous value: -"Sort order."New value: +"Sort order, default desc; a polygon takes no order."
    • changedInput schema / properties / page / description
      Previous value: -"Page number."New value: +"Page number; a point serves pages 1-10, a polygon 1-20."
    • addedInput schema / properties / polygon
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "GeoJSON Polygon: [longitude, latitude] pairs, first and last point identical, max 500 vertices total. Replaces the point; of the place filters only location and street apply.",
      +  "properties": {
      +    "coordinates": {
      +      "items": {
      +        "items": {
      +          "items": {
      +            "type": "number"
      +          },
      +          "type": "array"
      +        },
      +        "type": "array"
      +      },
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "type": {
      +      "const": "Polygon",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "coordinates"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / radiusKm
      Added value: +{
      +  "description": "Search radius in km around the point (default 2).",
      +  "maximum": 50,
      +  "minimum": 0.1,
      +  "type": "number"
      +}
    • removedInput schema / properties / sort / default
      Removed value: -"date"
    • changedInput schema / properties / sort / description
      Previous value: -"Sort by field."New value: +"Sort by field, default date; a point is sorted by date only, a polygon takes no sort."
  2. Changed2 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building/house number (e.g. '30', '12A'). Requires location or street."New value: +"Building number (e.g. '12A'). Needs location or street; with street, both on one address. An empty page may list nearby numbers."
    • changedInput schema / properties / street / description
      Previous value: -"Street name, matched anywhere inside the name. Give the NOMINATIVE with Polish diacritics - matching is literal ('Karmelickiej' does not find 'Karmelicka'); a miss looks exactly like 'no such transactions'."New value: +"Street name (partial match). Give the NOMINATIVE ('Karmelickiej' misses 'Karmelicka'); with buildingNumber, case and diacritics are ignored."
  3. Changed2 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building number (e.g. '12A'). Needs location or street; with street, both on one address. An empty page may list nearby numbers."New value: +"Building/house number (e.g. '30', '12A'). Requires location or street."
    • changedInput schema / properties / street / description
      Previous value: -"Street name (partial match). Give the NOMINATIVE ('Karmelickiej' misses 'Karmelicka'); with buildingNumber, case and diacritics are ignored."New value: +"Street name, matched anywhere inside the name. Give the NOMINATIVE with Polish diacritics - matching is literal ('Karmelickiej' does not find 'Karmelicka'); a miss looks exactly like 'no such transactions'."
  4. Changed2 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building/house number (e.g. '30', '12A'). Requires location or street."New value: +"Building number (e.g. '12A'). Needs location or street; with street, both on one address. An empty page may list nearby numbers."
    • changedInput schema / properties / street / description
      Previous value: -"Street name, matched anywhere inside the name. Give the NOMINATIVE with Polish diacritics - matching is literal ('Karmelickiej' does not find 'Karmelicka'); a miss looks exactly like 'no such transactions'."New value: +"Street name (partial match). Give the NOMINATIVE ('Karmelickiej' misses 'Karmelicka'); with buildingNumber, case and diacritics are ignored."
  5. Changed3 schema fields changed
    • changedInput schema / properties / groupBy / description
      Previous value: -"Return a per-year series (median price/m², sample size, deed count; up to 20 years, default last 10) instead of rows. Same filters; one summary call."New value: +"Per-year series (median price/m², sample size, deed count; up to 20 years, default last 10) instead of rows. Same filters; one summary call."
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation, exact token match; comma-separated = OR (e.g. 'MN,MW'). 'unknown' = none recorded (NULL), distinct from the code 'brakMPZPLubWZ' (no plan/WZ). Known codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogWewnetrznych, terenDrogPublicznych, terenZabudowyZagrodowejGospodarstwRolnych, budownictwoMieszkanioweWielorodzinne, las, terenObiektowProdukcyjnychSkladowIMagazynow, terenSportuIRekreacji, decyzjaWarunkiZabudowy, terenZieleniUrzadzonej, terenZieleniObjetyFormaOchronyPrzyrody, terenWodPowierzchniowychSrodladowych, obszarITerenGorniczy, terenObslugiProdukcjiWGospodarstwachRolnych, terenInfrastrukturyTechnicznej, terenOgrodowDzialkowych, terenRozmieszczeniaDuzcychObiektowHandlowych, cmentarz, terenKomunikacjiWodnejSzlakWodny, terenWodPowierzchniowychMorskich, MN, BP, KD, U, INN, MW, KDW, R, ZP, P, WZ, ZN, WS, UC, ZL, ZD, US, TIT. An unrecognised value is still sent, with a warning."New value: +"MPZP zoning designation, exact token match; comma-separated = OR (e.g. 'MN,MW'). 'unknown' = none recorded (NULL), distinct from the code 'brakMPZPLubWZ' (no plan/WZ). Common codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogPublicznych, budownictwoMieszkanioweWielorodzinne, las, and short plan symbols (MN, MW, U, KD). An unrecognised value is still sent, with a warning listing every known code."
    • changedInput schema / properties / summaryOnly / description
      Previous value: -"Aggregate stats only (total, median price/m² with sample size, period), no rows. Costs only the summary call; limit/sort/page/format ignored."New value: +"Aggregates only (total, median price/m² with sample size, period), no rows; cheapest call. limit/sort/page/format ignored."
  6. Changed1 schema field changed
    • addedInput schema / properties / groupBy
      Added value: +{
      +  "description": "Return a per-year series (median price/m², sample size, deed count; up to 20 years, default last 10) instead of rows. Same filters; one summary call.",
      +  "enum": [
      +    "year"
      +  ],
      +  "type": "string"
      +}
  7. Changed9 schema fields changed
    • changedInput schema / properties / excludeFractionalShares / description
      Previous value: -"true = clean land prices: drops fractional ownership shares, whose price reflects the whole deed. Default false."New value: +"true = clean land prices: drops fractional ownership shares, whose price reflects the whole deed."
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "Row detail; compact by default, full = every recorded field.",
      +  "enum": [
      +    "compact",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Number of results (1-50, default 10)"New value: +"Number of results."
    • changedInput schema / properties / location / description
      Previous value: -"City (e.g. 'Warszawa') or RCN district (e.g. 'Mokotów', 'Kraków-Podgórze'); 'Warszawa', 'Kraków', 'Łódź' expand to all sub-districts. Prefer teryt=; confirm a name with list_locations(search=...) (valid ones are flagged rcn_district)."New value: +"City (e.g. 'Warszawa') or RCN district (e.g. 'Mokotów', 'Kraków-Podgórze'); 'Warszawa', 'Kraków', 'Łódź' expand to all sub-districts."
    • changedInput schema / properties / order / description
      Previous value: -"Sort order (default: desc)"New value: +"Sort order."
    • changedInput schema / properties / page / description
      Previous value: -"Page number for pagination (default: 1)"New value: +"Page number."
    • changedInput schema / properties / sort / description
      Previous value: -"Sort by field (default: date)"New value: +"Sort by field."
    • changedInput schema / properties / summaryOnly / description
      Previous value: -"Return only aggregate stats (total, median price/m² with its sample size, period) and no rows. Costs only the summary call; limit/sort/page are ignored."New value: +"Aggregate stats only (total, median price/m² with sample size, period), no rows. Costs only the summary call; limit/sort/page/format ignored."
    • changedInput schema / properties / teryt / description
      Previous value: -"TERYT code(s), comma-separated, max 10: 2-digit (voivodeship), 4 (county), 6 (municipality) or a precinct code (e.g. '321705_2.0054'). Find codes with list_locations. Exact - avoids name ambiguity."New value: +"TERYT code(s), comma-separated, max 10: 2-digit (voivodeship), 4 (county), 6 (municipality) or a precinct code (e.g. '321705_2.0054')."
  8. Changed2 schema fields changed
    • changedInput schema / properties / maxFootprintArea / description
      Previous value: -"Maximum building footprint in m², summed over the transaction's buildings; measured rows only (absence = 'not measured', not 'no building'). Not usable area."New value: +"Maximum building footprint in m²; same rules as minFootprintArea."
    • changedInput schema / properties / propertyType / description
      Previous value: -"Property type filter"New value: +"Property type: building = no land; house with plot = developed_land"
  9. Changed1 schema field changed
    • addedInput schema / properties / summaryOnly
      Added value: +{
      +  "description": "Return only aggregate stats (total, median price/m² with its sample size, period) and no rows. Costs only the summary call; limit/sort/page are ignored.",
      +  "type": "boolean"
      +}
  10. Changed21 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building/house number (e.g. '30', '12A'). Requires location or street to be set."New value: +"Building/house number (e.g. '30', '12A'). Requires location or street."
    • changedInput schema / properties / buildingStoreys / description
      Previous value: -"Number of above-ground storeys of the building. Multi-select buckets: exact non-negative integers (e.g. '1','2'), 'Nplus' e.g. '3plus' = 3 or more, 'unknown' = no storey count recorded (NULL). Recorded ONLY for single-building transactions, so 'unknown' covers BOTH a deed with several buildings (no single storey count exists) and a single building with missing data — never read it as 'a building with no storeys'. This is NOT the floor of a unit (see floor). Without 'unknown', rows with no storey count are excluded."New value: +"Above-ground storeys, multi-select: integers, 'Nplus' ('3plus' = 3+), 'unknown' (no count). Single-building deeds only, so 'unknown' also covers multi-building deeds. Not the unit floor; rows with no count drop out unless 'unknown' is listed."
    • changedInput schema / properties / buildingType / description
      Previous value: -"Building type filter (PKOB classification). 'unknown' = no type recorded (NULL); without it such rows are excluded (~39% of buildings have no type)."New value: +"Building type (PKOB); 'unknown' = none recorded (NULL, ~39% of buildings), any other value excludes such rows."
    • changedInput schema / properties / excludeFractionalShares / description
      Previous value: -"Set true to analyze clean land prices: excludes fractional ownership shares, whose price reflects the whole deed rather than the share and skews a per-m² comparison. Default false."New value: +"true = clean land prices: drops fractional ownership shares, whose price reflects the whole deed. Default false."
    • changedInput schema / properties / floodRisk / description
      Previous value: -"Flood-hazard filter. high = most frequent flooding (~1-in-10-year), medium (~1-in-100-year), low = rarest (~1-in-500-year). Selects ONLY transactions whose land sits in a mapped flood zone; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['medium','high'] = at least medium risk."New value: +"Flood-hazard zone, multi-select: high ~1-in-10-year, medium ~1-in-100, low ~1-in-500. Mapped zones only; absence of a zone is never 'safe'."
    • changedInput schema / properties / floor / description
      Previous value: -"Floor of the unit (piętro lokalu, residential). Multi-select buckets: exact integers incl. '0' (parter) and negatives e.g. '-1' (basement), 'Nplus' e.g. '10plus' = 10 or more, '0plus' = ground and above, 'unknown' = no floor recorded (NULL). E.g. ['0','1','2'] for ground-to-2nd floor. Building storeys are a different attribute. Without 'unknown', rows with no floor are excluded."New value: +"Unit floor, multi-select: integers ('0' = parter, negatives = basement), 'Nplus' ('0plus' = ground and above), 'unknown' (none recorded). Not building storeys; rows with no floor drop out unless 'unknown' is listed."
    • changedInput schema / properties / heritageStatus / description
      Previous value: -"Heritage-listing filter. listed = a protected monument on/at the property's land; zone = the land lies within a protected urban layout or the designated surroundings of a monument. Selects ONLY transactions where a listing was detected; absence of a detection is never asserted as 'not listed'. Multi-select; e.g. ['listed'] = individually listed properties only."New value: +"Heritage listing, multi-select: listed = protected monument on the land; zone = protected urban layout or monument surroundings. Detected listings only; absence of a detection is never 'not listed'."
    • changedInput schema / properties / landUse / description
      Previous value: -"Recorded land-use category of the transaction's land. Multi-select from: gruntyZabudowaneIZurbanizowane (built-up and urbanised), gruntyRolne (agricultural), gruntyLesne (forest), terenyKomunikacyjne (transport), inne (other). 'unknown' = no category recorded for the land (NULL) — a legitimate bucket, never a claim that the land has no use. Values are case-sensitive. E.g. ['gruntyRolne'] for farmland, or ['gruntyZabudowaneIZurbanizowane','gruntyRolne'] to compare developed vs farmland."New value: +"Land-use category, multi-select, case-sensitive (gruntyZabudowaneIZurbanizowane = built-up, gruntyRolne = agricultural, gruntyLesne = forest, terenyKomunikacyjne = transport); 'unknown' = none recorded (NULL), not 'no use'."
    • changedInput schema / properties / landslideRisk / description
      Previous value: -"Landslide-hazard filter, from official landslide-hazard maps (1:10,000 scale). 'landslide' = the land intersects a mapped landslide area; 'threatened' = an area threatened by mass movements. Selects ONLY transactions whose land intersects a mapped hazard area — an intersection means overlap with a mapped area, not that the parcel itself is a landslide; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['landslide','threatened'] = any mapped hazard."New value: +"Landslide hazard, multi-select: landslide = mapped landslide area; threatened = area threatened by mass movements. Mapped areas only; absence of a zone is never 'safe'."
    • changedInput schema / properties / location / description
      Previous value: -"Location name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Prefer teryt= for exact matches; call list_locations(search=...) to confirm a name is valid here — it flags valid ones as rcn_district. A name with no match comes back with 'Did you mean' suggestions."New value: +"City (e.g. 'Warszawa') or RCN district (e.g. 'Mokotów', 'Kraków-Podgórze'); 'Warszawa', 'Kraków', 'Łódź' expand to all sub-districts. Prefer teryt=; confirm a name with list_locations(search=...) (valid ones are flagged rcn_district)."
    • changedInput schema / properties / marketType / description
      Previous value: -"Market type: primary (developer) or secondary (resale). ~55% of records have unknown market type and will be excluded when this filter is used."New value: +"primary (developer) or secondary (resale); the ~55% of records with no market type drop out when this is set."
    • changedInput schema / properties / maxFootprintArea / description
      Previous value: -"Maximum building footprint (ground-plan) area in m², summed over all buildings of the transaction. Distinct from maxArea, which measures usable floor area (units) or land/parcel area. Set only where every linked building has footprint data, so this bound selects only measured rows — absence means 'not measured', not 'no building'."New value: +"Maximum building footprint in m², summed over the transaction's buildings; measured rows only (absence = 'not measured', not 'no building'). Not usable area."
    • changedInput schema / properties / minFootprintArea / description
      Previous value: -"Minimum building footprint (ground-plan) area in m², summed over all buildings of the transaction. Distinct from minArea, which measures usable floor area (units) or land/parcel area. Set only where every linked building has footprint data, so this bound selects only measured rows — absence means 'not measured', not 'no building'."New value: +"Minimum building footprint in m², summed over the transaction's buildings; measured rows only (absence = 'not measured', not 'no building'). Not usable area."
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation filter, exact token match (not prefix). Comma-separated = OR, e.g. 'MN,MW'. Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ' (= 'no plan/WZ' recorded as data). Known codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogWewnetrznych, terenDrogPublicznych, terenZabudowyZagrodowejGospodarstwRolnych, budownictwoMieszkanioweWielorodzinne, las, terenObiektowProdukcyjnychSkladowIMagazynow, terenSportuIRekreacji, decyzjaWarunkiZabudowy, terenZieleniUrzadzonej, terenZieleniObjetyFormaOchronyPrzyrody, terenWodPowierzchniowychSrodladowych, obszarITerenGorniczy, terenObslugiProdukcjiWGospodarstwachRolnych, terenInfrastrukturyTechnicznej, terenOgrodowDzialkowych, terenRozmieszczeniaDuzcychObiektowHandlowych, cmentarz, terenKomunikacjiWodnejSzlakWodny, terenWodPowierzchniowychMorskich, MN, BP, KD, U, INN, MW, KDW, R, ZP, P, WZ, ZN, WS, UC, ZL, ZD, US, TIT. An unrecognised value is still sent but adds a warning to the reply."New value: +"MPZP zoning designation, exact token match; comma-separated = OR (e.g. 'MN,MW'). 'unknown' = none recorded (NULL), distinct from the code 'brakMPZPLubWZ' (no plan/WZ). Known codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogWewnetrznych, terenDrogPublicznych, terenZabudowyZagrodowejGospodarstwRolnych, budownictwoMieszkanioweWielorodzinne, las, terenObiektowProdukcyjnychSkladowIMagazynow, terenSportuIRekreacji, decyzjaWarunkiZabudowy, terenZieleniUrzadzonej, terenZieleniObjetyFormaOchronyPrzyrody, terenWodPowierzchniowychSrodladowych, obszarITerenGorniczy, terenObslugiProdukcjiWGospodarstwachRolnych, terenInfrastrukturyTechnicznej, terenOgrodowDzialkowych, terenRozmieszczeniaDuzcychObiektowHandlowych, cmentarz, terenKomunikacjiWodnejSzlakWodny, terenWodPowierzchniowychMorskich, MN, BP, KD, U, INN, MW, KDW, R, ZP, P, WZ, ZN, WS, UC, ZL, ZD, US, TIT. An unrecognised value is still sent, with a warning."
    • changedInput schema / properties / ownershipType / description
      Previous value: -"Ownership / legal-right type filter (rodzaj prawa do nieruchomości). land_ownership; perpetual_usufruct (użytkowanie wieczyste — covers both registry codes for this right); cooperative_ownership; unit_sale; ownership; unit_ownership_with_appurtenant_right; building_ownership_with_appurtenant_right. 'unknown' = no right recorded (NULL). Multi-select; e.g. ['land_ownership','perpetual_usufruct'] to compare ownership vs perpetual usufruct on undeveloped land."New value: +"Legal-right type (rodzaj prawa), multi-select; perpetual_usufruct = użytkowanie wieczyste; 'unknown' = none recorded."
    • changedInput schema / properties / parcelId / description
      Previous value: -"Exact parcel ID as returned in search results (e.g. '146518_8.0108.27'). Must match exactly - copy from a previous search result's parcel_id field."New value: +"Exact parcel ID, copied from a search result's parcel_id field (e.g. '146518_8.0108.27')."
    • changedInput schema / properties / rooms / description
      Previous value: -"Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more, 'unknown' = no room count recorded (NULL). E.g. ['2','3'] for 2-3 izby flats. Without 'unknown', rows with no room count are excluded."New value: +"Rooms (izby), residential units only; multi-select ('8plus' = 8 or more). Rows with no count drop out unless 'unknown' is listed."
    • changedInput schema / properties / street / description
      Previous value: -"Street name filter, matched anywhere inside the name (e.g. 'Puławska', 'Aleja Waszyngtona'). Give it in the NOMINATIVE and with its Polish diacritics — matching is literal, so 'Karmelickiej' does not find 'Karmelicka' and 'Marszalkowska' does not find 'Marszałkowska'. Either mistake answers with nothing, which reads exactly like 'no such transactions'."New value: +"Street name, matched anywhere inside the name. Give the NOMINATIVE with Polish diacritics - matching is literal ('Karmelickiej' does not find 'Karmelicka'); a miss looks exactly like 'no such transactions'."
    • changedInput schema / properties / teryt / description
      Previous value: -"TERYT administrative code(s) for precise area filtering. Comma-separated, max 10. 2-digit (voivodeship), 4-digit (county), 6-digit (municipality), or full precinct code (e.g. '321705_2.0054'). Use list_locations to find codes. More precise than 'location' - avoids name ambiguity."New value: +"TERYT code(s), comma-separated, max 10: 2-digit (voivodeship), 4 (county), 6 (municipality) or a precinct code (e.g. '321705_2.0054'). Find codes with list_locations. Exact - avoids name ambiguity."
    • changedInput schema / properties / transactionType / description
      Previous value: -"Transaction type filter. For market analysis, ALWAYS specify transactionType to exclude non-market transactions (subsidized, foreclosure, public purpose). ~2% of transactions have unknown type (NULL) and are excluded when this filter is used unless 'unknown' is included."New value: +"Multi-select. For market analysis ALWAYS set it to exclude non-market deeds (subsidized, foreclosure, public_purpose); no-type rows (~2%) drop out unless 'unknown' is listed."
    • changedInput schema / properties / unitFunction / description
      Previous value: -"Unit/apartment function filter. 'unknown' = no function recorded (NULL); without it such rows are excluded. Garages appear only when 'garage' is selected, not via 'unknown'."New value: +"Unit function; 'unknown' = none recorded (NULL), any other value excludes such rows. Garages only via 'garage'."
  11. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"Location name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Prefer teryt= for exact matches; call list_locations(search=...) to confirm a name is valid here — it flags valid ones as rcn_district."New value: +"Location name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Prefer teryt= for exact matches; call list_locations(search=...) to confirm a name is valid here — it flags valid ones as rcn_district. A name with no match comes back with 'Did you mean' suggestions."
  12. Changed1 schema field changed
    • addedInput schema / properties / excludeFractionalShares
      Added value: +{
      +  "default": false,
      +  "description": "Set true to analyze clean land prices: excludes fractional ownership shares, whose price reflects the whole deed rather than the share and skews a per-m² comparison. Default false.",
      +  "type": "boolean"
      +}
  13. Changed1 schema field changed
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation filter (exact match, e.g. 'budownictwoMieszkanioweWielorodzinne', 'terenObiektowProdukcyjnychSkladowIMagazynow'). Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ' (= 'no plan/WZ' recorded as data)."New value: +"MPZP zoning designation filter, exact token match (not prefix). Comma-separated = OR, e.g. 'MN,MW'. Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ' (= 'no plan/WZ' recorded as data). Known codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogWewnetrznych, terenDrogPublicznych, terenZabudowyZagrodowejGospodarstwRolnych, budownictwoMieszkanioweWielorodzinne, las, terenObiektowProdukcyjnychSkladowIMagazynow, terenSportuIRekreacji, decyzjaWarunkiZabudowy, terenZieleniUrzadzonej, terenZieleniObjetyFormaOchronyPrzyrody, terenWodPowierzchniowychSrodladowych, obszarITerenGorniczy, terenObslugiProdukcjiWGospodarstwachRolnych, terenInfrastrukturyTechnicznej, terenOgrodowDzialkowych, terenRozmieszczeniaDuzcychObiektowHandlowych, cmentarz, terenKomunikacjiWodnejSzlakWodny, terenWodPowierzchniowychMorskich, MN, BP, KD, U, INN, MW, KDW, R, ZP, P, WZ, ZN, WS, UC, ZL, ZD, US, TIT. An unrecognised value is still sent but adds a warning to the reply."
  14. Changed2 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building/house number (e.g. '251C', '12A'). Requires location or street to be set."New value: +"Building/house number (e.g. '30', '12A'). Requires location or street to be set."
    • changedInput schema / properties / street / description
      Previous value: -"Street name filter, matched anywhere inside the name (e.g. 'Puławska', 'Trakt Lubelski'). Give it in the NOMINATIVE and with its Polish diacritics — matching is literal, so 'Karmelickiej' does not find 'Karmelicka' and 'Marszalkowska' does not find 'Marszałkowska'. Either mistake answers with nothing, which reads exactly like 'no such transactions'."New value: +"Street name filter, matched anywhere inside the name (e.g. 'Puławska', 'Aleja Waszyngtona'). Give it in the NOMINATIVE and with its Polish diacritics — matching is literal, so 'Karmelickiej' does not find 'Karmelicka' and 'Marszalkowska' does not find 'Marszałkowska'. Either mistake answers with nothing, which reads exactly like 'no such transactions'."
  15. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"Location name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Use list_locations to find valid names."New value: +"Location name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Prefer teryt= for exact matches; call list_locations(search=...) to confirm a name is valid here — it flags valid ones as rcn_district."
  16. Changed1 schema field changed
    • changedInput schema / properties / street / description
      Previous value: -"Street name filter (partial match, e.g. 'Puławska', 'Trakt Lubelski')"New value: +"Street name filter, matched anywhere inside the name (e.g. 'Puławska', 'Trakt Lubelski'). Give it in the NOMINATIVE and with its Polish diacritics — matching is literal, so 'Karmelickiej' does not find 'Karmelicka' and 'Marszalkowska' does not find 'Marszałkowska'. Either mistake answers with nothing, which reads exactly like 'no such transactions'."
  17. Changed4 schema fields changed
    • addedInput schema / properties / buildingStoreys
      Added value: +{
      +  "description": "Number of above-ground storeys of the building. Multi-select buckets: exact non-negative integers (e.g. '1','2'), 'Nplus' e.g. '3plus' = 3 or more, 'unknown' = no storey count recorded (NULL). Recorded ONLY for single-building transactions, so 'unknown' covers BOTH a deed with several buildings (no single storey count exists) and a single building with missing data — never read it as 'a building with no storeys'. This is NOT the floor of a unit (see floor). Without 'unknown', rows with no storey count are excluded.",
      +  "items": {
      +    "pattern": "^(\\d+|\\d+plus|unknown)$",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / landUse
      Added value: +{
      +  "description": "Recorded land-use category of the transaction's land. Multi-select from: gruntyZabudowaneIZurbanizowane (built-up and urbanised), gruntyRolne (agricultural), gruntyLesne (forest), terenyKomunikacyjne (transport), inne (other). 'unknown' = no category recorded for the land (NULL) — a legitimate bucket, never a claim that the land has no use. Values are case-sensitive. E.g. ['gruntyRolne'] for farmland, or ['gruntyZabudowaneIZurbanizowane','gruntyRolne'] to compare developed vs farmland.",
      +  "items": {
      +    "enum": [
      +      "gruntyZabudowaneIZurbanizowane",
      +      "gruntyRolne",
      +      "gruntyLesne",
      +      "terenyKomunikacyjne",
      +      "inne",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / maxFootprintArea
      Added value: +{
      +  "description": "Maximum building footprint (ground-plan) area in m², summed over all buildings of the transaction. Distinct from maxArea, which measures usable floor area (units) or land/parcel area. Set only where every linked building has footprint data, so this bound selects only measured rows — absence means 'not measured', not 'no building'.",
      +  "type": "number"
      +}
    • addedInput schema / properties / minFootprintArea
      Added value: +{
      +  "description": "Minimum building footprint (ground-plan) area in m², summed over all buildings of the transaction. Distinct from minArea, which measures usable floor area (units) or land/parcel area. Set only where every linked building has footprint data, so this bound selects only measured rows — absence means 'not measured', not 'no building'.",
      +  "type": "number"
      +}
  18. Changed1 schema field changed
    • addedInput schema / properties / floor
      Added value: +{
      +  "description": "Floor of the unit (piętro lokalu, residential). Multi-select buckets: exact integers incl. '0' (parter) and negatives e.g. '-1' (basement), 'Nplus' e.g. '10plus' = 10 or more, '0plus' = ground and above, 'unknown' = no floor recorded (NULL). E.g. ['0','1','2'] for ground-to-2nd floor. Building storeys are a different attribute. Without 'unknown', rows with no floor are excluded.",
      +  "items": {
      +    "pattern": "^(-?\\d+|\\d+plus|unknown)$",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  19. Changed1 schema field changed
    • addedInput schema / properties / ownershipType
      Added value: +{
      +  "description": "Ownership / legal-right type filter (rodzaj prawa do nieruchomości). land_ownership; perpetual_usufruct (użytkowanie wieczyste — covers both registry codes for this right); cooperative_ownership; unit_sale; ownership; unit_ownership_with_appurtenant_right; building_ownership_with_appurtenant_right. 'unknown' = no right recorded (NULL). Multi-select; e.g. ['land_ownership','perpetual_usufruct'] to compare ownership vs perpetual usufruct on undeveloped land.",
      +  "items": {
      +    "enum": [
      +      "land_ownership",
      +      "perpetual_usufruct",
      +      "cooperative_ownership",
      +      "unit_sale",
      +      "ownership",
      +      "unit_ownership_with_appurtenant_right",
      +      "building_ownership_with_appurtenant_right",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  20. Changed1 schema field changed
    • addedInput schema / properties / heritageStatus
      Added value: +{
      +  "description": "Heritage-listing filter. listed = a protected monument on/at the property's land; zone = the land lies within a protected urban layout or the designated surroundings of a monument. Selects ONLY transactions where a listing was detected; absence of a detection is never asserted as 'not listed'. Multi-select; e.g. ['listed'] = individually listed properties only.",
      +  "items": {
      +    "enum": [
      +      "listed",
      +      "zone"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  21. Changed1 schema field changed
    • addedInput schema / properties / landslideRisk
      Added value: +{
      +  "description": "Landslide-hazard filter, from official landslide-hazard maps (1:10,000 scale). 'landslide' = the land intersects a mapped landslide area; 'threatened' = an area threatened by mass movements. Selects ONLY transactions whose land intersects a mapped hazard area — an intersection means overlap with a mapped area, not that the parcel itself is a landslide; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['landslide','threatened'] = any mapped hazard.",
      +  "items": {
      +    "enum": [
      +      "landslide",
      +      "threatened"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  22. Changed7 schema fields changed
    • changedInput schema / properties / buildingType / description
      Previous value: -"Building type filter (PKOB classification)"New value: +"Building type filter (PKOB classification). 'unknown' = no type recorded (NULL); without it such rows are excluded (~39% of buildings have no type)."
    • changedInput schema / properties / buildingType / enum
      Previous value: -[
      -  "residential",
      -  "commercial",
      -  "industrial",
      -  "transport",
      -  "office",
      -  "warehouse",
      -  "education_sports",
      -  "farm_utility",
      -  "hospital",
      -  "other_nonresidential"
      -]New value: +[
      +  "residential",
      +  "commercial",
      +  "industrial",
      +  "transport",
      +  "office",
      +  "warehouse",
      +  "education_sports",
      +  "farm_utility",
      +  "hospital",
      +  "other_nonresidential",
      +  "unknown"
      +]
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation filter (exact match, e.g. 'budownictwoMieszkanioweWielorodzinne', 'terenObiektowProdukcyjnychSkladowIMagazynow')"New value: +"MPZP zoning designation filter (exact match, e.g. 'budownictwoMieszkanioweWielorodzinne', 'terenObiektowProdukcyjnychSkladowIMagazynow'). Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ' (= 'no plan/WZ' recorded as data)."
    • changedInput schema / properties / rooms / description
      Previous value: -"Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded."New value: +"Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more, 'unknown' = no room count recorded (NULL). E.g. ['2','3'] for 2-3 izby flats. Without 'unknown', rows with no room count are excluded."
    • changedInput schema / properties / rooms / items / enum
      Previous value: -[
      -  "1",
      -  "2",
      -  "3",
      -  "4",
      -  "5",
      -  "6",
      -  "7",
      -  "8plus"
      -]New value: +[
      +  "1",
      +  "2",
      +  "3",
      +  "4",
      +  "5",
      +  "6",
      +  "7",
      +  "8plus",
      +  "unknown"
      +]
    • changedInput schema / properties / unitFunction / description
      Previous value: -"Unit/apartment function filter"New value: +"Unit/apartment function filter. 'unknown' = no function recorded (NULL); without it such rows are excluded. Garages appear only when 'garage' is selected, not via 'unknown'."
    • changedInput schema / properties / unitFunction / enum
      Previous value: -[
      -  "residential",
      -  "commercial",
      -  "office",
      -  "production",
      -  "garage",
      -  "other"
      -]New value: +[
      +  "residential",
      +  "commercial",
      +  "office",
      +  "production",
      +  "garage",
      +  "other",
      +  "unknown"
      +]
  23. Changed5 schema fields changed
    • addedInput schema / properties / floodRisk
      Added value: +{
      +  "description": "Flood-hazard filter. high = most frequent flooding (~1-in-10-year), medium (~1-in-100-year), low = rarest (~1-in-500-year). Selects ONLY transactions whose land sits in a mapped flood zone; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['medium','high'] = at least medium risk.",
      +  "items": {
      +    "enum": [
      +      "low",
      +      "medium",
      +      "high"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / marketType / description
      Previous value: -"Market type: primary (developer) or secondary (resale)"New value: +"Market type: primary (developer) or secondary (resale). ~55% of records have unknown market type and will be excluded when this filter is used."
    • addedInput schema / properties / rooms
      Added value: +{
      +  "description": "Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded.",
      +  "items": {
      +    "enum": [
      +      "1",
      +      "2",
      +      "3",
      +      "4",
      +      "5",
      +      "6",
      +      "7",
      +      "8plus"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / teryt
      Added value: +{
      +  "description": "TERYT administrative code(s) for precise area filtering. Comma-separated, max 10. 2-digit (voivodeship), 4-digit (county), 6-digit (municipality), or full precinct code (e.g. '321705_2.0054'). Use list_locations to find codes. More precise than 'location' - avoids name ambiguity.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / transactionType
      Added value: +{
      +  "description": "Transaction type filter. For market analysis, ALWAYS specify transactionType to exclude non-market transactions (subsidized, foreclosure, public purpose). ~2% of transactions have unknown type (NULL) and are excluded when this filter is used unless 'unknown' is included.",
      +  "items": {
      +    "enum": [
      +      "free_market",
      +      "auction",
      +      "non_auction",
      +      "subsidized",
      +      "public_purpose",
      +      "foreclosure",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  24. Changed5 schema fields changed
    • removedInput schema / properties / floodRisk
      Removed value: -{
      -  "description": "Flood-hazard filter. high = most frequent flooding (~1-in-10-year), medium (~1-in-100-year), low = rarest (~1-in-500-year). Selects ONLY transactions whose land sits in a mapped flood zone; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['medium','high'] = at least medium risk.",
      -  "items": {
      -    "enum": [
      -      "low",
      -      "medium",
      -      "high"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • changedInput schema / properties / marketType / description
      Previous value: -"Market type: primary (developer) or secondary (resale). ~55% of records have unknown market type and will be excluded when this filter is used."New value: +"Market type: primary (developer) or secondary (resale)"
    • removedInput schema / properties / rooms
      Removed value: -{
      -  "description": "Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded.",
      -  "items": {
      -    "enum": [
      -      "1",
      -      "2",
      -      "3",
      -      "4",
      -      "5",
      -      "6",
      -      "7",
      -      "8plus"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / teryt
      Removed value: -{
      -  "description": "TERYT administrative code(s) for precise area filtering. Comma-separated, max 10. 2-digit (voivodeship), 4-digit (county), 6-digit (municipality), or full precinct code (e.g. '321705_2.0054'). Use list_locations to find codes. More precise than 'location' - avoids name ambiguity.",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / transactionType
      Removed value: -{
      -  "description": "Transaction type filter. For market analysis, ALWAYS specify transactionType to exclude non-market transactions (subsidized, foreclosure, public purpose). ~2% of transactions have unknown type (NULL) and are excluded when this filter is used unless 'unknown' is included.",
      -  "items": {
      -    "enum": [
      -      "free_market",
      -      "auction",
      -      "non_auction",
      -      "subsidized",
      -      "public_purpose",
      -      "foreclosure",
      -      "unknown"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
  25. Changed1 schema field changed
    • changedInput schema / properties / floodRisk / description
      Previous value: -"ISOK flood-hazard filter. high=Q10% (1-in-10-year), medium=Q1% (1-in-100-year), low=Q0.2% (1-in-500-year). Selects ONLY transactions whose land sits in a mapped flood zone; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['medium','high'] = at least medium risk."New value: +"Flood-hazard filter. high = most frequent flooding (~1-in-10-year), medium (~1-in-100-year), low = rarest (~1-in-500-year). Selects ONLY transactions whose land sits in a mapped flood zone; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['medium','high'] = at least medium risk."
  26. Changed1 schema field changed
    • addedInput schema / properties / floodRisk
      Added value: +{
      +  "description": "ISOK flood-hazard filter. high=Q10% (1-in-10-year), medium=Q1% (1-in-100-year), low=Q0.2% (1-in-500-year). Selects ONLY transactions whose land sits in a mapped flood zone; absence of a zone is never asserted as 'safe'. Multi-select; e.g. ['medium','high'] = at least medium risk.",
      +  "items": {
      +    "enum": [
      +      "low",
      +      "medium",
      +      "high"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  27. Changed1 schema field changed
    • addedInput schema / properties / rooms
      Added value: +{
      +  "description": "Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded.",
      +  "items": {
      +    "enum": [
      +      "1",
      +      "2",
      +      "3",
      +      "4",
      +      "5",
      +      "6",
      +      "7",
      +      "8plus"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  28. Changed1 schema field changed
    • addedInput schema / properties / transactionType
      Added value: +{
      +  "description": "Transaction type filter. For market analysis, ALWAYS specify transactionType to exclude non-market transactions (subsidized, foreclosure, public purpose). ~2% of transactions have unknown type (NULL) and are excluded when this filter is used unless 'unknown' is included.",
      +  "items": {
      +    "enum": [
      +      "free_market",
      +      "auction",
      +      "non_auction",
      +      "subsidized",
      +      "public_purpose",
      +      "foreclosure",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  29. Changed1 schema field changed
    • addedInput schema / properties / teryt
      Added value: +{
      +  "description": "TERYT administrative code(s) for precise area filtering. Comma-separated, max 10. 2-digit (voivodeship), 4-digit (county), 6-digit (municipality), or full precinct code (e.g. '321705_2.0054'). Use list_locations to find codes. More precise than 'location' - avoids name ambiguity.",
      +  "minLength": 1,
      +  "type": "string"
      +}
  30. Changed1 schema field changed
    • changedInput schema / properties / marketType / description
      Previous value: -"Market type: primary (developer) or secondary (resale)"New value: +"Market type: primary (developer) or secondary (resale). ~55% of records have unknown market type and will be excluded when this filter is used."
  31. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"Location name - city (e.g. 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Śródmieście'). For Warsaw, use district names (Mokotów, Wola, etc.) - 'Warszawa' won't match. Use list_locations to find valid names."New value: +"Location name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Use list_locations to find valid names."
  32. Changed3 schema fields changed
    • addedInput schema / properties / buildingType
      Added value: +{
      +  "description": "Building type filter (PKOB classification)",
      +  "enum": [
      +    "residential",
      +    "commercial",
      +    "industrial",
      +    "transport",
      +    "office",
      +    "warehouse",
      +    "education_sports",
      +    "farm_utility",
      +    "hospital",
      +    "other_nonresidential"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / mpzpDesignation
      Added value: +{
      +  "description": "MPZP zoning designation filter (exact match, e.g. 'budownictwoMieszkanioweWielorodzinne', 'terenObiektowProdukcyjnychSkladowIMagazynow')",
      +  "type": "string"
      +}
    • addedInput schema / properties / unitFunction
      Added value: +{
      +  "description": "Unit/apartment function filter",
      +  "enum": [
      +    "residential",
      +    "commercial",
      +    "office",
      +    "production",
      +    "garage",
      +    "other"
      +  ],
      +  "type": "string"
      +}
  33. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/non-destructive/closed-world, and the description adds substantial context beyond them: per-mode paging caps (10 for a point, 20 for a polygon), the 5 API-token cost of polygon mode, the exact list of filters silently refused in polygon mode, the exclusion side-effects of a point search, a data-quality caveat (~1.7% missing transaction_date), and the meaning of inline [...] computed-value markers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it does and what it returns, then organized by search mode (place, point, polygon), which mirrors the decision the agent must make. It is dense and long, and some mode restrictions restated in the prose duplicate parameter-level schema text, but nearly every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 39-parameter tool with no output schema, the description still conveys the row shape (address, date, price, area, price/m², type), how summary and groupBy differ from rows, and how to construct a permalink from row id plus coordinates. An agent has enough to select a mode, build the call and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns above that by explaining cross-parameter interactions the schema only states piecemeal — a point excludes location/teryt/street/buildingNumber and is sorted by date only, and a polygon refuses sort, order, summaryOnly and the hazard/heritage filters. It does not re-explain individual filter semantics, which is appropriate since the schema already handles those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource ('Find individual Polish real-estate transactions from the national RCN registry'), quantifies scope (8M+ notarial deeds, not asking prices) and lists the returned fields. It immediately differentiates itself from data siblings by stressing actual deeds rather than listings, and later names list_parcels_in_area for the adjacent-but-different land-plot use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: resolve the place via list_locations first, use location= only for names flagged as rcn_district, use lat/lng for neighborhoods, and polygon for exact boundaries, with concrete radius guidance per scenario. The gap is that overlapping siblings like get_transaction_layer, get_price_statistics and compare_locations are never addressed, so the agent must infer when this search is preferable to those aggregate tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources