DEV Community

Cover image for UOKiK Scraper: Polish Banned Contract Clauses
Peter
Peter

Posted on • Originally published at apify.com

UOKiK Scraper: Polish Banned Contract Clauses

TL;DR

  • UOKiK (Urzad Ochrony Konkurencji i Konsumentow) maintains a registry of 7,500+ contract clauses that Polish courts have ruled abusive
  • If your business uses standard contracts in Poland, you should check this registry - using a banned clause can lead to fines and lawsuits
  • No API exists for the registry
  • I built an Apify actor that searches the registry and returns structured JSON for $0.008 per clause

Why the UOKiK Abusive Clauses Registry Matters

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.

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.

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.

Why UOKiK Registry Has No API

The UOKiK registry at rejestr.uokik.gov.pl 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.

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.

UOKiK Clause Data: What You Get

The scraper returns structured JSON for each clause with the following fields:

  • number - registry entry number
  • text - the full text of the banned clause
  • defendant - the company that was ruled against
  • industry - business sector classification
  • caseNumber - SOKiK court case reference
  • entryDate - when the clause was added to the registry

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.

How to Use the UOKiK Abusive Clauses Scraper

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

# Search by defendant company name
run = client.actor("minute_contest/uokik-clauses-scraper").call(
    run_input={
        "defendant": "mBank",
        "maxResults": 50
    }
)

items = client.dataset(run["defaultDatasetId"]).list_items().items
for clause in items:
    print(f"Clause #{clause.get('number')}: {clause.get('text')[:100]}...")
    print(f"  Defendant: {clause.get('defendant')}")
    print(f"  Industry: {clause.get('industry')}")
Enter fullscreen mode Exit fullscreen mode

JavaScript (Node.js)

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('minute_contest/uokik-clauses-scraper').call({
    defendant: 'mBank',
    maxResults: 50
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const clause of items) {
    console.log(`#${clause.number}: ${clause.text?.substring(0, 100)}...`);
    console.log(`  Industry: ${clause.industry}`);
}
Enter fullscreen mode Exit fullscreen mode

Real-World Use Case: E-Commerce Terms of Service Audit

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.

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.

Who Needs the UOKiK Scraper

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

Pricing

Method Cost
Manual search on UOKiK website Free (slow, no export)
This actor ~$3 per 1,000 clauses

Free $5 Apify credits on signup = ~1,500 clause lookups at no cost.

FAQ

Can I search the UOKiK registry by industry sector?

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.

Are UOKiK banned clauses legally binding for all companies?

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.

How often is the UOKiK registry updated?

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.

Try it: apify.com/minute_contest/uokik-clauses-scraper


This is part of the Polish Business Data APIs series covering programmatic access to Polish government registries.

Top comments (0)