getregdata
Home / Blog / Article
Article · 2026-05-04

EKW Land Registry Scraper: Transparent Review Response & Compliance Use Cases

compliance · poland · webscraping · api · 4 min read

The Reality of Government Data Scraping: What Our 1-Star Review Tells Us

Earlier this month, our EKW Land Registry (księgi wieczyste) scraper received its first review on the Apify Store - a 1-star rating. This is actually a significant milestone for our portfolio, as it represents the first piece of user feedback we’ve received across our European government registry actors.

Rather than avoiding this feedback, we believe transparency is crucial for building trust in the compliance technology ecosystem. Let’s break down what this review means and how we’re addressing it.

Understanding the Review Context

The EKW Land Registry scraper extracts property ownership data, encumbrances, and transaction histories from Polish notary registers. This is critical information for:

  • Real estate due diligence
  • Legal case preparation
  • Asset verification in M&A transactions
  • Compliance monitoring for beneficial ownership

The 1-star review came from a user whose runs completed and returned data, so the objection was not that the scraper failed - it was most likely about what the land register does and does not contain.

What Our Scrapers Actually Deliver

Unlike some government portals that return structured JSON data, Polish notary registers (EKW) present several challenges:

Data Format Complexity

  • Mixed content types: Some entries contain structured tables, others are narrative text

Current Capabilities

The actor takes a list of KW numbers (kwNumbers, e.g. "WA4M/00160286/2") and returns one record per land register book. Each record carries the court that keeps the book plus the five działy (sections) of the register:

{
  "kwNumber": "WA4M/00160286/2",
  "courtCode": "WA4M",
  "courtName": "SĄD REJONOWY DLA WARSZAWY-MOKOTOWA W WARSZAWIE, X WYDZIAŁ KSIĄG WIECZYSTYCH - WA4M",
  "propertyType": "NIERUCHOMOŚĆ GRUNTOWA",
  "viewType": "aktualna",
  "success": true,
  "error": null,
  "sourceUrl": "https://przegladarka-ekw.ms.gov.pl/",
  "dzialIO": {
    "available": true,
    "empty": false,
    "title": "DZIAŁ I-O - OZNACZENIE NIERUCHOMOŚCI",
    "entries": [
      { "label": "_header", "value": "DZIAŁ I-O - OZNACZENIE NIERUCHOMOŚCI" },
      { "label": "Sposób korzystania", "value": "..." }
    ],
    "rawText": "..."
  },
  "dzialISp": { "available": true, "empty": false, "title": "DZIAŁ I-SP - SPIS PRAW ZWIĄZANYCH Z WŁASNOŚCIĄ", "entries": [ ... ], "rawText": "..." },
  "dzialII":  { "available": true, "empty": false, "title": "DZIAŁ II - WŁASNOŚĆ", "entries": [ ... ], "rawText": "..." },
  "dzialIII": { "available": true, "empty": true,  "title": null, "entries": [], "rawText": "..." },
  "dzialIV":  { "available": true, "empty": true,  "title": null, "entries": [], "rawText": "..." }
}

What each dział holds:

  • dzialIO - property designation (address, parcel, area, usage)
  • dzialISp - rights associated with ownership
  • dzialII - ownership (who owns it, and in what share)
  • dzialIII - rights, claims and restrictions
  • dzialIV - mortgages

Every dział carries the same envelope: available, empty, title, entries[] and rawText.

Three details that are easy to get wrong:

  • entries are {label, value} pairs, not plain strings, and section headings appear among them with the label _header. The values above are abbreviated; a populated dział carries dozens.
  • When a dział is empty, title comes back null, not the section heading. Read empty for the answer, not title.
  • available is not the same as “has content”. It reports that the section was fetched, and it is true on an empty dział too. The record above is a real one - a Politechnika Warszawska land parcel - and its działy III and IV are both empty, so available is true on two sections that carry nothing at all.

”No entries” Never Means “We Could Not Read It”

This is the single most important guarantee in the actor, and the one most worth stating plainly in a review response.

A dział that could not be read is never reported as a dział with no entries.

  • empty: true means the registry itself answered “BRAK WPISÓW” - the section genuinely carries nothing. On dział IV that means the property genuinely carries no mortgage.
  • If any requested dział cannot be read, the entire KW is withheld from the results and not charged. It is listed in the run’s ERRORS record instead, so you can see exactly which books were not retrieved and re-run them.

The consequence: a failed read can never be mistaken for “no mortgage”, and you are only ever billed for a complete property record. A silent partial record - the failure mode that would actually be dangerous in a due diligence workflow - cannot occur.

Addressing Common Expectation Gaps

1. “Why isn’t this as comprehensive as the official portal?”

The official portal (https://ekw.ms.gov.pl/) requires:

  • Individual document downloads
  • Manual data extraction
  • Multiple search iterations
  • PDF parsing for older records

Our scraper automates the first two steps but respects the same data boundaries set by the Ministry of Justice.

2. “Why do some properties have incomplete data?”

Polish land registries have different coverage levels:

  • Urban areas: Comprehensive digital records (post-2010)
  • Rural areas: Mixed digital/analog records
  • Historical properties: May require manual archive research

3. “How can I verify the data accuracy?”

Always cross-reference with official sources:

  1. Use the EKW portal for final verification
  2. Cross-check with notary protocols when available
  3. Verify amounts and dates against court records
  4. Confirm ownership changes in company registries (KRS)

Production Use Cases That Work

Real Estate Due Diligence Process

graph TD
    A[Identify Property] --> B[Run EKW Scraper]
    B --> C{Data Quality Check}
    C -->|Complete| D[Integrate with KRS for company ownership]
    C -->|Partial| E[Use official portal for verification]
    D --> F[Generate due diligence report]
    E --> F

Compliance Monitoring Workflow

  1. Initial screening: Run EKW on target properties
  2. Risk identification: Flag unusual ownership patterns
  3. Deep verification: Cross-reference with official sources
  4. Documentation: Save both scraper and official data for audit trails

Technical Limitations We’re Working On

Current Constraints

  • Lookup is by KW number: you need the księga wieczysta number (WA4M/00160286/2). The actor does not search by address - the official portal does not offer that either.
  • Date ranges: Cannot search beyond available digital records
  • Complex queries: Boolean operators not supported in current version

What Shipped Since the Review

  • Complete-record-only billing: an unreadable dział withholds the whole KW from the dataset and from your bill, and surfaces it in the run’s ERRORS record
  • Loud failure: when the registry is down or refuses, the run says so instead of returning a thin result set that looks like an all-clear
  • Keyless, proxy-free operation: no API key, no residential proxy, no captcha handling on your side - the actor runs on the Apify free plan

The Compliance Professional’s Reality

Government registry scraping always involves trade-offs:

What you gain:

  • Automated data collection saves 15-20 hours per property search
  • Consistent formatting across multiple records
  • Integration capability with other systems
  • Historical data compilation

What you accept:

  • Need for source verification
  • Potential gaps in older records
  • Occasional format inconsistencies
  • Understanding of system limitations

Our Commitment to Users

  1. Transparency: We clearly document what our scrapers can and cannot do
  2. Support: Direct assistance with data interpretation and usage
  3. Improvement: User feedback drives feature development
  4. Ethics: Compliance with Polish data protection regulations

Alternative Approaches

When EKW data proves insufficient, consider these complementary tools:

1. KRS Financial Statements

For corporate property ownership analysis

  • Company financials showing property holdings
  • Shareholder structure verification
  • Asset declarations in annual reports

2. CRBR Beneficial Owners

For ultimate beneficial ownership tracing

  • Natural persons behind corporate entities
  • Complex ownership structures
  • Cross-border asset mapping

3. Manual Portal Access

For complex cases requiring:

  • Historical document retrieval
  • Legal interpretation assistance
  • Notary protocol verification

Getting Started with EKW

Basic usage workflow:

  1. Collect the KW numbers you need (from a contract, a KRS extract, or a notary deed)
  2. Pick the działy you actually need - fewer sections, cheaper and faster run
  3. Cross-check ownership data
  4. Document your verification process

Sample code integration:

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("regdata/ekw-ksiegi-wieczyste-scraper").call(
    run_input={
        "kwNumbers": ["WA4M/00160286/2"],
        "sections": ["IO", "II", "IV"]
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"KW: {item['kwNumber']} ({item['courtName']})")
    print(f"Property type: {item['propertyType']}")

    mortgages = item["dzialIV"]
    if mortgages["empty"]:
        print("Dzial IV: BRAK WPISOW - no mortgage on this property")
    else:
        print(f"Dzial IV: {len(mortgages['entries'])} mortgage entry/entries")

Any KW that could not be fully read will not appear in this loop at all - it lands in the run’s ERRORS record instead, so an outage cannot quietly turn into “no mortgage found”.

Final Thoughts

The 1-star review taught us several valuable lessons:

  1. User expectations management needs improvement
  2. Documentation should be more explicit about data limitations
  3. Support channels for data interpretation are essential
  4. Transparency about limitations builds more trust than over-promising

Government data scraping is inherently complex, but when used appropriately, it provides immense value for compliance workflows. We’re committed to making our tools more useful, transparent, and reliable for the compliance community.


What’s your experience with Polish land registry data? Have you faced similar challenges with government data scraping? Share your thoughts in the comments below.


Try the EKW Land Registry scraper: https://apify.com/regdata/ekw-ksiegi-wieczyste-scraper?utm_source=devto&utm_medium=article&utm_campaign=202604&fpr=getregdata

Explore other Polish compliance tools: https://apify.com/regdata?utm_source=devto&utm_medium=article&utm_campaign=202604&fpr=getregdata

Join our community of compliance professionals automating European government data access.


Turn this into working data. Browse the registries and use cases, or start free on Apify.

Originally published on Dev.to.