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:
entriesare{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,
titlecomes backnull, not the section heading. Reademptyfor the answer, nottitle. availableis not the same as “has content”. It reports that the section was fetched, and it istrueon 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, soavailableistrueon 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: truemeans 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:
- Use the EKW portal for final verification
- Cross-check with notary protocols when available
- Verify amounts and dates against court records
- 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
- Initial screening: Run EKW on target properties
- Risk identification: Flag unusual ownership patterns
- Deep verification: Cross-reference with official sources
- 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
- Transparency: We clearly document what our scrapers can and cannot do
- Support: Direct assistance with data interpretation and usage
- Improvement: User feedback drives feature development
- 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:
- Collect the KW numbers you need (from a contract, a KRS extract, or a notary deed)
- Pick the działy you actually need - fewer sections, cheaper and faster run
- Cross-check ownership data
- 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:
- User expectations management needs improvement
- Documentation should be more explicit about data limitations
- Support channels for data interpretation are essential
- 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.