<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Krzysztof Filipiak</title>
    <description>The latest articles on DEV Community by Krzysztof Filipiak (@krzysztof_filipiak_291b2c).</description>
    <link>https://dev.to/krzysztof_filipiak_291b2c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159744%2Fb6ad443f-07e7-4efd-ad57-7b110390d71d.png</url>
      <title>DEV Community: Krzysztof Filipiak</title>
      <link>https://dev.to/krzysztof_filipiak_291b2c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krzysztof_filipiak_291b2c"/>
    <language>en</language>
    <item>
      <title>How to get real apartment transaction prices in Poland via API (official RCN data)</title>
      <dc:creator>Krzysztof Filipiak</dc:creator>
      <pubDate>Tue, 06 Oct 2026 06:40:31 +0000</pubDate>
      <link>https://dev.to/krzysztof_filipiak_291b2c/how-to-get-real-apartment-transaction-prices-in-poland-via-api-official-rcn-data-ejh</link>
      <guid>https://dev.to/krzysztof_filipiak_291b2c/how-to-get-real-apartment-transaction-prices-in-poland-via-api-official-rcn-data-ejh</guid>
      <description>&lt;p&gt;Since 13 February 2026 the Polish Real Estate Price Register (&lt;em&gt;Rejestr Cen Nieruchomości&lt;/em&gt;, RCN) is free and public. Every notarial deed of a property sale ends up there: the price, the floor area, the number of rooms, the floor, primary or secondary market and the location. For anyone analysing the Polish housing market this is the first official source of &lt;strong&gt;prices actually paid&lt;/strong&gt;, not asking prices from listing portals.&lt;/p&gt;

&lt;p&gt;For example, for the whole of Krakow the register currently gives &lt;strong&gt;11,063 apartment sales&lt;/strong&gt; in the 12 months up to September 2026, with a median of &lt;strong&gt;14,961 PLN/m²&lt;/strong&gt; (new builds 15,000, resale 14,872).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjzj3cyrrtirmci0q2rgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjzj3cyrrtirmci0q2rgb.png" alt="Median apartment price per m² from notarial deeds" width="800" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the raw register is hard to use
&lt;/h2&gt;

&lt;p&gt;The data is published through an OGC WFS service that returns GML in the Polish coordinate system EPSG:2180. To get something useful you have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build XML filters (by county TERYT code or by a bounding box),&lt;/li&gt;
&lt;li&gt;page through results 1,000 records at a time,&lt;/li&gt;
&lt;li&gt;convert coordinates to GPS,&lt;/li&gt;
&lt;li&gt;remove non-market sales (municipal flats sold with discounts), partial shares and parking spaces sold as shares of a garage hall,&lt;/li&gt;
&lt;li&gt;handle units that differ between counties and outliers caused by typos in deeds,&lt;/li&gt;
&lt;li&gt;remember that each county publishes with a different delay (from weeks to months).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The quick way: one API call
&lt;/h2&gt;

&lt;p&gt;I wrapped all of this into an Apify Actor: &lt;a href="https://apify.com/kris_fili/poland-real-estate-transaction-prices" rel="noopener noreferrer"&gt;Poland Real Estate Transaction Prices&lt;/a&gt;. You give it an address, a city or coordinates and get a statistical report (median price per m², quartiles, quarterly trend, primary vs secondary market, year-on-year change) plus the list of transactions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kris_fili/poland-real-estate-transaction-prices&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;location&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Kraków, Rynek Główny 1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;radiusMeters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monthsBack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recordType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statistics&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pricePerM2Pln&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also works without code: open the Actor page, type an address and press &lt;em&gt;Start&lt;/em&gt;. Results can be downloaded as Excel, CSV or JSON, or used from Make, Zapier, n8n or an AI agent through MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Asking prices and the gap
&lt;/h2&gt;

&lt;p&gt;Since 11 September 2025 Polish developers must publish their price lists every day on dane.gov.pl. A second Actor, &lt;a href="https://apify.com/kris_fili/poland-new-build-apartment-prices" rel="noopener noreferrer"&gt;Poland New-Build Apartment Prices&lt;/a&gt;, collects all of them every morning (hundreds of thousands of offers), cleans dozens of different file formats and geocodes the addresses.&lt;/p&gt;

&lt;p&gt;The third one, &lt;a href="https://apify.com/kris_fili/poland-housing-price-gap" rel="noopener noreferrer"&gt;Poland Housing Price Gap&lt;/a&gt;, compares both sources for any location: how much more developers ask today than buyers paid in recent notarial deeds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good to know
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prices from deeds of new apartments often lag behind current price lists, because deeds are usually signed at handover.&lt;/li&gt;
&lt;li&gt;A few counties do not publish data yet – every report shows the date of the latest deed found.&lt;/li&gt;
&lt;li&gt;No personal data is processed: the register does not contain names of buyers or sellers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions or ideas for other Polish open-data APIs? Let me know in the comments.&lt;/p&gt;

</description>
      <category>api</category>
      <category>data</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
