<?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>I built an API for Polish tax rulings: 550k+ official interpretations for AI agents</title>
      <dc:creator>Krzysztof Filipiak</dc:creator>
      <pubDate>Thu, 22 Oct 2026 06:40:17 +0000</pubDate>
      <link>https://dev.to/krzysztof_filipiak_291b2c/i-built-an-api-for-polish-tax-rulings-550k-official-interpretations-for-ai-agents-2k26</link>
      <guid>https://dev.to/krzysztof_filipiak_291b2c/i-built-an-api-for-polish-tax-rulings-550k-official-interpretations-for-ai-agents-2k26</guid>
      <description>&lt;p&gt;I built an API for Polish tax rulings: &lt;strong&gt;550,000+ official interpretations&lt;/strong&gt; from the Ministry of Finance's EUREKA database as structured JSON – thesis, outcome, key sections and full Markdown. It works as an MCP tool for Claude and ChatGPT via Apify. Pay per result ($0.001).&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://apify.com/kris_fili/poland-tax-interpretations" rel="noopener noreferrer"&gt;apify.com/kris_fili/poland-tax-interpretations&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why
&lt;/h2&gt;

&lt;p&gt;In Poland, individual tax interpretations issued by the National Tax Information (KIS) are a core source for tax advisors and accountants – more than 525,000 of them are public in EUREKA. But EUREKA only offers a website search, which is hard to use from code or from an AI agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Search by phrase (in Polish), signature or document ID&lt;/li&gt;
&lt;li&gt;Document types: individual interpretations, binding VAT rate information (WIS), general interpretations, tax explanations, court rulings and more&lt;/li&gt;
&lt;li&gt;For each document: signature, issue date, status, thesis and a link to the official source&lt;/li&gt;
&lt;li&gt;With details: the &lt;strong&gt;outcome&lt;/strong&gt; (was the taxpayer's position correct?), the &lt;strong&gt;key sections&lt;/strong&gt; (facts, question, taxpayer's position, assessment) and the &lt;strong&gt;full text as Markdown&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;For WIS: the VAT rate, classification, legal basis and validity period as separate fields&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"leasing samochodu osobowego"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detailLevel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sections"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output (shortened):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0114-KDIP4-2.4012.626.2026.3.MC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"issueDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-09-25"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thesis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Prawo do odliczenia podatku VAT od wydatków związanych z samochodem osobowym."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"outcome"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"incorrect"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"applicantPosition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"assessment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://eureka.mf.gov.pl/informacje/podglad/712074"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use it from an AI agent (MCP)
&lt;/h2&gt;

&lt;p&gt;Add the Actor through the Apify MCP server:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://mcp.apify.com/?actors=kris_fili/poland-tax-interpretations&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then ask, for example: &lt;em&gt;"Find recent Polish tax interpretations on VAT deduction for leased cars and quote the signatures."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data source
&lt;/h2&gt;

&lt;p&gt;Data comes live from the public EUREKA service of the Polish Ministry of Finance. Official documents are not protected by copyright in Poland, and the Ministry anonymises them before publication. The project is independent and not affiliated with the Ministry. Results are information, not tax advice.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>api</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How much apartment does 600,000 PLN buy in Poland's largest cities?</title>
      <dc:creator>Krzysztof Filipiak</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:40:17 +0000</pubDate>
      <link>https://dev.to/krzysztof_filipiak_291b2c/how-much-apartment-does-600000-pln-buy-in-polands-largest-cities-53m3</link>
      <guid>https://dev.to/krzysztof_filipiak_291b2c/how-much-apartment-does-600000-pln-buy-in-polands-largest-cities-53m3</guid>
      <description>&lt;p&gt;Asking prices on listing portals tell you what sellers hope for. Notarial deeds tell you what buyers actually paid. Here is how much apartment a fixed budget buys in each of Poland's largest cities, using the median price per m² from deeds signed in the last 12 months.&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%2Fnb0h806aqczxfjuaieh2.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%2Fnb0h806aqczxfjuaieh2.png" alt="metraz" width="800" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Median price per m² (PLN)&lt;/th&gt;
&lt;th&gt;m² for 600,000 PLN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Czestochowa&lt;/td&gt;
&lt;td&gt;7,243&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lodz&lt;/td&gt;
&lt;td&gt;9,250&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Olsztyn&lt;/td&gt;
&lt;td&gt;9,343&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kielce&lt;/td&gt;
&lt;td&gt;9,483&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Torun&lt;/td&gt;
&lt;td&gt;9,512&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rzeszow&lt;/td&gt;
&lt;td&gt;9,613&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bialystok&lt;/td&gt;
&lt;td&gt;9,937&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Katowice&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lublin&lt;/td&gt;
&lt;td&gt;10,129&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Szczecin&lt;/td&gt;
&lt;td&gt;10,561&lt;/td&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poznan&lt;/td&gt;
&lt;td&gt;11,540&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gdynia&lt;/td&gt;
&lt;td&gt;11,936&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gdansk&lt;/td&gt;
&lt;td&gt;12,622&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wroclaw&lt;/td&gt;
&lt;td&gt;12,862&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Krakow&lt;/td&gt;
&lt;td&gt;14,961&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warsaw&lt;/td&gt;
&lt;td&gt;15,742&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What stands out
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Czestochowa&lt;/strong&gt; gives you the most space: 83 m².&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warsaw&lt;/strong&gt; the least: 38 m² – 2.2× less than Czestochowa.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Apartment sales from the Polish Real Estate Price Register (RCN, published by GUGiK; free since 13 February 2026): market sales of full ownership only, implausible prices removed.&lt;/li&gt;
&lt;li&gt;12-month window ending at the newest deed published in each city – counties publish with different delays.&lt;/li&gt;
&lt;li&gt;Weekly open data for all cities (CSV, CC BY 4.0) is on GitHub: poland-housing-prices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get the data for any address
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://apify.com/kris_fili/poland-real-estate-transaction-prices" rel="noopener noreferrer"&gt;Transaction prices from notarial deeds&lt;/a&gt; – median, quartiles, trend and the deeds around any address.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apify.com/kris_fili/poland-apartment-valuation" rel="noopener noreferrer"&gt;Apartment valuation (AVM)&lt;/a&gt; – an estimate for any apartment from comparable deeds.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apify.com/kris_fili/poland-new-build-apartment-prices" rel="noopener noreferrer"&gt;New-build prices&lt;/a&gt; – developers' asking prices from their daily price lists.
&lt;/li&gt;
&lt;/ul&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;The same tools work inside AI assistants through MCP. Questions or ideas for another analysis? Leave a comment.&lt;/p&gt;

</description>
    </item>
    <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>
