<?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>Forem: Peter</title>
    <description>The latest articles on Forem by Peter (@ucptools).</description>
    <link>https://forem.com/ucptools</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3737432%2F036b6d50-5faf-4939-ac76-c7f56e7a6382.jpeg</url>
      <title>Forem: Peter</title>
      <link>https://forem.com/ucptools</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ucptools"/>
    <language>en</language>
    <item>
      <title>93% of UCP profiles are broken. Here are the 3 failures that matter most.</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Sat, 18 Apr 2026 07:03:35 +0000</pubDate>
      <link>https://forem.com/ucptools/93-of-ucp-profiles-are-broken-here-are-the-3-failures-that-matter-most-1n37</link>
      <guid>https://forem.com/ucptools/93-of-ucp-profiles-are-broken-here-are-the-3-failures-that-matter-most-1n37</guid>
      <description>&lt;h1&gt;
  
  
  93% of UCP profiles are broken. Here are the 3 failures that matter most.
&lt;/h1&gt;

&lt;p&gt;Published April 18, 2026 | 5 min read&lt;/p&gt;

&lt;p&gt;We just scanned 111 e-commerce domains and found a staggering truth: &lt;strong&gt;93% of UCP profiles cannot complete AI agent purchases&lt;/strong&gt;. Not because they don't have UCP files, but because they fail at the 3 critical steps that actually matter for agentic commerce.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Behind the 93%
&lt;/h2&gt;

&lt;p&gt;Our AI Readiness Index scanned 111 reachable domains across fashion, home decor, beauty, SaaS, and marketplaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;72 domains (65%)&lt;/strong&gt;: Zero UCP presence at all&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;35 domains (31.5%)&lt;/strong&gt;: Have UCP files but are functionally broken&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 domains (3.6%)&lt;/strong&gt;: Have structural issues &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 domains&lt;/strong&gt;: Are actually AI-agent ready&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Among the 35 stores that technically "pass" UCP validation (Grade C), &lt;strong&gt;100% share the same 3 fatal failures&lt;/strong&gt;. This is where the real problem lies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 Failures That Break AI Commerce
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Missing &lt;code&gt;signing_keys&lt;/code&gt; - 20% of all stores
&lt;/h3&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;"ucp_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signing_keys"&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;EMPTY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MISSING&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;&lt;strong&gt;Why it matters&lt;/strong&gt;: Without cryptographic signing keys, AI agents cannot verify that your UCP manifest is authentic and hasn't been tampered with. This is a security requirement for any transaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;: Agents will refuse to interact with your store, period.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Missing &lt;code&gt;payment_handlers&lt;/code&gt; - 23% of stores with UCP
&lt;/h3&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;"services"&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;"checkout"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"uri"&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://yourstore.com/checkout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"payment_handlers"&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;EMPTY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MISSING&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;: Payment handlers tell AI agents which payment methods you accept (credit cards, PayPal, Apple Pay, etc.). Without them, agents have no idea how to complete a purchase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;: AI agents can discover your store but cannot buy from you.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Missing &lt;code&gt;return_policy&lt;/code&gt; schema - 49% of all stores
&lt;/h3&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;"organization"&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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Store"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"return_policy"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"properties"&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MISSING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;REQUIRED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;FIELDS&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;: Return policies are trust signals for AI agents. They need to know your return terms to recommend your store to users and handle post-purchase issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;: AI agents cannot display your trustworthiness, reducing conversion likelihood.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Detected" ≠ "Ready" Trap
&lt;/h2&gt;

&lt;p&gt;Most UCP validation tools (including our own basic checks) only answer one question: &lt;em&gt;"Is there a .well-known/ucp file?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They don't answer the questions that actually matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Can agents cryptographically verify your manifest?&lt;/li&gt;
&lt;li&gt;✅ Can agents process payments at your store?&lt;/li&gt;
&lt;li&gt;✅ Can agents display your trust signals?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stores like Allbirds, Brooklinen, and Fashion Nova all pass basic UCP detection but fail at these critical levels. They're "detected" but not "transactable."&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Example: BigCommerce Bug
&lt;/h2&gt;

&lt;p&gt;We found a platform-wide issue affecting BigCommerce merchants:&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;"services"&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;"dev.ucp.shopping"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"uri"&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://store.mybigcommerce.com/api/ucp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"spec"&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MISSING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;SPEC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;FIELD&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three BigCommerce domains shared identical &lt;code&gt;UCP_INVALID_SERVICE&lt;/code&gt; errors due to missing &lt;code&gt;spec&lt;/code&gt; fields. This isn't merchant error - it's a platform implementation issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for AI Commerce
&lt;/h2&gt;

&lt;p&gt;The 93% broken rate isn't just a statistic - it's a barrier to the $15T e-commerce market becoming AI-accessible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For brands&lt;/strong&gt;: You have a first-mover advantage right now. Fix these 3 fields and you'll be in the top 7% of AI-ready stores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For agencies&lt;/strong&gt;: Your clients' UCP profiles are likely broken even if they "pass" validation. You need to check these 3 critical areas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For platforms&lt;/strong&gt;: The current UCP implementation guidance is insufficient. Platforms need to enforce these 3 requirements at the validation level, not just the presence level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix These in 15 Minutes
&lt;/h2&gt;

&lt;p&gt;These aren't complex architectural changes. They're simple field additions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add signing keys&lt;/strong&gt; from your SSL certificate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;List accepted payment methods&lt;/strong&gt; in payment_handlers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define return terms&lt;/strong&gt; in the return_policy schema&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tools exist to validate these properly - most just don't yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Market Opportunity
&lt;/h2&gt;

&lt;p&gt;Right now, the gap is enormous:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0% of marketplaces have working UCP&lt;/li&gt;
&lt;li&gt;Only 31.5% of DTC brands even have UCP files&lt;/li&gt;
&lt;li&gt;Of those, effectively none are actually AI-transactable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a massive opportunity for the first platforms, agencies, and tools that solve these 3 fundamental problems.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Data from UCPtools AI Readiness Index - 111 domains scanned April 13, 2026. Scan methodology: Serper API discovery + targeted validation. All numbers from actual scan reports.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test your store's UCP profile&lt;/strong&gt;: &lt;a href="https://ucptools.dev/directory?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=202604" rel="noopener noreferrer"&gt;https://ucptools.dev/directory?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=202604&lt;/a&gt; ?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=202604&lt;/p&gt;

</description>
      <category>agenticcommerce</category>
      <category>ucp</category>
      <category>ecommerce</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Austrian Insolvency Monitoring Without IWG License: Ediktsdatei on Apify</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Sat, 18 Apr 2026 06:52:38 +0000</pubDate>
      <link>https://forem.com/ucptools/austrian-insolvency-monitoring-without-iwg-license-ediktsdatei-on-apify-jab</link>
      <guid>https://forem.com/ucptools/austrian-insolvency-monitoring-without-iwg-license-ediktsdatei-on-apify-jab</guid>
      <description>&lt;h1&gt;
  
  
  Austrian Insolvency Monitoring Without IWG License: Ediktsdatei on Apify
&lt;/h1&gt;

&lt;p&gt;For compliance teams and credit risk analysts monitoring Austrian insolvency proceedings, the traditional path has been fraught with obstacles. The official Ediktsdatei system requires an expensive IWG government license, creating significant barriers for smaller firms, startups, and independent researchers who need access to critical insolvency data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: IWG License Barrier
&lt;/h2&gt;

&lt;p&gt;Austrian insolvency data is officially published through the Ediktsdatei system operated by the Austrian Courts. However, accessing this data programmatically traditionally required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IWG License Application&lt;/strong&gt;: Complex government approval process&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Costly Subscription&lt;/strong&gt;: Annual fees that can run into thousands of euros&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Limitations&lt;/strong&gt;: Direct API access often restricted or unavailable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geographic Restrictions&lt;/strong&gt;: Some data may be location-limited&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This barrier has left many compliance professionals forced to either:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pay for expensive third-party services&lt;/li&gt;
&lt;li&gt;Manually monitor court publications&lt;/li&gt;
&lt;li&gt;Go without critical insolvency monitoring entirely&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Solution: Ediktsdatei Scraper on Apify
&lt;/h2&gt;

&lt;p&gt;The Ediktsdatei scraper on Apify provides programmatic access to Austrian insolvency proceedings &lt;strong&gt;without requiring an IWG license&lt;/strong&gt;. This democratizes access to critical compliance data that was previously locked behind bureaucratic and financial barriers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Example: Get recent insolvency filings
&lt;/span&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_API_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_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;keywords&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;Insolvenz&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;Konkurs&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;Sanierung&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;dateFrom&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;2024-01-01&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;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&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;minute_contest/austria-ediktsdatei-scraper&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="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured Data&lt;/strong&gt;: Court decisions, creditor information, asset details&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Monitoring&lt;/strong&gt;: Track new filings as they're published&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical Data&lt;/strong&gt;: Access to past proceedings for trend analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Jurisdiction&lt;/strong&gt;: Coverage across Austrian regional courts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-Effective&lt;/strong&gt;: Pay-per-use pricing starting at $0.005 per result&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases for Compliance Teams
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Credit Risk Assessment
&lt;/h3&gt;

&lt;p&gt;Monitor Austrian companies showing signs of financial distress before it appears in credit reports. Early detection of insolvency proceedings allows for proactive risk mitigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Supply Chain Risk Management
&lt;/h3&gt;

&lt;p&gt;Track your suppliers' financial health to prevent disruptions to your operations. Insolvency monitoring helps identify at-risk vendors before they fail.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Due Diligence for M&amp;amp;A
&lt;/h3&gt;

&lt;p&gt;Conduct thorough background checks on Austrian target companies by reviewing their insolvency history and current proceedings.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Competitive Intelligence
&lt;/h3&gt;

&lt;p&gt;Monitor industry competitors for financial distress signals that may create market opportunities or risks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# Fetch recent insolvency data
&lt;/span&gt;&lt;span class="n"&gt;actor_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_API_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;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;actor_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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DATASET_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;list_items&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Analyze trends by court
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;court_counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;court&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Insolvency filings by court:&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;court_counts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced Monitoring
&lt;/h3&gt;

&lt;p&gt;Set up automated monitoring for specific companies or industries:&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="c1"&gt;# Monitor specific companies
&lt;/span&gt;&lt;span class="n"&gt;monitoring_list&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;Unternehmensname GmbH&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;Industrie AG&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;Handels KG&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Filter results for monitored companies
&lt;/span&gt;&lt;span class="n"&gt;filtered_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;item&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;results&lt;/span&gt; 
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="ow"&gt;in&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;debtor_name&lt;/span&gt;&lt;span class="sh"&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;company&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;monitoring_list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Comparison with Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;License Required&lt;/th&gt;
&lt;th&gt;Real-time Data&lt;/th&gt;
&lt;th&gt;Historical Data&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ediktsdatei Scraper&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.005/result&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IWG Direct Access&lt;/td&gt;
&lt;td&gt;€2,000+/year&lt;/td&gt;
&lt;td&gt;Required ✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commercial Vendors&lt;/td&gt;
&lt;td&gt;€500+/month&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manual Monitoring&lt;/td&gt;
&lt;td&gt;€0 (time cost)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Compliance Benefits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6AMLD Compliance
&lt;/h3&gt;

&lt;p&gt;The upcoming 6th Anti-Money Laundering Directive (effective July 2027) requires enhanced due diligence on beneficial owners and risk assessment. Austrian insolvency data provides critical signals for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Due Diligence&lt;/strong&gt;: Identifying high-risk entities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ongoing Monitoring&lt;/strong&gt;: Tracking changes in corporate structure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source of Wealth Verification&lt;/strong&gt;: Understanding financial history&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Regulatory Reporting
&lt;/h3&gt;

&lt;p&gt;Insolvency data feeds into various regulatory reporting requirements including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suspicious transaction reporting&lt;/li&gt;
&lt;li&gt;Enhanced customer due diligence&lt;/li&gt;
&lt;li&gt;Risk assessment documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Apify Account&lt;/strong&gt;: Free tier available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get API Token&lt;/strong&gt;: Generate from your Apify dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy the Actor&lt;/strong&gt;: One-click deployment of Ediktsdatei scraper&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure Your Query&lt;/strong&gt;: Set keywords, date ranges, and filters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate Monitoring&lt;/strong&gt;: Set up scheduled runs for ongoing monitoring&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  First Run Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Configure your first scraping run
&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;keywords&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;Konkurs&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;Insolvenz&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;Sanierungsplan&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;dateFrom&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;2024-01-01&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;dateTo&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;2024-12-31&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;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;includeDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Execute the scrape
&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;minute_contest/austria-ediktsdatei-scraper&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="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Monitor progress
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Run status: &lt;/span&gt;&lt;span class="si"&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;status&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Items collected: &lt;/span&gt;&lt;span class="si"&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;stats&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;items&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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;h2&gt;
  
  
  Cost Analysis
&lt;/h2&gt;

&lt;p&gt;The pay-per-use model makes this solution highly cost-effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small Scale&lt;/strong&gt;: 100 results/month = $0.50&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium Scale&lt;/strong&gt;: 1,000 results/month = $5.00&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large Scale&lt;/strong&gt;: 10,000 results/month = $50.00&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare this to traditional IWG license fees of €2,000+ per year, and the value proposition becomes clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and Considerations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Public Data Only&lt;/strong&gt;: Only covers officially published insolvency proceedings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update Frequency&lt;/strong&gt;: Dependent on court publication schedules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language&lt;/strong&gt;: Most documents are in German&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Completeness&lt;/strong&gt;: Some details may be redacted or incomplete&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Ediktsdatei scraper on Apify removes the IWG license barrier that has prevented many organizations from accessing critical Austrian insolvency data. For compliance teams, credit risk analysts, and due diligence professionals, this tool provides an affordable, scalable solution for monitoring Austrian corporate distress signals.&lt;/p&gt;

&lt;p&gt;As regulatory requirements continue to evolve and the importance of early risk detection grows, having programmatic access to insolvency data becomes increasingly valuable. This solution bridges the gap between the need for comprehensive compliance monitoring and the practical barriers that have traditionally existed.&lt;/p&gt;

&lt;p&gt;Ready to get started with Austrian insolvency monitoring? &lt;a href="https://apify.com/minute_contest/austria-ediktsdatei-scraper?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=202604" rel="noopener noreferrer"&gt;Deploy the Ediktsdatei scraper on Apify&lt;/a&gt; and begin monitoring critical compliance signals today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apify.com/minute_contest/austria-ediktsdatei-scraper?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=202604" rel="noopener noreferrer"&gt;Apify Ediktsdatei Scraper Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.justiz.gv.at/" rel="noopener noreferrer"&gt;Austrian Insolvency Court Procedures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.accountancyeurope.com/insights/6th-aml-directive-key-changes" rel="noopener noreferrer"&gt;6AMLD Compliance Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What are your thoughts on insolvency monitoring tools? Have you faced challenges with accessing Austrian court data? Share your experiences in the comments below!&lt;/p&gt;

</description>
      <category>compliance</category>
      <category>austria</category>
      <category>insolvency</category>
      <category>apify</category>
    </item>
    <item>
      <title>6AMLD Compliance: Automate Beneficial Owner Checks by July 2027</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Fri, 17 Apr 2026 15:25:54 +0000</pubDate>
      <link>https://forem.com/ucptools/6amld-compliance-automate-beneficial-owner-checks-by-july-2027-4a4h</link>
      <guid>https://forem.com/ucptools/6amld-compliance-automate-beneficial-owner-checks-by-july-2027-4a4h</guid>
      <description>&lt;h1&gt;
  
  
  6AMLD Compliance: Automate Beneficial Owner Checks by July 2027
&lt;/h1&gt;

&lt;p&gt;The Sixth EU Anti-Money Laundering Directive (6AMLD) comes into full effect on &lt;strong&gt;July 10, 2027&lt;/strong&gt;, and compliance teams across Europe are scrambling to prepare. With stricter beneficial ownership verification requirements and increased penalties for non-compliance, manual registry searches are no longer sustainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge: Cross-Border Beneficial Owner Verification
&lt;/h2&gt;

&lt;p&gt;Under 6AMLD, financial institutions and designated businesses must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify beneficial ownership information for all corporate entities&lt;/li&gt;
&lt;li&gt;Monitor for changes in ownership structures&lt;/li&gt;
&lt;li&gt;Report suspicious activity within strict deadlines&lt;/li&gt;
&lt;li&gt;Maintain auditable trails of all verification processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem? Beneficial owner data is scattered across 27+ national registries with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Different formats&lt;/strong&gt; (XML, JSON, PDF, web pages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Varying access methods&lt;/strong&gt; (paid APIs, free portals, web scraping)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update frequencies&lt;/strong&gt; (daily, weekly, quarterly)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search capabilities&lt;/strong&gt; (limited to basic name/company searches)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Solution: Automated Beneficial Owner Intelligence
&lt;/h2&gt;

&lt;p&gt;Our European Business Data Suite provides programmatic access to key beneficial owner registries across four countries:&lt;/p&gt;

&lt;h3&gt;
  
  
  Poland: CRBR Beneficial Owners Scraper
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Extracts real beneficial owner data from Poland's Central Register of Beneficial Owners&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price:&lt;/strong&gt; $0.03 per result&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case:&lt;/strong&gt; Verify Polish company ownership structures, monitor for changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; Poland's CRBR is mandatory under 6AMLD with real-time updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Spain: Company Directory Scraper
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Accesses Spanish company registry data including beneficial owners&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price:&lt;/strong&gt; $0.005 per result&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case:&lt;/strong&gt; Cross-reference Spanish entities with ownership information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; Spain's strict transparency laws align with 6AMLD requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Austria: WKO Business Directory
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Provides Austrian company data including ownership structures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price:&lt;/strong&gt; $0.003 per result
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case:&lt;/strong&gt; Verify Austrian beneficial ownership for due diligence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; Austrian transparency requirements complement 6AMLD&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  France: Societe.com Company Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Extracts French company director and ownership information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price:&lt;/strong&gt; $0.005 per result&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use case:&lt;/strong&gt; Monitor French corporate ownership changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; France's expanded beneficial ownership registries fall under 6AMLD&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automated Compliance Workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. New Customer Onboarding
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer provides company ID → Cross-check all 4 country registries → 
Flag high-risk jurisdictions → Verify beneficial owners → 
Generate compliance report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Ongoing Monitoring
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Daily scans of registries → Detect ownership structure changes →
Trigger review workflows → Update compliance profiles →
Maintain audit trail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Risk Assessment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Extract ownership networks → Identify politically exposed persons →
Cross-reference sanctions lists → Calculate risk scores →
Prioritize high-risk cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Automation Beats Manual Searches
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Scalability&lt;/th&gt;
&lt;th&gt;Audit Trail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manual searches&lt;/td&gt;
&lt;td&gt;Hours per company&lt;/td&gt;
&lt;td&gt;60-80%&lt;/td&gt;
&lt;td&gt;$50-100/company&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Poor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spreadsheets&lt;/td&gt;
&lt;td&gt;Days/weeks&lt;/td&gt;
&lt;td&gt;70-85%&lt;/td&gt;
&lt;td&gt;$20-50/company&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Our automation&lt;/td&gt;
&lt;td&gt;Minutes&lt;/td&gt;
&lt;td&gt;95%+&lt;/td&gt;
&lt;td&gt;$0.01-0.03/company&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Getting Started with 6AMLD Compliance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Assess Your Exposure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Map your customer base by country&lt;/li&gt;
&lt;li&gt;Identify high-risk jurisdictions&lt;/li&gt;
&lt;li&gt;Calculate manual compliance costs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Test Automation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start with pilot customers&lt;/li&gt;
&lt;li&gt;Compare accuracy vs manual methods&lt;/li&gt;
&lt;li&gt;Build compliance templates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Scale Deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Integrate with existing workflows&lt;/li&gt;
&lt;li&gt;Set up automated monitoring&lt;/li&gt;
&lt;li&gt;Establish alert thresholds&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Maintain Compliance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Regular audits of automated processes&lt;/li&gt;
&lt;li&gt;Updates for regulatory changes&lt;/li&gt;
&lt;li&gt;Continuous improvement&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Cost of Non-Compliance
&lt;/h2&gt;

&lt;p&gt;6AMLD penalties can reach up to &lt;strong&gt;5% of global annual turnover&lt;/strong&gt; or €10 million, whichever is higher. With 27+ countries implementing the directive, the compliance burden is unprecedented.&lt;/p&gt;

&lt;p&gt;Our suite reduces compliance costs by &lt;strong&gt;80-90%&lt;/strong&gt; while improving accuracy and auditability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Your 6AMLD Journey Today
&lt;/h2&gt;

&lt;p&gt;The July 2027 deadline will be here before you know it. Early adopters are already building automated compliance systems, while laggards face impossible manual workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to automate your beneficial owner verification?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Explore our European Business Data Suite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apify.com/minute_contest/crbr-beneficial-owners-scraper" rel="noopener noreferrer"&gt;CRBR Beneficial Owners Scraper (Poland)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apify.com/minute_contest/spain-company-directory-scraper" rel="noopener noreferrer"&gt;Spain Company Directory Scraper&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://apify.com/minute_contest/wko-business-directory-scraper" rel="noopener noreferrer"&gt;WKO Business Directory Scraper (Austria)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apify.com/minute_contest/societe-com-scraper" rel="noopener noreferrer"&gt;Societe.com Company Data Scraper (France)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Automated compliance isn't just about meeting deadlines—it's about transforming compliance from a cost center to a competitive advantage.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is part of our European Business Data series. Stay tuned for more insights on cross-border compliance automation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>compliance</category>
      <category>6amld</category>
      <category>automation</category>
      <category>kyc</category>
    </item>
    <item>
      <title>UCP and ACP Need a Third Layer: Trust Rails</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Thu, 16 Apr 2026 05:59:36 +0000</pubDate>
      <link>https://forem.com/ucptools/ucp-and-acp-need-a-third-layer-trust-rails-341i</link>
      <guid>https://forem.com/ucptools/ucp-and-acp-need-a-third-layer-trust-rails-341i</guid>
      <description>&lt;p&gt;If you only watched protocol updates in agentic commerce, this week might have looked like more of the same.&lt;/p&gt;

&lt;p&gt;But if you looked at where new announcements actually landed, the signal was different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UCP and ACP keep defining reach&lt;/strong&gt; (where an agent can discover and attempt checkout).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A new trust layer is becoming explicit&lt;/strong&gt; (who carries risk when an autonomous purchase goes wrong).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That second point is the story.&lt;/p&gt;

&lt;p&gt;In the last 7 days, the market did not just talk about agent checkout mechanics. It moved toward &lt;strong&gt;issuer-side controls, intent proof, and liability handling&lt;/strong&gt; as first-class infrastructure.&lt;/p&gt;

&lt;p&gt;For merchants, this changes the implementation question from:&lt;/p&gt;

&lt;p&gt;"Which protocol should we support first?"&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;"How do we ship protocol coverage and trust controls together so autonomous checkout can scale without blowing up disputes?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The 7-Day Signal (Apr 10-Apr 16)
&lt;/h2&gt;

&lt;p&gt;Here are the highest-signal changes and discussions from the current window:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apr 14, 2026: American Express launched ACE developer tooling and registered-agent purchase protection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Official newsroom announcement: American Express introduced Agentic Commerce Experiences (ACE) and protection mechanics for registered agent purchases.&lt;/li&gt;
&lt;li&gt;Practical meaning: payment-side participants are now publishing explicit models for intent validation, registration, and post-transaction accountability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apr 14, 2026: Commerce media coverage emphasized trust, control, and visibility for agent-initiated transactions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Industry writeups broke out the operational pieces: agent registration, account enablement, purchase intent, tokenized credential pass-through, and optional cart context.&lt;/li&gt;
&lt;li&gt;Practical meaning: trust is no longer an abstract "future standards" topic. It is entering implementation checklists.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apr 10-Apr 16, 2026: Operator conversation accelerated around protocol fragmentation and execution gaps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builders and commerce operators repeatedly framed the same reality: one protocol path rarely covers every agent ecosystem.&lt;/li&gt;
&lt;li&gt;Practical meaning: merchants need a multi-surface strategy (discovery + checkout + payment trust) instead of single-protocol optimism.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  UCP and ACP Are Reach Layers, Not Full Safety Models
&lt;/h2&gt;

&lt;p&gt;Let's separate what each layer does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 1: Reach and Interoperability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UCP (Google/Shopify ecosystem)&lt;/strong&gt; helps agents discover merchant capabilities and run structured commerce flows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACP (OpenAI/Stripe ecosystem)&lt;/strong&gt; enables structured agent checkout interactions in the ChatGPT-linked path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are essential. Neither is sufficient on its own for production-scale autonomous buying.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because successful autonomous commerce needs answers to risk questions that protocol alone does not fully answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What evidence proves user intent at authorization time?&lt;/li&gt;
&lt;li&gt;Who is accountable if the agent buys the wrong item?&lt;/li&gt;
&lt;li&gt;How does dispute resolution separate merchant error from agent error from user error?&lt;/li&gt;
&lt;li&gt;What data can be safely retained for adjudication without creating privacy debt?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When volume is low, teams hand-wave these questions.&lt;br&gt;
When agent volume rises, they become blocking architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Week Matters More Than Another Spec Diff
&lt;/h2&gt;

&lt;p&gt;The common pattern in early UCP/ACP discussions was:&lt;/p&gt;

&lt;p&gt;"Get discoverable and check-out capable first."&lt;/p&gt;

&lt;p&gt;That guidance was directionally right, but incomplete.&lt;/p&gt;

&lt;p&gt;This week showed the next constraint very clearly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic commerce throughput is constrained by the weaker layer:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Throughput ≈ min(protocol reach, trust-rail maturity)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If trust rails lag, throughput stalls. Not because agents cannot click "buy," but because finance, risk, and support teams will cap exposure.&lt;/p&gt;

&lt;p&gt;In plain terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can win technical demos with protocol support.&lt;/li&gt;
&lt;li&gt;You win real GMV only when risk teams sign off on intent and liability paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The New Merchant Architecture (Practical Version)
&lt;/h2&gt;

&lt;p&gt;You do not need to boil the ocean this quarter. You do need to avoid shipping protocol support in isolation.&lt;/p&gt;

&lt;p&gt;Use this architecture split:&lt;/p&gt;

&lt;h3&gt;
  
  
  A) Discovery and Capability Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Maintain a valid UCP profile (&lt;code&gt;/.well-known/ucp&lt;/code&gt;) where relevant.&lt;/li&gt;
&lt;li&gt;Keep capability declarations synchronized with real endpoint behavior.&lt;/li&gt;
&lt;li&gt;Validate profile and endpoint health continuously (not manually before launch days).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B) Transaction Execution Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implement clean, deterministic checkout state handling.&lt;/li&gt;
&lt;li&gt;Preserve idempotency across agent retries.&lt;/li&gt;
&lt;li&gt;Log machine-readable failure reasons so agents can recover.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  C) Trust and Liability Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Record explicit intent artifacts for agent-initiated actions.&lt;/li&gt;
&lt;li&gt;Capture agent identity/registration context where available.&lt;/li&gt;
&lt;li&gt;Define dispute routing playbooks: agent error vs merchant error vs user error.&lt;/li&gt;
&lt;li&gt;Align payment credential handling with tokenized, scoped, revocable controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most teams currently invest heavily in A and B, then improvise C.&lt;br&gt;
This week's market signal suggests that C is now where winners and false starts will diverge.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 30-Day Implementation Plan You Can Actually Execute
&lt;/h2&gt;

&lt;p&gt;If your team is small, here is a realistic sequencing model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 1: Baseline Reach Integrity
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Validate UCP profile shape and endpoint availability.&lt;/li&gt;
&lt;li&gt;Confirm declared capabilities match production behavior.&lt;/li&gt;
&lt;li&gt;Patch obvious hygiene gaps (HTTPS, schema paths, key metadata).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Week 2: Checkout Determinism
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Add idempotency guards on create/update/complete flows.&lt;/li&gt;
&lt;li&gt;Normalize error codes for agent-readable recovery.&lt;/li&gt;
&lt;li&gt;Add end-to-end replay tests for interrupted flows.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Week 3: Trust Artifacts
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Define and store minimal intent evidence bundle.&lt;/li&gt;
&lt;li&gt;Capture agent/session identifiers in transaction metadata.&lt;/li&gt;
&lt;li&gt;Document what support can and cannot adjudicate with current logs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Week 4: Liability Readiness Review
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Run simulated dispute scenarios:

&lt;ul&gt;
&lt;li&gt;wrong color/variant selected by agent&lt;/li&gt;
&lt;li&gt;stale availability race&lt;/li&gt;
&lt;li&gt;canceled intent arriving after delayed authorization&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Confirm owner and fallback path for each failure mode.&lt;/li&gt;
&lt;li&gt;Update customer-facing policy language for autonomous purchases.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not "perfect security architecture."&lt;br&gt;
It is enough to move from experimental to operational.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cost of Ignoring the Trust Layer
&lt;/h2&gt;

&lt;p&gt;If you skip this shift and treat agentic commerce as protocol-only, you will usually see one of four outcomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;High discovery, low completion:&lt;/strong&gt; agents can find you but fail late in checkout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Completion spikes, dispute spikes:&lt;/strong&gt; operations spend explodes and leadership throttles rollout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent risk caps:&lt;/strong&gt; internal teams reduce allowed agent use-cases without product visibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channel fragmentation debt:&lt;/strong&gt; each ecosystem gets separate one-off fixes, no shared risk model.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In other words, engineering may report "integration complete" while finance reports "do not scale this yet."&lt;/p&gt;

&lt;h2&gt;
  
  
  Where UCPtools Fits (and Where It Doesn't)
&lt;/h2&gt;

&lt;p&gt;UCPtools helps with the &lt;strong&gt;readiness and validation side&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;profile and capability validation&lt;/li&gt;
&lt;li&gt;endpoint and schema checks&lt;/li&gt;
&lt;li&gt;implementation diagnostics you can run before shipping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; replace your policy, underwriting, or issuer agreements.&lt;/p&gt;

&lt;p&gt;But it does reduce one expensive failure class: shipping broken protocol posture and discovering it only after agents already route traffic.&lt;/p&gt;

&lt;p&gt;If you want a quick baseline, run your domain through the validator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ucptools.dev/validator?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai_commerce_for_developers&amp;amp;utm_content=risk_layer" rel="noopener noreferrer"&gt;https://ucptools.dev/validator?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai_commerce_for_developers&amp;amp;utm_content=risk_layer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then use the score as your Week 1 input for the 30-day plan above.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Do This Week
&lt;/h2&gt;

&lt;p&gt;If you are deciding where to spend engineering time in April, here is the short answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do not pick between UCP and ACP as an ideology war.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick based on your near-term customer channel mix.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do not treat protocol support as the finish line.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add intent and liability handling to the same roadmap.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do not wait for perfect standards convergence.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a clear internal trust model now, then adapt.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The teams that move fastest from pilot to durable volume will likely be the ones that connect these layers earliest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reach (UCP/ACP) + Execution (checkout reliability) + Trust (intent/liability rails).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was not obvious to most teams a month ago.&lt;br&gt;
After this week, it should be.&lt;/p&gt;




&lt;p&gt;UCP is an open standard driven by Google and Shopify. ACP is an open standard driven by OpenAI and Stripe. UCPtools is an independent community tool and is not affiliated with Google, Shopify, OpenAI, or Stripe.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>shopify</category>
    </item>
    <item>
      <title>BORME Corporate Acts as Structured Data: Comparing Your Options in 2026</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Wed, 15 Apr 2026 10:07:13 +0000</pubDate>
      <link>https://forem.com/ucptools/borme-corporate-acts-as-structured-data-comparing-your-options-in-2026-235o</link>
      <guid>https://forem.com/ucptools/borme-corporate-acts-as-structured-data-comparing-your-options-in-2026-235o</guid>
      <description>&lt;p&gt;Every business day, Spain's Boletin Oficial del Registro Mercantil (BORME) publishes hundreds of corporate acts: company incorporations, officer appointments and dismissals, capital changes, dissolutions, mergers, and insolvency proceedings. For compliance teams monitoring Spanish counterparties or B2B sales teams prospecting new incorporations, this data is essential.&lt;/p&gt;

&lt;p&gt;The problem: BORME publishes as PDFs. The official BOE API gives you PDF URLs but not the parsed content inside them.&lt;/p&gt;

&lt;p&gt;This article compares three options for getting structured BORME data, with code examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: LibreBOR (formerly LibreBORME)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; librebor.me&lt;br&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Free web interface, limited API behind Cloudflare&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Active — last confirmed updates February/March 2026&lt;/p&gt;

&lt;p&gt;LibreBOR is the spiritual successor to the original LibreBORME open-source project. It provides a searchable web interface for BORME data at librebor.me, where you can look up any company and see its historical BORME acts. It's free and well-structured.&lt;/p&gt;

&lt;p&gt;However, it comes with practical limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting and Cloudflare protection&lt;/strong&gt; make bulk programmatic access unreliable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No official API documentation&lt;/strong&gt; — the original LibreBORME had a documented API, but LibreBOR's API access is restricted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency on a single maintainer&lt;/strong&gt; — the original LibreBORME went offline in April 2025; while LibreBOR has been stable, there's no service-level guarantee&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Apify integration&lt;/strong&gt; — you can't schedule runs, set up webhooks, or pipe results into your existing data pipeline on Apify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LibreBOR is excellent for ad-hoc lookups. If you need to check one company's BORME history, use it. If you need to process 500 acts daily in a production pipeline, the rate limiting becomes a blocker.&lt;/p&gt;
&lt;h2&gt;
  
  
  Option 2: BORME Scraper Pro (spain-data-solutions on Apify)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; apify.com/spain-data-solutions/borme-scraper-pro&lt;br&gt;
&lt;strong&gt;Model:&lt;/strong&gt; $8/month platform fee + usage charges&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Active — 8 total users, 2 monthly active&lt;/p&gt;

&lt;p&gt;BORME Scraper Pro is a competing Apify actor that also parses BORME PDFs. It includes proxy rotation, province filtering, and claims 99.9% success rate. The developer renamed from startquicklabs and has been actively maintaining it.&lt;/p&gt;

&lt;p&gt;Pricing structure: a fixed $8/month platform fee plus per-usage charges. This makes economic sense if you're running daily BORME extractions at scale. For occasional use — say, pulling one week's BORME data for a due diligence project — the monthly commitment may not justify the cost.&lt;/p&gt;
&lt;h2&gt;
  
  
  Option 3: BORME Corporate Acts Parser (minute_contest on Apify)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; apify.com/minute_contest/borme-corporate-acts-scraper&lt;br&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Pay-per-use — $0.003 per result, no monthly fee&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Active — free tier friendly, HTTP-only (no Puppeteer)&lt;/p&gt;

&lt;p&gt;Our BORME actor takes a different approach: pure HTTP requests and PDF parsing with pdfjs-dist. No browser automation, no proxy required, no monthly fee. You pay $0.003 per corporate act extracted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetches the BORME Section A index from boe.es for your specified date&lt;/li&gt;
&lt;li&gt;Downloads the PDF files listed in the index&lt;/li&gt;
&lt;li&gt;Parses each PDF to extract structured corporate acts&lt;/li&gt;
&lt;li&gt;Returns JSON with act type, company name, NIF, province, and full details&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Input example:&lt;/strong&gt;&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;"date"&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-04-15"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"province"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Barcelona"&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;&lt;strong&gt;Output example:&lt;/strong&gt;&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;"date"&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-04-15"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"province"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Barcelona"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"bormeNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"89"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"actType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nombramientos"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"company"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EJEMPLO SOLUCIONES SL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nif"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"B12345678"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&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;"appointee"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Garcia Lopez, Maria"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Administrador único"&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="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;&lt;strong&gt;Running it via API:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/minute_contest~borme-corporate-acts-scraper/runs?token=YOUR_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"date": "2026-04-15"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Running it with the Python client:&lt;/strong&gt;&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_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;minute_contest/borme-corporate-acts-scraper&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;date&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;2026-04-15&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;province&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;Madrid&lt;/span&gt;&lt;span class="sh"&gt;"&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&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;actType&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&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;company&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&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;nif&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&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;&lt;strong&gt;Cost comparison for common use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Acts/Run&lt;/th&gt;
&lt;th&gt;BORME Scraper Pro&lt;/th&gt;
&lt;th&gt;Our BORME Parser&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Daily monitoring (1 province, 1 month)&lt;/td&gt;
&lt;td&gt;~1,500&lt;/td&gt;
&lt;td&gt;$8 + usage&lt;/td&gt;
&lt;td&gt;~$4.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off due diligence (1 day, all provinces)&lt;/td&gt;
&lt;td&gt;~500&lt;/td&gt;
&lt;td&gt;$8 + usage&lt;/td&gt;
&lt;td&gt;~$1.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarterly batch (3 months, 2 provinces)&lt;/td&gt;
&lt;td&gt;~9,000&lt;/td&gt;
&lt;td&gt;$8 + usage&lt;/td&gt;
&lt;td&gt;~$27.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the one-off and low-frequency use cases that most compliance teams and law firms run, pay-per-use is significantly cheaper. The break-even with BORME Scraper Pro's $8 monthly fee is around 2,600 acts per month — below that, pay-per-use wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  What BORME Data Looks Like
&lt;/h2&gt;

&lt;p&gt;BORME Section A publishes the following act types daily:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Constituciones&lt;/strong&gt; — new company incorporations (the goldmine for B2B prospecting)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nombramientos&lt;/strong&gt; — officer appointments (directors, administrators, secretaries)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ceses/Dimisiones&lt;/strong&gt; — officer dismissals and resignations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modificaciones&lt;/strong&gt; — company statute changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aumentos de capital / Reducciones de capital&lt;/strong&gt; — capital increases and reductions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disoluciones&lt;/strong&gt; — company dissolutions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fusiones / Escisiones&lt;/strong&gt; — mergers and spin-offs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declaraciones de unicidad&lt;/strong&gt; — single-member company declarations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revocaciones de poderes&lt;/strong&gt; — revocations of powers of attorney&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Situaciones concursales&lt;/strong&gt; — insolvency proceedings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each act type is extracted with its specific fields. For example, a "Constitución" includes company name, NIF, registered address, initial capital, and appointed officers. A "Cese" includes the departing officer's name and role.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Workflow: Monitoring New Spanish Incorporations
&lt;/h2&gt;

&lt;p&gt;A common use case: your B2B sales team wants daily alerts when new companies are incorporated in your target provinces.&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&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_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Run BORME parser for today
&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;minute_contest/borme-corporate-acts-scraper&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;date&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;2026-04-15&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Filter for new incorporations only
&lt;/span&gt;&lt;span class="n"&gt;new_companies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;item&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;actType&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;Constituciones&lt;/span&gt;&lt;span class="sh"&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;company&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;new_companies&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NEW: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;company&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (NIF: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;nif&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Push to your CRM, Slack, or email pipeline
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set this up as a scheduled run on Apify (daily at 10:00 CET, after BORME publishes), add a webhook to push results to your Slack or CRM, and you have a fully automated new-business monitoring system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;LibreBOR&lt;/th&gt;
&lt;th&gt;BORME Scraper Pro&lt;/th&gt;
&lt;th&gt;Our BORME Parser&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$8/month + usage&lt;/td&gt;
&lt;td&gt;$0.003/act, no monthly fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk access&lt;/td&gt;
&lt;td&gt;Rate limited&lt;/td&gt;
&lt;td&gt;Yes (proxy rotation)&lt;/td&gt;
&lt;td&gt;Yes (HTTP-only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apify integration&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;No ($8 minimum)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxy required&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Yes (included)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance risk&lt;/td&gt;
&lt;td&gt;Single maintainer&lt;/td&gt;
&lt;td&gt;Developer-supported&lt;/td&gt;
&lt;td&gt;Developer-supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Ad-hoc lookups&lt;/td&gt;
&lt;td&gt;Daily high-volume pipelines&lt;/td&gt;
&lt;td&gt;Occasional/batch processing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Choose based on your volume and frequency. LibreBOR for quick manual lookups. BORME Scraper Pro if you're running thousands of acts daily and can justify the monthly commitment. Our parser for everything in between — project-based due diligence, periodic compliance checks, and batch processing without a recurring fee.&lt;/p&gt;

</description>
      <category>spain</category>
      <category>compliance</category>
      <category>webscraping</category>
      <category>api</category>
    </item>
    <item>
      <title>European Business Data Suite: 14 Actors, 4 Countries, One Platform</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Wed, 15 Apr 2026 10:07:10 +0000</pubDate>
      <link>https://forem.com/ucptools/european-business-data-suite-14-actors-4-countries-one-platform-1kp0</link>
      <guid>https://forem.com/ucptools/european-business-data-suite-14-actors-4-countries-one-platform-1kp0</guid>
      <description>&lt;p&gt;Government registries across Europe share one thing in common: they have no public API. Whether you need Polish company financials from KRS, Spanish corporate acts from BORME, Austrian insolvency data from Ediktsdatei, or French director networks from Societe.com — you're stuck with manual portal searches. One query at a time.&lt;/p&gt;

&lt;p&gt;This article maps out 14 Apify actors that give you programmatic access to government and semi-official business data sources across 4 European countries. Every actor returns structured JSON. Every actor is pay-per-use with no subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Government Portals Without APIs
&lt;/h2&gt;

&lt;p&gt;European business registries were built for citizens, not developers. Here's what that means in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Poland's eKRS portal&lt;/strong&gt; requires navigating through forms, solving captchas, and downloading individual PDF/XML files for each company's financial statements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spain's BORME&lt;/strong&gt; publishes 500+ corporate acts daily as PDFs — the official API gives you PDF URLs but not the parsed content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Austria's Ediktsdatei&lt;/strong&gt; insolvency register requires an IWG license from the Ministry of Justice for API access — a bureaucratic process most companies can't justify&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;France's Societe.com&lt;/strong&gt; aggregates INSEE, INPI, and BODACC data with director networks and financials, but has no API — you'd need to query 3 separate government APIs and join the data yourself&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poland's CRBR&lt;/strong&gt; beneficial owner register has no bulk API — you verify one NIP at a time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poland's EKW&lt;/strong&gt; land registry uses an encrypted API endpoint and captcha, making it one of the hardest registries to automate in Europe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a compliance officer running due diligence on 200 counterparties across multiple countries, this means days of manual work. For a developer building a KYC pipeline, it means writing fragile scrapers that break when portals change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Suite: 14 Actors, 4 Countries
&lt;/h2&gt;

&lt;p&gt;All actors run on Apify's serverless platform. You get an API endpoint, scheduled runs, webhooks, and structured JSON output. No infrastructure to manage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Poland (9 Actors)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Registry&lt;/th&gt;
&lt;th&gt;Price/Result&lt;/th&gt;
&lt;th&gt;Key Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/poland-krs-financial-scraper" rel="noopener noreferrer"&gt;KRS Financial Statements&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;eKRS (ekrs.ms.gov.pl)&lt;/td&gt;
&lt;td&gt;$0.025&lt;/td&gt;
&lt;td&gt;Balance sheets, income statements from official filings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/ekw-ksiegi-wieczyste-scraper" rel="noopener noreferrer"&gt;EKW Land Registry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;EKW (ekw.ms.gov.pl)&lt;/td&gt;
&lt;td&gt;$0.04&lt;/td&gt;
&lt;td&gt;Property ownership, mortgages, easements across 352 courts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/crbr-beneficial-owners-scraper" rel="noopener noreferrer"&gt;CRBR Beneficial Owners&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CRBR (crbr.podatki.gov.pl)&lt;/td&gt;
&lt;td&gt;$0.03&lt;/td&gt;
&lt;td&gt;UBO verification — names, citizenship, ownership %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/krz-debtor-scraper" rel="noopener noreferrer"&gt;KRZ Debtor Registry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;KRZ (krz.ms.gov.pl)&lt;/td&gt;
&lt;td&gt;$0.025&lt;/td&gt;
&lt;td&gt;Bankruptcy and debt screening — 9 search modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/uokik-clauses-scraper" rel="noopener noreferrer"&gt;UOKiK Abusive Clauses&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;UOKiK register&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;Contract compliance against 7,500+ banned clauses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/msig-scraper" rel="noopener noreferrer"&gt;MSiG Court Gazette&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MSiG (ems.ms.gov.pl)&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;20+ years of bankruptcy, liquidation, merger announcements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/knf-registry-scraper" rel="noopener noreferrer"&gt;KNF Financial Registry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;KNF (3 registries)&lt;/td&gt;
&lt;td&gt;$0.006&lt;/td&gt;
&lt;td&gt;Licensed financial institution verification — 75,000+ entities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/bdo-waste-registry-scraper" rel="noopener noreferrer"&gt;BDO Waste Registry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;BDO (bdo.mos.gov.pl)&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Waste contractor verification for ESG/CSRD compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/krs-fullnames-scraper" rel="noopener noreferrer"&gt;KRS Board Members&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;KRS PDF extracts&lt;/td&gt;
&lt;td&gt;$0.035&lt;/td&gt;
&lt;td&gt;Full board member names — the official API censors them&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Technical note on KRS Board Members:&lt;/strong&gt; The official KRS1 API returns person names as "L******" (censored). This actor downloads the public PDF extract from the government portal, which contains full names. It's the only way to get non-anonymized Polish company director data programmatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spain (2 Actors)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Price/Result&lt;/th&gt;
&lt;th&gt;Key Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/borme-corporate-acts-scraper" rel="noopener noreferrer"&gt;BORME Corporate Acts&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;BORME via boe.es&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;Daily corporate acts — incorporations, appointments, capital changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/spain-company-directory-scraper" rel="noopener noreferrer"&gt;Spain Company Directory&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OpenData Registradores&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Company profiles with NIF, officers, CNAE codes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;BORME&lt;/strong&gt; parses the official PDFs published daily by Spain's Registro Mercantil. It extracts structured data from 500+ daily corporate acts: new company incorporations, officer appointments and dismissals, capital increases and reductions, dissolutions and mergers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spain Company Directory&lt;/strong&gt; scrapes the official Colegio de Registradores open data portal (opendata.registradores.org), which launched in 2024 but has no public API. It returns NIF, legal form, registered officers, CNAE industry codes, address, and status. Requires residential proxy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Austria (2 Actors)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Price/Result&lt;/th&gt;
&lt;th&gt;Key Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/austria-ediktsdatei-scraper" rel="noopener noreferrer"&gt;Ediktsdatei Insolvency&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;edikte.justiz.gv.at&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Bankruptcies, reorganizations, debt settlements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/wko-business-directory-scraper" rel="noopener noreferrer"&gt;WKO Business Directory&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;firmen.wko.at&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;620,000+ businesses with phone, email, website&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Ediktsdatei&lt;/strong&gt; is the only Apify actor providing Austrian insolvency data without requiring the IWG government license. The official API at justizonline.gv.at requires "ID Austria" authentication and bureaucratic approval — this actor scrapes the public HTML pages instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WKO Firmen A-Z&lt;/strong&gt; is the Austrian Chamber of Commerce's official business directory. No API exists. This actor extracts company name, address, phone, email, website, and industry classification from 620,000+ registered businesses. Useful for B2B lead generation, market entry research, and supplier discovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  France (1 Actor)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Price/Result&lt;/th&gt;
&lt;th&gt;Key Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apify.com/minute_contest/societe-com-scraper" rel="noopener noreferrer"&gt;Societe.com Company Data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Societe.com&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;Directors, financials, shareholders in one profile&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Societe.com&lt;/strong&gt; aggregates data from INSEE (SIREN/SIRET), INPI (RNE), and BODACC into combined company profiles. While individual government APIs exist (API Sirene, INPI RNE), none provide the combined director-financial-shareholder profile. This actor gives you directors with roles, simplified financials (revenue, net result), shareholders, subsidiaries, NAF code, and legal form — all in a single API call. Requires residential proxy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Border Due Diligence Workflow
&lt;/h2&gt;

&lt;p&gt;Here's a concrete example: your compliance team needs to screen a counterparty that operates across Poland, Spain, and Austria.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1: Poland KRS Financial Statements
  → Pull their latest balance sheet and income statement

Step 2: Poland CRBR Beneficial Owners  
  → Identify all beneficial owners with ownership percentages

Step 3: Poland KRZ Debtor Registry
  → Check for bankruptcy proceedings or outstanding debts

Step 4: Spain BORME Corporate Acts
  → Check for recent officer changes or capital restructuring at their Spanish subsidiary

Step 5: Austria Ediktsdatei Insolvency
  → Screen for insolvency proceedings at their Austrian branch

Step 6: Cross-reference
  → Join the data to build a complete risk profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running this manually across 5 different portals with different interfaces, languages, and search capabilities would take hours per counterparty. With the actors above, you can automate the entire pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start Example
&lt;/h2&gt;

&lt;p&gt;Here's how to call any actor via the Apify API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Example: Run BORME scraper for a specific date&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/minute_contest~borme-corporate-acts-scraper/runs?token=YOUR_API_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "date": "2026-04-15",
    "province": "Madrid"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use the Apify Python client:&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_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Run KRS Financial Statements scraper
&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;minute_contest/poland-krs-financial-scraper&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;companyIds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;0000012345&lt;/span&gt;&lt;span class="sh"&gt;"&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company: &lt;/span&gt;&lt;span class="si"&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;companyName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total assets: &lt;/span&gt;&lt;span class="si"&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;financialData&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;totalAssets&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue: &lt;/span&gt;&lt;span class="si"&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;financialData&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;revenue&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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;h2&gt;
  
  
  Pricing: Pay-Per-Use vs Subscriptions
&lt;/h2&gt;

&lt;p&gt;Traditional European business data providers (MGBI, Bisnode/D&amp;amp;B, Axesor) operate on subscription models — typically hundreds or thousands of euros per month. That makes sense if you're running thousands of queries daily. But for most compliance teams, law firms, and due diligence analysts, usage is sporadic: batch checks before a deal, periodic counterparty reviews, one-off investigations.&lt;/p&gt;

&lt;p&gt;Pay-per-use pricing means you pay only for what you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single KRS financial statement costs $0.025&lt;/li&gt;
&lt;li&gt;A BORME day's corporate acts cost $0.003 per act&lt;/li&gt;
&lt;li&gt;A WKO business lookup costs $0.003&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Running 100 KRS financial checks costs $2.50. Running 1,000 BORME act extractions costs $3.00. No monthly commitment, no minimums.&lt;/p&gt;

&lt;p&gt;Apify's tiered pricing also reduces the per-result cost at higher volumes (GOLD and above), so production pipelines get cheaper as you scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Notes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Free-tier friendly actors&lt;/strong&gt; (no proxy needed, run on Apify free plan):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KRS Financial Statements&lt;/li&gt;
&lt;li&gt;CRBR Beneficial Owners&lt;/li&gt;
&lt;li&gt;KRZ Debtor Registry&lt;/li&gt;
&lt;li&gt;UOKiK Abusive Clauses&lt;/li&gt;
&lt;li&gt;MSiG Court Gazette&lt;/li&gt;
&lt;li&gt;KNF Financial Registry&lt;/li&gt;
&lt;li&gt;BORME Corporate Acts&lt;/li&gt;
&lt;li&gt;Ediktsdatei Insolvency&lt;/li&gt;
&lt;li&gt;WKO Business Directory (free tier needs higher memory setting)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Requires residential proxy&lt;/strong&gt; (paid Apify plan):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EKW Land Registry (encrypted API + captcha)&lt;/li&gt;
&lt;li&gt;Spain Company Directory (F5/Volterra WAF)&lt;/li&gt;
&lt;li&gt;Societe.com Company Data (anti-bot protection)&lt;/li&gt;
&lt;li&gt;BDO Waste Registry (React SPA with stealth detection)&lt;/li&gt;
&lt;li&gt;KRS Board Members (PDF download requires proxy rotation)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which Actors Should You Start With?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For compliance/KYC teams:&lt;/strong&gt; CRBR Beneficial Owners + KRZ Debtor Registry + KRS Financial Statements. These three cover the core Polish due diligence workflow: who owns it, are they in debt, and are they financially stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For B2B sales teams:&lt;/strong&gt; WKO Business Directory (620K Austrian contacts) + BORME Corporate Acts (daily Spanish new incorporations) + KRS Board Members (Polish company directors with full names).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For credit risk analysts:&lt;/strong&gt; Ediktsdatei Insolvency (Austrian bankruptcies) + KRZ Debtor Registry (Polish debtors) + KRS Financial Statements (Polish financials).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For M&amp;amp;A and competitive intelligence:&lt;/strong&gt; Societe.com (French director networks) + BORME Corporate Acts (Spanish corporate changes) + KRS Financial Statements (Polish financials).&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;These 14 actors exist because European government registries systematically lack public APIs. If you need programmatic access to business data from Poland, Spain, Austria, or France, and you don't want to build and maintain fragile scrapers yourself, this suite covers the most commonly needed sources.&lt;/p&gt;

&lt;p&gt;Every actor links to its Apify page with full documentation, input schemas, and example outputs. Try any of them with the Apify free tier — most actors work without a paid plan.&lt;/p&gt;

</description>
      <category>compliance</category>
      <category>webscraping</category>
      <category>api</category>
      <category>europe</category>
    </item>
    <item>
      <title>UCP vs ACP Payment Architecture: Why Both Protocols Matter for AI Commerce</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Wed, 15 Apr 2026 09:00:42 +0000</pubDate>
      <link>https://forem.com/ucptools/ucp-vs-acp-payment-architecture-why-both-protocols-matter-for-ai-commerce-10d4</link>
      <guid>https://forem.com/ucptools/ucp-vs-acp-payment-architecture-why-both-protocols-matter-for-ai-commerce-10d4</guid>
      <description>&lt;h2&gt;
  
  
  UCP vs ACP Payment Architecture: Why Both Protocols Matter for AI Commerce
&lt;/h2&gt;

&lt;p&gt;In the realm of AI-driven commerce, two protocols have emerged as frontrunners in enabling seamless transactions between consumers and merchants: the Universal Commerce Protocol (UCP) and the Agentic Commerce Protocol (ACP). Both protocols aim to bridge the gap between AI agents and commerce platforms, yet their approaches diverge in several key ways. This article will delve into these differences, highlighting when and why you might choose one over the other.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding UCP and ACP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Universal Commerce Protocol (UCP):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developed with a focus on interconnectivity and standardized interactions.&lt;/li&gt;
&lt;li&gt;Establishes a "trust triangle" involving consumers, merchants, and AI agents.&lt;/li&gt;
&lt;li&gt;Leverages a decentralized manifest system for merchant discovery, ensuring flexible integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Agentic Commerce Protocol (ACP):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prioritizes rapid deployment and ease of use.&lt;/li&gt;
&lt;li&gt;Utilizes a delegated payment model, allowing agents to act as intermediaries.&lt;/li&gt;
&lt;li&gt;Supports both centralized and decentralized discovery mechanisms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Payment Credential Flow Differences
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UCP&lt;/strong&gt;: Centers around direct credential exchanges with robust verification steps, ensuring high security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACP&lt;/strong&gt;: Employs a streamlined delegated approach, where agents facilitate transactions without directly handling sensitive credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trust Triangle vs Delegated Payment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UCP Trust Triangle&lt;/strong&gt;: Creates a robust ecosystem where merchants and consumers can interact through verified AI agents. This approach emphasizes security and reliability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACP Delegated Payment&lt;/strong&gt;: Facilitates quicker transactions by reducing the steps needed for verification, making it ideal for environments where speed is more critical than comprehensive checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Use Which Protocol?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UCP&lt;/strong&gt;: Best suited for environments where security and interoperability are paramount. It's the protocol of choice for platforms needing a robust verification system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACP&lt;/strong&gt;: Optimal for scenarios requiring rapid transaction speeds and minimal friction in onboarding new merchants or consumers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agorio: Dual-Protocol Support
&lt;/h3&gt;

&lt;p&gt;Agorio stands out by offering dual-protocol support, seamlessly integrating both UCP and ACP to provide flexible options for developers. Whether building for security-focused platforms or speed-intensive environments, Agorio's SDK ensures compatibility and enhances the AI-commerce interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In the evolving landscape of AI commerce, the choice between UCP and ACP largely depends on specific business needs. While UCP offers rigorous security and interoperability, ACP provides speed and ease of use. By understanding and leveraging the strengths of both protocols, developers can create more effective and versatile AI-driven commerce solutions.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>ecommerce</category>
      <category>opensource</category>
    </item>
    <item>
      <title>UOKiK Scraper: Polish Banned Contract Clauses</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:53:55 +0000</pubDate>
      <link>https://forem.com/ucptools/uokik-scraper-polish-banned-contract-clauses-3m21</link>
      <guid>https://forem.com/ucptools/uokik-scraper-polish-banned-contract-clauses-3m21</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UOKiK&lt;/strong&gt; (Urzad Ochrony Konkurencji i Konsumentow) maintains a registry of &lt;strong&gt;7,500+ contract clauses&lt;/strong&gt; that Polish courts have ruled abusive&lt;/li&gt;
&lt;li&gt;If your business uses standard contracts in Poland, you should check this registry - using a banned clause can lead to fines and lawsuits&lt;/li&gt;
&lt;li&gt;No API exists for the registry&lt;/li&gt;
&lt;li&gt;I built an &lt;a href="https://apify.com/minute_contest/uokik-clauses-scraper" rel="noopener noreferrer"&gt;Apify actor&lt;/a&gt; that searches the registry and returns structured JSON for $0.008 per clause&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the UOKiK Abusive Clauses Registry Matters
&lt;/h2&gt;

&lt;p&gt;Poland's consumer protection framework is built on a simple but powerful rule: contract clauses that the Court of Competition and Consumer Protection (SOKiK) has declared abusive are void - automatically, regardless of whether the consumer signed the agreement. The legal basis is the Act on Competition and Consumer Protection (ustawa o ochronie konkurencji i konsumentow), which gives UOKiK enforcement authority over contract fairness across all industries.&lt;/p&gt;

&lt;p&gt;SOKiK rulings are published in the Register of Prohibited Contractual Clauses (Rejestr Klauzul Niedozwolonych). Once a clause appears in this registry, any business using substantially identical language in their standard terms risks enforcement action from UOKiK, class-action lawsuits from consumer advocacy organizations, and individual court challenges from customers.&lt;/p&gt;

&lt;p&gt;The registry now contains over 7,500 clauses accumulated across nearly two decades of court decisions. Industries with the highest clause counts include banking, insurance, telecommunications, e-commerce, and real estate - essentially any sector that relies on standard-form contracts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why UOKiK Registry Has No API
&lt;/h2&gt;

&lt;p&gt;The UOKiK registry at &lt;code&gt;rejestr.uokik.gov.pl&lt;/code&gt; is a legacy government portal. It offers a basic keyword search form with paginated results, but there are no REST endpoints, no bulk export, and no structured data format. Each clause page must be loaded individually to get the full ruling text, defendant name, industry classification, and SOKiK case number.&lt;/p&gt;

&lt;p&gt;For law firms reviewing contract language, e-commerce companies updating terms of service, or compliance teams running periodic audits - manual search is impractical when you need to check dozens of clauses or monitor the registry for new rulings in your industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  UOKiK Clause Data: What You Get
&lt;/h2&gt;

&lt;p&gt;The scraper returns structured JSON for each clause with the following fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;number&lt;/strong&gt; - registry entry number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;text&lt;/strong&gt; - the full text of the banned clause&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;defendant&lt;/strong&gt; - the company that was ruled against&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;industry&lt;/strong&gt; - business sector classification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;caseNumber&lt;/strong&gt; - SOKiK court case reference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;entryDate&lt;/strong&gt; - when the clause was added to the registry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can search by defendant name, by industry, or by keyword within the clause text. The actor handles pagination automatically and returns all matching results up to your configured limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use the UOKiK Abusive Clauses Scraper
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&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_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Search by defendant company name
&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;minute_contest/uokik-clauses-scraper&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;defendant&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;mBank&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;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&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;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;list_items&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;clause&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Clause #&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;...&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Defendant: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;defendant&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Industry: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;industry&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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;h3&gt;
  
  
  JavaScript (Node.js)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;minute_contest/uokik-clauses-scraper&lt;/span&gt;&lt;span class="dl"&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="na"&gt;defendant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mBank&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxResults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clause&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`#&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;...`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Industry: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;industry&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Use Case: E-Commerce Terms of Service Audit
&lt;/h2&gt;

&lt;p&gt;A mid-sized Polish e-commerce company is launching a new return policy. Their legal team needs to verify that none of the proposed clauses match entries in the UOKiK registry - particularly clauses about limiting liability for delivery delays, restricting refund windows, and imposing penalty fees for returns.&lt;/p&gt;

&lt;p&gt;Using the scraper, they search for clauses in the "handel elektroniczny" (e-commerce) industry classification. The actor returns 200+ banned clauses from the sector. The legal team cross-references their draft policy against the results, identifies two clauses that are substantially similar to banned entries, and rewrites them before launch. Without automated access, this review would have taken a full day of manual searching. With the scraper, it takes under 10 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Needs the UOKiK Scraper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Law firms&lt;/strong&gt; - check proposed contract language against banned clauses before signing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E-commerce companies&lt;/strong&gt; - ensure terms of service and return policies don't contain abusive clauses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insurance companies&lt;/strong&gt; - review policy terms against historical rulings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Banks and fintech&lt;/strong&gt; - validate loan agreements and fee schedules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance teams&lt;/strong&gt; - periodic audit of standard contracts against the full registry&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consumer rights organizations&lt;/strong&gt; - research and advocacy using structured data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manual search on UOKiK website&lt;/td&gt;
&lt;td&gt;Free (slow, no export)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;This actor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$3 per 1,000 clauses&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Free $5 Apify credits on signup = ~1,500 clause lookups at no cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I search the UOKiK registry by industry sector?
&lt;/h3&gt;

&lt;p&gt;Yes. The actor supports filtering by industry classification. This is useful for compliance teams that want to audit all banned clauses relevant to their specific sector - for example, retrieving all clauses from banking, insurance, or e-commerce.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are UOKiK banned clauses legally binding for all companies?
&lt;/h3&gt;

&lt;p&gt;Yes. Once SOKiK rules a clause abusive and it enters the registry, using substantially identical language in any standard-form contract is prohibited across the entire market - not just for the defendant company. UOKiK can impose fines of up to 10% of annual revenue for violations.&lt;/p&gt;

&lt;h3&gt;
  
  
  How often is the UOKiK registry updated?
&lt;/h3&gt;

&lt;p&gt;The registry is updated as new SOKiK rulings are issued. New clauses are added regularly, which is why periodic monitoring is important for compliance teams. The scraper lets you automate this by running scheduled searches for new entries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/minute_contest/uokik-clauses-scraper" rel="noopener noreferrer"&gt;apify.com/minute_contest/uokik-clauses-scraper&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://dev.to/ucptools/series/polish-business-data-apis"&gt;Polish Business Data APIs&lt;/a&gt; series covering programmatic access to Polish government registries.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
    <item>
      <title>MSiG Scraper: Monitor Sądowy od 2001 Roku</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:45:18 +0000</pubDate>
      <link>https://forem.com/ucptools/msig-scraper-monitor-sadowy-od-2001-roku-1o4d</link>
      <guid>https://forem.com/ucptools/msig-scraper-monitor-sadowy-od-2001-roku-1o4d</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MSiG (Monitor Sądowy i Gospodarczy)&lt;/strong&gt; to oficjalny dziennik sądowy publikowany codziennie od 2001 roku&lt;/li&gt;
&lt;li&gt;Zawiera &lt;strong&gt;każde zgłoszenie upadłości, likwidacji, restrukturyzacji i zmianę w KRS&lt;/strong&gt; z ponad 20 lat&lt;/li&gt;
&lt;li&gt;Portal rządowy nie ma oficjalnego API - ale &lt;strong&gt;nieudokumentowany endpoint REST&lt;/strong&gt; istnieje za frontendem jQuery DataTables&lt;/li&gt;
&lt;li&gt;Zbudowałem &lt;a href="https://apify.com/minute_contest/msig-scraper" rel="noopener noreferrer"&gt;aktora na Apify&lt;/a&gt;, który odpytuje API bezpośrednio i zwraca JSON za $0.01 za wynik&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Czym jest MSiG i dlaczego ma znaczenie dla wywiadu biznesowego
&lt;/h2&gt;

&lt;p&gt;MSiG - Monitor Sądowy i Gospodarczy - to polski odpowiednik dziennika sądowego. Publikowany przez Ministerstwo Sprawiedliwości od 2001 roku, jest autorytatywnym źródłem prawnym zdarzeń korporacyjnych w Polsce. Każde otwarcie postępowania upadłościowego, zatwierdzenie planu restrukturyzacji, zarządzenie likwidacji, zmiana w KRS (Krajowy Rejestr Sądowy) - jest publikowane w MSiG.&lt;/p&gt;

&lt;p&gt;To czyni MSiG jednym z najcenniejszych zbiorów danych dla każdego zajmującego się polskim wywiadem biznesowym. Archiwum obejmuje ponad dwie dekady codziennych publikacji i setki tysięcy ogłoszeń. Każda upadłość w Polsce od 2001 roku jest tutaj. Każda zmiana w zarządzie, podwyższenie kapitału, fuzja - opublikowana.&lt;/p&gt;

&lt;p&gt;Dla każdego w ryzyku kredytowym, windykacji, usługach prawnych lub wywiadzie konkurencyjnym, monitorowanie MSiG jest niezbędne. Ale portal na &lt;code&gt;wyszukiwarka-msig.ms.gov.pl&lt;/code&gt; jest zaprojektowany do ręcznego wyszukiwania:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jedna firma na raz&lt;/li&gt;
&lt;li&gt;Wyniki w paginowanym HTML&lt;/li&gt;
&lt;li&gt;Brak eksportu&lt;/li&gt;
&lt;li&gt;Brak dokumentacji API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jeśli musisz monitorować setki lub tysiące firm albo analizować historyczne trendy niewypłacalności, podejście ręczne się nie skaluje.&lt;/p&gt;

&lt;h2&gt;
  
  
  MSiG monitor sądowy scraper: jak działa ukryte API
&lt;/h2&gt;

&lt;p&gt;Portal MSiG używa jQuery DataTables z REST API pod spodem, które akceptuje parametry wyszukiwania JSON i zwraca ustrukturyzowane dane.&lt;/p&gt;

&lt;p&gt;Dwa ciekawe szczegoly techniczne:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Dynamiczne rozwiazywanie URL API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bazowy URL API nie jest zahardcodowany - jest pobierany w runtime z dedykowanego endpointu (&lt;code&gt;home/getapiurl&lt;/code&gt;). Oznacza to, że rząd może przenieść API bez zmian we frontendzie. Scraper obsługuje to, najpierw rozwiązując aktualny URL API przed wykonaniem jakichkolwiek zapytań.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Literowka w produkcyjnym API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Endpoint do pełnego tekstu to &lt;code&gt;/Monitor/Detalis&lt;/code&gt; - tak, "Detalis" zamiast "Details". Ta literówka działa w rządowym API od lat. Scraper używa błędnego URL, ponieważ to właśnie on działa.&lt;/p&gt;

&lt;p&gt;Endpoint wyszukiwania &lt;code&gt;/Monitor/Search&lt;/code&gt; akceptuje zakresy dat, nazwy podmiotów, numery KRS/NIP, sygnatury spraw i wyszukiwanie pełnotekstowe w treści ogłoszeń. Wyniki są zwracane jako JSON z metadanymi (daty publikacji, numery monitora, klasyfikacja rozdziałów) i opcjonalnie pełnym tekstem każdego ogłoszenia.&lt;/p&gt;

&lt;p&gt;Pobieranie pełnego tekstu to oddzielne wywołanie API na każde ogłoszenie. Dla dużych zbiorów wyników oznacza to wiele requestów. Aktor grupuje je efektywnie i obsługuje limitowanie ze strony serwerów rządowych.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak używać MSiG monitor sądowy scrapera
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&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_API_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;minute_contest/msig-scraper&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;dateFrom&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;2026-01-01&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;dateTo&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;2026-03-31&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;searchType&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;A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# A = ogłoszenia, B = wpisy KRS
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;entityName&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;Getin&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;fetchDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;# dołącz pełny tekst ogłoszenia
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&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;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;list_items&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;entityName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chapterName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Sygnatura: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;signatureOfCase&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Data publikacji: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dateOfPublication&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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;h3&gt;
  
  
  JavaScript (Node.js)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;minute_contest/msig-scraper&lt;/span&gt;&lt;span class="dl"&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="na"&gt;dateFrom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2026-01-01&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dateTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2026-03-31&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;searchType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;entityName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Getin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fetchDetails&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxResults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entityName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chapterName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Sygnatura: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signatureOfCase&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Dane z MSiG scrapera: co dostajesz
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pole&lt;/th&gt;
&lt;th&gt;Przykład&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;entityName&lt;/td&gt;
&lt;td&gt;GETIN NOBLE BANK S.A. W UPADŁOŚCI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;krs&lt;/td&gt;
&lt;td&gt;0000019193&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nip&lt;/td&gt;
&lt;td&gt;1080000568&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;signatureOfCase&lt;/td&gt;
&lt;td&gt;XVIII GUp 25/23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;chapterName&lt;/td&gt;
&lt;td&gt;Postępowania upadłościowe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monitorNumber&lt;/td&gt;
&lt;td&gt;MSiG 48/2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dateOfPublication&lt;/td&gt;
&lt;td&gt;2026-03-11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;numberOfNotice&lt;/td&gt;
&lt;td&gt;12345&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;textInPosition&lt;/td&gt;
&lt;td&gt;Nagłówek ogłoszenia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;textInBody&lt;/td&gt;
&lt;td&gt;Pełny tekst ogłoszenia sądowego&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  MSiG monitor sądowy: tryby wyszukiwania
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;searchType&lt;/th&gt;
&lt;th&gt;Co obejmuje&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A (Ogłoszenia)&lt;/td&gt;
&lt;td&gt;Upadłości, restrukturyzacje, likwidacje&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B (Wpisy KRS)&lt;/td&gt;
&lt;td&gt;Nowe rejestracje, zmiany w zarządzie, podwyższenia kapitału, połączenia&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Można łączyć filtry: zakres dat + nazwa podmiotu + NIP + sygnatura sprawy + wyszukiwanie pełnotekstowe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Przykład z praktyki: monitoring portfela ryzyka kredytowego
&lt;/h2&gt;

&lt;p&gt;Firma faktoringowa zarządza portfelem 2000 polskich klientów biznesowych. Co kwartał ich zespół ryzyka musi sprawdzić, czy któryś z klientów złożył wniosek o upadłość, wszedł w restrukturyzację lub miał istotne zmiany w KRS.&lt;/p&gt;

&lt;p&gt;Bez automatyzacji analityk otwiera portal MSiG, wpisuje nazwę każdej firmy, przegląda wyniki i dokumentuje ustalenia. Przy 3-5 minutach na firmę, screening całego portfela zajmuje 100-170 godzin - około miesiąca pracy jednej osoby.&lt;/p&gt;

&lt;p&gt;Z MSiG Monitor Sądowy scraperem ten sam zespół uruchamia zaplanowane zadanie, które odpytuje aktora numerem KRS lub NIP każdego klienta, z filtrem na ostatnie 90 dni. Wyniki trafiają bezpośrednio do systemu zarządzania ryzykiem. Każde nowe zgłoszenie upadłości lub ogłoszenie restrukturyzacji uruchamia automatyczny przegląd.&lt;/p&gt;

&lt;p&gt;To redukuje screening portfela z tygodni do minut. Co ważniejsze, umożliwia ciągły monitoring zamiast okresowych kontroli - wychwytując problemy w ciągu dni od publikacji, a nie kwartałów.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kto potrzebuje danych z MSiG Monitora Sądowego
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring upadłości&lt;/strong&gt; - alerty gdy firmy z Twojego portfela składają wniosek o upadłość&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windykacja&lt;/strong&gt; - śledzenie postępowań dotyczących dłużników&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ryzyko kredytowe&lt;/strong&gt; - screening nowych klientów pod kątem historii niewypłacalności&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Badania prawne&lt;/strong&gt; - wyszukiwanie ogłoszeń sądowych po sygnaturze sprawy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analiza rynku&lt;/strong&gt; - trendy niewypłacalności według sektora lub regionu z 20+ lat danych&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring zmian KRS&lt;/strong&gt; - wykrywanie zmian w zarządach, podwyższeń kapitału, fuzji&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Czy mogę szukać po numerze KRS lub NIP zamiast po nazwie firmy?
&lt;/h3&gt;

&lt;p&gt;Tak. Aktor akceptuje &lt;code&gt;entityName&lt;/code&gt;, &lt;code&gt;krs&lt;/code&gt;, &lt;code&gt;nip&lt;/code&gt; i &lt;code&gt;signatureOfCase&lt;/code&gt; jako parametry wyszukiwania. Można użyć dowolnej kombinacji. Wyszukiwanie po KRS i NIP jest dokładne (exact match) i jest najbardziej niezawodnym sposobem na znalezienie ogłoszeń dla konkretnej firmy, ponieważ nazwy firm mogą się różnić między zgłoszeniami (skróty, sufiksy formy prawnej itp.).&lt;/p&gt;

&lt;h3&gt;
  
  
  Co robi parametr &lt;code&gt;fetchDetails&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Gdy &lt;code&gt;fetchDetails&lt;/code&gt; jest ustawiony na &lt;code&gt;true&lt;/code&gt;, aktor wykonuje dodatkowe wywołanie API dla każdego wyniku, aby pobrać pełny tekst ogłoszenia sądowego (&lt;code&gt;textInBody&lt;/code&gt;). Bez niego dostajesz tylko metadane (nazwa podmiotu, daty, rozdział, sygnatura). Włącz go, gdy potrzebujesz faktycznej treści ogłoszeń - na przykład aby wydobyć listy wierzycieli lub warunki restrukturyzacji. Wyłącz dla szybszych wyników, gdy interesuje Cię tylko to, czy ogłoszenie istnieje.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jak daleko wstecz sięga archiwum MSiG?
&lt;/h3&gt;

&lt;p&gt;Cyfrowe archiwum na &lt;code&gt;wyszukiwarka-msig.ms.gov.pl&lt;/code&gt; sięga do 2001 roku. Scraper może odpytywać dowolny zakres dat w tym okresie. Daje to dostęp do ponad 20 lat zgłoszeń upadłości, zmian KRS i innych zdarzeń korporacyjnych - cenny zbiór danych do analizy historycznych trendów lub due diligence długo istniejących firm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ceny
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda&lt;/th&gt;
&lt;th&gt;Koszt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ręczne wyszukiwanie na portalu MSiG&lt;/td&gt;
&lt;td&gt;Darmowe (po jednym, bez eksportu)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MGBI API MSiG&lt;/td&gt;
&lt;td&gt;900-2200 zł/mies. subskrypcja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ten aktor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~20 zł za 1000 wyników&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Darmowe $5 kredytów Apify = ~900 wyników MSiG za darmo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wypróbuj:&lt;/strong&gt; &lt;a href="https://apify.com/minute_contest/msig-scraper" rel="noopener noreferrer"&gt;apify.com/minute_contest/msig-scraper&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ten artykuł jest częścią serii &lt;a href="https://dev.to/ucptools/series/polish-business-data-apis"&gt;Polish Business Data APIs&lt;/a&gt; o programistycznym dostępie do polskich rejestrów publicznych.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
    <item>
      <title>eKRS Scraper: Sprawozdania Finansowe z KRS</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:41:46 +0000</pubDate>
      <link>https://forem.com/ucptools/ekrs-scraper-sprawozdania-finansowe-z-krs-5bc4</link>
      <guid>https://forem.com/ucptools/ekrs-scraper-sprawozdania-finansowe-z-krs-5bc4</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Polskie spółki muszą składać roczne sprawozdania finansowe w &lt;strong&gt;KRS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Są publicznie dostępne na &lt;code&gt;ekrs.ms.gov.pl&lt;/code&gt; - ale tylko przez ręczny interfejs webowy&lt;/li&gt;
&lt;li&gt;Portal używa &lt;strong&gt;szyfrowania AES z kluczem rotowanym co godzinę&lt;/strong&gt; (opartym na strefie czasowej Warszawa)&lt;/li&gt;
&lt;li&gt;Zbudowałem &lt;a href="https://apify.com/minute_contest/poland-krs-financial-scraper" rel="noopener noreferrer"&gt;eKRS sprawozdania finansowe scraper na Apify&lt;/a&gt;, który wyciąga ustrukturyzowane dane finansowe (aktywa, pasywa, przychody, zysk netto) za $0.03 za firmę&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Czym jest eKRS i dlaczego dostęp do sprawozdań finansowych ma znaczenie
&lt;/h2&gt;

&lt;p&gt;eKRS (Elektroniczny Krajowy Rejestr Sądowy) to elektroniczny portal Krajowego Rejestru Sądowego prowadzony przez Ministerstwo Sprawiedliwości. Od 2018 roku wszystkie polskie spółki z numerem KRS mają obowiązek składania rocznych sprawozdań finansowych elektronicznie przez ten portal. Obejmują one bilans, rachunek zysków i strat oraz informacje dodatkowe.&lt;/p&gt;

&lt;p&gt;To tworzy jedną z największych publicznie dostępnych baz danych finansowych firm w Europie Środkowej. Setki tysięcy spółek składają sprawozdania co roku, a wszystkie są dostępne do publicznego wglądu bezpłatnie. Dane obejmują zarówno małe spółki z o.o. z minimalnym przychodem, jak i największe spółki giełdowe w Polsce.&lt;/p&gt;

&lt;p&gt;Problem leży w dostępie. Portal &lt;code&gt;ekrs.ms.gov.pl&lt;/code&gt; został zaprojektowany do ręcznego przeglądania po jednym dokumencie. Brak eksportu danych, brak masowego pobierania, brak publicznego API. Jeśli budujesz modele ryzyka kredytowego, analizujesz konkurencję w branży lub sprawdzasz setki celów inwestycyjnych - potrzebujesz tych danych w formacie maszynowym, a nie w rządowej aplikacji serwującej XML i XHTML po jednym dokumencie.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak działa szyfrowanie AES z rotacją klucza w eKRS
&lt;/h2&gt;

&lt;p&gt;Portal eKRS to aplikacja Angular hostowana na infrastrukturze OpenShift Ministerstwa Sprawiedliwości. Szyfruje numery KRS przed wysłaniem zapytań API - ale z nietypowym mechanizmem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Klucz szyfrowania zmienia się co godzinę.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Klucz pochodzi z bieżącej daty i godziny w strefie czasowej Warszawa, sformatowanej jako &lt;code&gt;yyyy-MM-dd-HH&lt;/code&gt; i dopełnionej do 16 znaków bajtami null. Więc o 14:00 8 kwietnia 2026 w Warszawie klucz to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-04-08-14\x00\x00\x00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O 15:00 klucz rotuje na:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-04-08-15\x00\x00\x00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zapytania z kluczem wygenerowanym z błędną godziną nie przechodzą. Scraper obsługuje konwersję strefy czasowej używając &lt;code&gt;Intl.DateTimeFormat&lt;/code&gt; z &lt;code&gt;Europe/Warsaw&lt;/code&gt; - to krytyczne dla poprawnego generowania klucza, szczególnie podczas zmian czasu (Polska przechodzi między CET a CEST) i w kontenerach Docker ustawionych na UTC.&lt;/p&gt;

&lt;p&gt;Portal implementuje również podpisywanie zapytań i zarządzanie sesją, które muszą być zreplikowane. Każde sprawozdanie finansowe jest przechowywane jako XML (Polskie Standardy Rachunkowości - PSR), XHTML/iXBRL (Międzynarodowe Standardy Sprawozdawczości Finansowej - MSSF) lub okazjonalnie jako skan PDF. Scraper obsługuje wszystkie trzy formaty i normalizuje je do ujednoliconej struktury JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  eKRS sprawozdania finansowe: co dostajesz
&lt;/h2&gt;

&lt;p&gt;Aktor parsuje XML (Polskie Standardy Rachunkowości) i XHTML/iXBRL (MSSF) do ujednoliconego formatu JSON:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pole&lt;/th&gt;
&lt;th&gt;Opis&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;krs&lt;/td&gt;
&lt;td&gt;Numer KRS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;companyName&lt;/td&gt;
&lt;td&gt;Pełna nazwa spółki&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;year&lt;/td&gt;
&lt;td&gt;Rok sprawozdawczy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fileFormat&lt;/td&gt;
&lt;td&gt;xml, xhtml lub pdf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.totalAssets&lt;/td&gt;
&lt;td&gt;Aktywa razem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.fixedAssets&lt;/td&gt;
&lt;td&gt;Aktywa trwałe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.currentAssets&lt;/td&gt;
&lt;td&gt;Aktywa obrotowe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.cashAndEquivalents&lt;/td&gt;
&lt;td&gt;Środki pieniężne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.equity&lt;/td&gt;
&lt;td&gt;Kapitał własny&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.longTermLiabilities&lt;/td&gt;
&lt;td&gt;Zobowiązania długoterminowe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.shortTermLiabilities&lt;/td&gt;
&lt;td&gt;Zobowiązania krótkoterminowe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.revenue&lt;/td&gt;
&lt;td&gt;Przychody&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.operatingProfit&lt;/td&gt;
&lt;td&gt;Zysk operacyjny&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;financials.netProfit&lt;/td&gt;
&lt;td&gt;Zysk netto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Aktor zwraca również surowe źródło XML/XHTML do własnego parsowania - przydatne jeśli potrzebujesz pól wykraczających poza standardowy zestaw, takich jak harmonogramy amortyzacji, rezerwy podatkowe czy raportowanie segmentowe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak używać eKRS sprawozdania finansowe scraper
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&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_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Wyszukiwanie po NIP lub KRS
&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;minute_contest/poland-krs-financial-scraper&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;nip&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;5261040828&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# lub krs: "0000019193"
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&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;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;list_items&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;stmt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;fin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;financials&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;companyName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Przychody: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;revenue&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Zysk netto: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;netProfit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Aktywa razem: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;totalAssets&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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;h3&gt;
  
  
  JavaScript (Node.js)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;minute_contest/poland-krs-financial-scraper&lt;/span&gt;&lt;span class="dl"&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="na"&gt;nip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5261040828&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stmt&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;companyName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; - &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Przychody: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;financials&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;revenue&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Zysk netto: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;financials&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;netProfit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Praktyczny przypadek: screening kondycji finansowej dostawców
&lt;/h2&gt;

&lt;p&gt;Wyobraź sobie, że zarządzasz zakupami w firmie produkcyjnej z 200 polskimi dostawcami. CFO chce kwartalnego raportu o stabilności finansowej dostawców - czy któryś z nich jest zagrożony niewypłacalnością?&lt;/p&gt;

&lt;p&gt;Bez tego scrapera ktoś z Twojego zespołu musiałby odwiedzić &lt;code&gt;ekrs.ms.gov.pl&lt;/code&gt; 200 razy, ręcznie wyszukać każdą firmę, pobrać plik XHTML lub XML, a potem jakoś wyciągnąć odpowiednie dane finansowe do arkusza. To zajmuje dni ręcznej pracy i jest podatne na błędy.&lt;/p&gt;

&lt;p&gt;Z eKRS scraperem przekazujesz 200 numerów NIP w jednej partii. W ciągu kilku minut dostajesz ustrukturyzowany JSON z aktywami, kapitałem własnym, przychodami i zyskiem netto dla każdego dostawcy. Uruchom prosty filtr: oznacz każdego dostawcę, gdzie kapitał własny jest ujemny, gdzie wskaźnik długu do aktywów przekracza 80% lub gdzie przychody spadły o ponad 30% rok do roku. Masz system wczesnego ostrzegania o ryzyku dostawców - zbudowany w jedno popołudnie za około 25 zł.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kto potrzebuje danych ze sprawozdań finansowych eKRS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ryzyko kredytowe&lt;/strong&gt; - sprawdź wypłacalność firmy przed podpisaniem umowy lub udzieleniem kredytu&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analiza konkurencji&lt;/strong&gt; - monitoruj przychody i rentowność konkurentów w ujęciu wieloletnim&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screening inwestycyjny&lt;/strong&gt; - hurtowa analiza kondycji finansowej celów przejęć w danym sektorze&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Due diligence dostawców&lt;/strong&gt; - zweryfikuj stabilność finansową kluczowych dostawców przed podpisaniem długoletnich kontraktów&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring portfela&lt;/strong&gt; - śledź roczne wyniki firm w portfelu inwestycyjnym&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Porównanie cen eKRS Scraper
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda&lt;/th&gt;
&lt;th&gt;Koszt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ręczne pobieranie z ekrs.ms.gov.pl&lt;/td&gt;
&lt;td&gt;Darmowe (po jednym, bez ustrukturyzowanych danych)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MGBI API sprawozdania&lt;/td&gt;
&lt;td&gt;900-2200 zł/mies. subskrypcja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ten aktor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~13 zł za 100 firm&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Darmowe $5 kredytów Apify = ~190 sprawozdań finansowych za darmo.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Jakie standardy sprawozdawczości obsługuje scraper?
&lt;/h3&gt;

&lt;p&gt;eKRS sprawozdania finansowe scraper obsługuje zarówno Polskie Standardy Rachunkowości (PSR) składane jako XML, jak i Międzynarodowe Standardy Sprawozdawczości Finansowej (MSSF) składane jako XHTML/iXBRL. Obsługuje też skany PDF, choć ekstrakcja ustrukturyzowanych danych z PDF jest ograniczona. Aktor normalizuje wszystkie formaty do jednego schematu JSON - dostajesz te same nazwy pól niezależnie od formatu źródła.&lt;/p&gt;

&lt;h3&gt;
  
  
  Za ile lat wstecz są dostępne sprawozdania?
&lt;/h3&gt;

&lt;p&gt;Portal eKRS zawiera sprawozdania finansowe składane od czasu wprowadzenia obowiązku elektronicznego w 2018 roku. Większość spółek ma dostępne dane za 5-7 lat. Niektóre większe spółki, które składały dobrowolnie przed nakazem, mogą mieć starsze rekordy. Scraper zwraca wszystkie dostępne lata dla danej spółki.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czy mogę szukać po NIP zamiast numeru KRS?
&lt;/h3&gt;

&lt;p&gt;Tak. W odróżnieniu od KRS scraper do danych zarządu, eKRS sprawozdania finansowe scraper akceptuje zarówno NIP (numer identyfikacji podatkowej) jak i numer KRS jako input. To wygodne, bo NIP jest często łatwiej znaleźć - widnieje na fakturach, stronach internetowych i w większości katalogów biznesowych.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wypróbuj:&lt;/strong&gt; &lt;a href="https://apify.com/minute_contest/poland-krs-financial-scraper" rel="noopener noreferrer"&gt;apify.com/minute_contest/poland-krs-financial-scraper&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ten artykuł jest częścią serii &lt;a href="https://dev.to/ucptools/series/polish-business-data-apis"&gt;Polish Business Data APIs&lt;/a&gt; o programistycznym dostępie do polskich rejestrów publicznych.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
    <item>
      <title>KRS Scraper: Pełne Nazwiska Zarządu z KRS</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:40:17 +0000</pubDate>
      <link>https://forem.com/ucptools/krs-scraper-pelne-nazwiska-zarzadu-z-krs-5ip</link>
      <guid>https://forem.com/ucptools/krs-scraper-pelne-nazwiska-zarzadu-z-krs-5ip</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;KRS (Krajowy Rejestr Sądowy)&lt;/strong&gt; to oficjalny rejestr spółek, fundacji i stowarzyszeń w Polsce&lt;/li&gt;
&lt;li&gt;Oficjalne API (&lt;code&gt;api-krs.ms.gov.pl&lt;/code&gt;) &lt;strong&gt;celowo anonimizuje dane osobowe&lt;/strong&gt; - nazwiska stają się &lt;code&gt;L******&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Odpis PDF&lt;/strong&gt; z tego samego portalu rządowego zawiera pełne, niezanonimizowane dane&lt;/li&gt;
&lt;li&gt;Zbudowałem &lt;a href="https://apify.com/minute_contest/krs-fullnames-scraper" rel="noopener noreferrer"&gt;KRS dane zarządu scraper na Apify&lt;/a&gt;, który replikuje szyfrowanie AES portalu i pobiera odpisy PDF - zwraca JSON z pełnymi nazwiskami zarządu za $0.04 za firmę&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Czym jest KRS i dlaczego dane zarządu są kluczowe
&lt;/h2&gt;

&lt;p&gt;KRS - Krajowy Rejestr Sądowy - to centralny rejestr podmiotów gospodarczych prowadzony przez Ministerstwo Sprawiedliwości. Każda polska spółka z o.o., spółka akcyjna, fundacja i stowarzyszenie musi być tu zarejestrowana. Rejestr zawiera dane ponad 800 000 podmiotów, w tym ich formę prawną, adres siedziby, kapitał zakładowy oraz - co kluczowe - nazwiska członków zarządu, rady nadzorczej i wspólników.&lt;/p&gt;

&lt;p&gt;Dane o zarządzie to fundament prospectingu B2B, compliance i due diligence w Polsce. Jeśli oceniasz potencjalnego dostawcę, weryfikujesz kto kontroluje firmę na potrzeby KYC/AML, albo budujesz listę decydentów do cold outreach - potrzebujesz nazwisk osób, które faktycznie prowadzą te firmy. Problem polega na tym, że najwygodniejszy sposób dostępu do danych KRS - oficjalne API - celowo ukrywa właśnie te informacje.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dlaczego API KRS anonimizuje nazwiska
&lt;/h2&gt;

&lt;p&gt;Oficjalne API KRS na &lt;code&gt;api-krs.ms.gov.pl&lt;/code&gt; zwraca dane spółek, ale z ukrytymi danymi osobowymi:&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;"nazwa"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EXAMPLE SP. Z O.O."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reprezentacja"&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;"sklad"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"nazwisko"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"L******"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"imiona"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A***"&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="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="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;To bezużyteczne, jeśli potrzebujesz wiedzieć kto faktycznie zarządza firmą. Stanowisko rządu jest niespójne - dane osobowe w KRS są publiczne z mocy prawa, publikowane w Monitorze Sądowym i Gospodarczym. Każdy może przyjść do sądu rejonowego i zamówić odpis za kilka złotych. Ale API redaguje nazwiska, powołując się na RODO, jednocześnie udostępniając te same dane w formie PDF na tym samym portalu.&lt;/p&gt;

&lt;p&gt;Ta niespójność tworzy praktyczną lukę - programiści budujący systemy automatyczne nie mogą uzyskać ustrukturyzowanych danych o nazwiskach przez oficjalną ścieżkę API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak działa KRS dane zarządu scraper
&lt;/h2&gt;

&lt;p&gt;Portal &lt;code&gt;wyszukiwarka-krs.ms.gov.pl&lt;/code&gt; oferuje odpisy PDF zawierające &lt;strong&gt;pełne, niezanonimizowane dane&lt;/strong&gt;. Zarząd, rada nadzorcza, wspólnicy - wszystko z kompletnymi nazwiskami.&lt;/p&gt;

&lt;p&gt;Haczyk: pobranie tych PDF-ów wymaga replikacji dwóch mechanizmów bezpieczeństwa portalu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Szyfrowanie AES-128-CBC
&lt;/h3&gt;

&lt;p&gt;Numer KRS jest szyfrowany przed wysłaniem do API. Klucz szyfrowania?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TopSecretApiKey1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tak, naprawdę. Klucz jest zahardcodowany w JavaScript frontendu Angular. IV (wektor inicjalizacji) = klucz. Każdy kto przejrzy źródło frontendu może zreplikować szyfrowanie - i dokładnie to robi scraper.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steganografia Tokenowa
&lt;/h3&gt;

&lt;p&gt;Po zaszyfrowaniu portal generuje 512-znakowy token, który ukrywa numer KRS i timestamp na określonych pozycjach tablicy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tworzy tablicę 512 losowych znaków alfanumerycznych&lt;/li&gt;
&lt;li&gt;Wstawia zaszyfrowany KRS na pozycje np. &lt;code&gt;[193, 8, 327, 501, 112, 74, 409, 226, 16, 306]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wstawia sumę kontrolną na pozycje &lt;code&gt;[24, 46, 174, 345]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wykonuje circular right-shift na całej tablicy&lt;/li&gt;
&lt;li&gt;Łączy w string i wysyła jako parametr API&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Scraper replikuje cały proces generowania tokenu, a następnie parsuje pobrany PDF na ustrukturyzowane pola JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  KRS dane zarządu: co dostajesz
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pole&lt;/th&gt;
&lt;th&gt;Przykład&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;companyName&lt;/td&gt;
&lt;td&gt;EXAMPLE SP. Z O.O.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;krsNumber&lt;/td&gt;
&lt;td&gt;0000019193&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nip&lt;/td&gt;
&lt;td&gt;5261006099&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;regon&lt;/td&gt;
&lt;td&gt;010058960&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;legalForm&lt;/td&gt;
&lt;td&gt;SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;address&lt;/td&gt;
&lt;td&gt;ul. Przykładowa 1, 00-001 Warszawa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;boardMembers&lt;/td&gt;
&lt;td&gt;[{fullName, firstName, surname, role}]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;supervisoryBoard&lt;/td&gt;
&lt;td&gt;[{fullName, firstName, surname, role}]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;shareholders&lt;/td&gt;
&lt;td&gt;[{name, sharesValue, sharesCount}]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;shareCapital&lt;/td&gt;
&lt;td&gt;500000.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Dostępne są dwa typy odpisów: &lt;code&gt;aktualny&lt;/code&gt; (tylko bieżący stan) i &lt;code&gt;pelny&lt;/code&gt; (pełna historia zmian - byli członkowie zarządu, zmiany adresu, zmiany kapitału).&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak używać KRS Scraper
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&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_API_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;minute_contest/krs-fullnames-scraper&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;krsNumbers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;0000019193&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;0000366824&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;extractType&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;aktualny&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# 'aktualny' = bieżące, 'pelny' = pełna historia
&lt;/span&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&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;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;list_items&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;companyName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (KRS: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;krsNumber&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&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;member&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;boardMembers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;member&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;member&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;fullName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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;h3&gt;
  
  
  JavaScript (Node.js)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;minute_contest/krs-fullnames-scraper&lt;/span&gt;&lt;span class="dl"&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="na"&gt;krsNumbers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0000019193&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0000366824&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;extractType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aktualny&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;company&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;companyName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; - NIP: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nip&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;boardMembers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Praktyczny przypadek: prospecting B2B na polskim rynku
&lt;/h2&gt;

&lt;p&gt;Wyobraź sobie, że jesteś SDR-em w firmie SaaS celującej w polskie średnie firmy. Masz listę 500 numerów KRS z katalogu branży. Musisz znaleźć prezesa zarządu każdej firmy do spersonalizowanego outreach.&lt;/p&gt;

&lt;p&gt;Bez tego scrapera Twoje opcje to: (1) odwiedzić &lt;code&gt;wyszukiwarka-krs.ms.gov.pl&lt;/code&gt; 500 razy i ręcznie pobrać każdy PDF, (2) zapłacić 900-2200 zł/mies. za subskrypcję komercyjnego dostawcy danych, (3) użyć API i dostać &lt;code&gt;L******&lt;/code&gt; zamiast nazwisk.&lt;/p&gt;

&lt;p&gt;Z KRS scraperem przekazujesz wszystkie 500 numerów KRS w jednym wywołaniu API. W ciągu kilku minut dostajesz JSON z pełnym nazwiskiem i rolą każdego członka zarządu. Filtruj po &lt;code&gt;PREZES ZARZĄDU&lt;/code&gt; i masz listę do outreach - ze zweryfikowanymi NIP i REGON do porównania z innymi rejestrami.&lt;/p&gt;

&lt;p&gt;Całkowity koszt: około 85 zł za 500 firm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kto potrzebuje danych o zarządzie z KRS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sprzedaż B2B&lt;/strong&gt; - znajdź imiona i nazwiska decydentów przed cold outreach&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance KYC/AML&lt;/strong&gt; - zweryfikuj kto kontroluje firmę&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Due diligence&lt;/strong&gt; - sprawdź skład zarządu przed inwestycją&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ryzyko kredytowe&lt;/strong&gt; - sprawdź powiązania między firmami przez wspólnych członków zarządu&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kancelarie prawne&lt;/strong&gt; - identyfikacja stron w sporach i negocjacjach kontraktowych&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Porównanie cen KRS Scraper
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dostawca&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Koszt za 100 firm&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Oficjalne API KRS&lt;/td&gt;
&lt;td&gt;Darmowe&lt;/td&gt;
&lt;td&gt;0 zł (ale nazwiska ukryte)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transparent Data&lt;/td&gt;
&lt;td&gt;Subskrypcja&lt;/td&gt;
&lt;td&gt;~130 zł&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MGBI&lt;/td&gt;
&lt;td&gt;Subskrypcja&lt;/td&gt;
&lt;td&gt;900-2200 zł/mies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ten aktor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pay-per-use&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~17 zł&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Darmowe $5 kredytów Apify = ~125 firm za darmo.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Czy dane o zarządzie z KRS są legalnie publiczne?
&lt;/h3&gt;

&lt;p&gt;Tak. KRS jest rejestrem publicznym z mocy ustawy (Ustawa o Krajowym Rejestrze Sądowym). Każdy może zamówić pełny odpis w sądzie rejonowym za niewielką opłatę. Dane są też publikowane w Monitorze Sądowym i Gospodarczym. Anonimizacja w API to decyzja polityczna rządu, nie wymóg prawny - odpisy PDF z tego samego portalu zawierają pełne nazwiska.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czy mogę szukać firm po NIP zamiast numeru KRS?
&lt;/h3&gt;

&lt;p&gt;KRS dane zarządu scraper przyjmuje numery KRS jako input. Jeśli masz tylko NIP, możesz najpierw użyć oficjalnego endpointu wyszukiwania API KRS, żeby znaleźć odpowiadający numer KRS, a następnie przekazać go do aktora. Alternatywnie, aktor eKRS do sprawozdań finansowych z tej serii przyjmuje NIP bezpośrednio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jak aktualne są dane?
&lt;/h3&gt;

&lt;p&gt;Scraper pobiera oficjalny odpis z portalu Ministerstwa Sprawiedliwości w czasie rzeczywistym. Dane odzwierciedlają aktualny stan rejestru KRS - typowo aktualizowany w ciągu kilku dni od złożenia wniosku w sądzie. To te same dane, które dostałbyś odwiedzając portal ręcznie.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wypróbuj:&lt;/strong&gt; &lt;a href="https://apify.com/minute_contest/krs-fullnames-scraper" rel="noopener noreferrer"&gt;apify.com/minute_contest/krs-fullnames-scraper&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ten artykuł jest częścią serii &lt;a href="https://dev.to/ucptools/series/polish-business-data-apis"&gt;Polish Business Data APIs&lt;/a&gt; o programistycznym dostępie do polskich rejestrów publicznych.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
    <item>
      <title>UOKiK Scraper: Klauzule Niedozwolone z API</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:39:15 +0000</pubDate>
      <link>https://forem.com/ucptools/uokik-scraper-klauzule-niedozwolone-z-api-56p2</link>
      <guid>https://forem.com/ucptools/uokik-scraper-klauzule-niedozwolone-z-api-56p2</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UOKiK&lt;/strong&gt; (Urząd Ochrony Konkurencji i Konsumentów) prowadzi rejestr &lt;strong&gt;7 500+ klauzul umownych&lt;/strong&gt; uznanych przez sądy za niedozwolone&lt;/li&gt;
&lt;li&gt;Jeśli Twoja firma stosuje wzorce umów w Polsce, powinieneś sprawdzać ten rejestr - użycie zakazanej klauzuli może prowadzić do kar i procesów&lt;/li&gt;
&lt;li&gt;Brak API do rejestru&lt;/li&gt;
&lt;li&gt;Zbudowałem &lt;a href="https://apify.com/minute_contest/uokik-clauses-scraper" rel="noopener noreferrer"&gt;aktora na Apify&lt;/a&gt;, który przeszukuje rejestr i zwraca JSON za $0.008 za klauzulę&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dlaczego Rejestr Klauzul Niedozwolonych UOKiK Jest Ważny
&lt;/h2&gt;

&lt;p&gt;Polski system ochrony konsumentów opiera się na prostej, ale skutecznej zasadzie: klauzule umowne uznane przez Sąd Ochrony Konkurencji i Konsumentów (SOKiK) za abuzywne są nieważne - automatycznie, niezależnie od tego czy konsument podpisał umowę. Podstawą prawną jest ustawa o ochronie konkurencji i konsumentów, która daje UOKiK uprawnienia do egzekwowania uczciwości umów we wszystkich branżach.&lt;/p&gt;

&lt;p&gt;Orzeczenia SOKiK są publikowane w Rejestrze Klauzul Niedozwolonych. Gdy klauzula pojawi się w rejestrze, każda firma stosująca identyczne lub istotnie podobne sformułowania w swoich wzorcach umów ryzykuje postępowanie ze strony UOKiK, pozwy zbiorowe od organizacji konsumenckich oraz indywidualne zaskarżenia ze strony klientów.&lt;/p&gt;

&lt;p&gt;Rejestr zawiera obecnie ponad 7 500 klauzul zgromadzonych przez niemal dwie dekady orzeczeń sądowych. Branże z największą liczbą zakazanych klauzul to bankowość, ubezpieczenia, telekomunikacja, e-commerce i nieruchomości - czyli wszystkie sektory opierające się na wzorcach umów.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dlaczego Rejestr UOKiK Nie Ma API
&lt;/h2&gt;

&lt;p&gt;Rejestr UOKiK na stronie &lt;code&gt;rejestr.uokik.gov.pl&lt;/code&gt; to klasyczny portal rządowy. Oferuje podstawowy formularz wyszukiwania ze stronicowanymi wynikami, ale nie udostępnia endpointów REST, eksportu hurtowego ani ustrukturyzowanego formatu danych. Każda strona z klauzulą musi być załadowana osobno, żeby uzyskać pełny tekst orzeczenia, nazwę pozwanego, klasyfikację branżową i sygnaturę sprawy SOKiK.&lt;/p&gt;

&lt;p&gt;Dla kancelarii prawnych sprawdzających zapisy umowne, firm e-commerce aktualizujących regulaminy czy zespołów compliance prowadzących okresowe audyty - ręczne przeszukiwanie jest niepraktyczne, gdy trzeba zweryfikować dziesiątki klauzul lub monitorować rejestr pod kątem nowych orzeczeń w swojej branży.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dane z Rejestru UOKiK: Co Otrzymujesz
&lt;/h2&gt;

&lt;p&gt;Scraper zwraca ustrukturyzowany JSON dla każdej klauzuli z następującymi polami:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;number&lt;/strong&gt; - numer wpisu w rejestrze&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;text&lt;/strong&gt; - pełny tekst zakazanej klauzuli&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;defendant&lt;/strong&gt; - firma, przeciwko której wydano orzeczenie&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;industry&lt;/strong&gt; - klasyfikacja branżowa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;caseNumber&lt;/strong&gt; - sygnatura sprawy SOKiK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;entryDate&lt;/strong&gt; - data dodania klauzuli do rejestru&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Możesz wyszukiwać po nazwie pozwanego, po branży lub po słowie kluczowym w tekście klauzuli. Aktor automatycznie obsługuje stronicowanie i zwraca wszystkie pasujące wyniki do skonfigurowanego limitu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak Używać UOKiK Klauzule Niedozwolone Scraper
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&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_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Wyszukiwanie po nazwie pozwanego
&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;minute_contest/uokik-clauses-scraper&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;defendant&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;mBank&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;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&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;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;list_items&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;clause&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Klauzula #&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;...&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Pozwany: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;defendant&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Branża: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clause&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;industry&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&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;h3&gt;
  
  
  JavaScript (Node.js)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;minute_contest/uokik-clauses-scraper&lt;/span&gt;&lt;span class="dl"&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="na"&gt;defendant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mBank&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxResults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`#&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;...`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Praktyczny Przykład: Audyt Regulaminu Sklepu Internetowego
&lt;/h2&gt;

&lt;p&gt;Średniej wielkości polski sklep internetowy wprowadza nową politykę zwrotów. Zespół prawny musi zweryfikować, że żaden z proponowanych zapisów nie pokrywa się z wpisami w rejestrze UOKiK - szczególnie klauzule dotyczące ograniczenia odpowiedzialności za opóźnienia w dostawie, skracania okresu na zwrot i naliczania kar za zwroty.&lt;/p&gt;

&lt;p&gt;Używając scrapera, wyszukują klauzule w klasyfikacji branżowej "handel elektroniczny". Aktor zwraca 200+ zakazanych klauzul z tego sektora. Zespół prawny porównuje projekt regulaminu z wynikami, identyfikuje dwa zapisy istotnie podobne do zakazanych wpisów i przepisuje je przed publikacją. Bez zautomatyzowanego dostępu ten przegląd zająłby cały dzień ręcznego wyszukiwania. Ze scraperem zajmuje mniej niż 10 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kto Potrzebuje UOKiK Scraper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kancelarie prawne&lt;/strong&gt; - weryfikacja proponowanych zapisów umownych przed podpisaniem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firmy e-commerce&lt;/strong&gt; - sprawdzenie regulaminów i polityk zwrotów pod kątem klauzul abuzywnych&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firmy ubezpieczeniowe&lt;/strong&gt; - przegląd warunków polis w kontekście orzeczeń SOKiK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Banki i fintech&lt;/strong&gt; - walidacja umów kredytowych i tabel opłat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zespoły compliance&lt;/strong&gt; - okresowy audyt wzorców umów wobec pełnego rejestru&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organizacje konsumenckie&lt;/strong&gt; - badania i rzecznictwo z wykorzystaniem ustrukturyzowanych danych&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ceny
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda&lt;/th&gt;
&lt;th&gt;Koszt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ręczne wyszukiwanie na stronie UOKiK&lt;/td&gt;
&lt;td&gt;Darmowe (wolne, bez eksportu)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ten aktor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~13 zł za 1000 klauzul&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Darmowe $5 kredytów Apify = ~1500 klauzul za darmo.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Czy można przeszukiwać rejestr UOKiK po branży?
&lt;/h3&gt;

&lt;p&gt;Tak. Aktor obsługuje filtrowanie po klasyfikacji branżowej. Jest to przydatne dla zespołów compliance, które chcą przeprowadzić audyt wszystkich zakazanych klauzul istotnych dla ich sektora - na przykład pobierając wszystkie klauzule z bankowości, ubezpieczeń lub e-commerce.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czy klauzule niedozwolone z rejestru UOKiK obowiązują wszystkie firmy?
&lt;/h3&gt;

&lt;p&gt;Tak. Gdy SOKiK uzna klauzulę za abuzywną i trafi ona do rejestru, stosowanie identycznego lub istotnie podobnego sformułowania w jakimkolwiek wzorcu umowy jest zakazane na całym rynku - nie tylko dla pozwanej firmy. UOKiK może nakładać kary do 10% rocznego obrotu za naruszenia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jak często aktualizowany jest rejestr UOKiK?
&lt;/h3&gt;

&lt;p&gt;Rejestr jest aktualizowany w miarę wydawania nowych orzeczeń SOKiK. Nowe klauzule są dodawane regularnie, dlatego okresowy monitoring jest ważny dla zespołów compliance. Scraper pozwala to zautomatyzować poprzez zaplanowane wyszukiwania nowych wpisów.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wypróbuj:&lt;/strong&gt; &lt;a href="https://apify.com/minute_contest/uokik-clauses-scraper" rel="noopener noreferrer"&gt;apify.com/minute_contest/uokik-clauses-scraper&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ten artykuł jest częścią serii &lt;a href="https://dev.to/ucptools/series/polish-business-data-apis"&gt;Polish Business Data APIs&lt;/a&gt; o programistycznym dostępie do polskich rejestrów publicznych.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
  </channel>
</rss>
