Change log
What shipped, what's in progress, what's coming next.
First expansion beyond Poland. The multi-registry architecture was designed from day one with exactly this step in mind — a new country means a new data source, same consistent output format.
Alert configuration based on severity (info → critical), with filtering by event_class (initialization, change, growth, risk, anomaly, recovery) and category (status, identity, location, activities…). Global or per-company settings with optional force override. Note: combining a narrow event_class or category filter with a low severity threshold can effectively silence all notifications.
All 29 event types now carry an assigned severity, event_class, and category. Six severity levels: info, notice, warning, high, error, critical. Six semantic classes: initialization, change, growth, risk, anomaly, recovery. Eight data categories: status, identity, location, ownership, activities, contacts, web_presence, finance.
Debt paid: severity field added to the domain model, all event-returning endpoints updated (Companies Events, Watchlist Events Feed), and pipeline re-parsed to backfill severity on historical records.
System ready. API publicly available, documentation, pricing, registration.
Bug in event_date fallback logic — instead of the actual detection date, 100% of events returned activity_start. Fixed, pipeline re-parsed.
Complete reset and production test — 23 hours of parsing, 1.3M identities, 35M records, 15 GB of data. All endpoints tested multiple times: Search, Watchlist, Events, Wallet, queuing, log aggregation.
Complete API documentation, 4 integration guides, credit-based pricing. Ready.
Authentication, Tokens, Wallet, Companies, Watchlist, Events—each endpoint with parameters, curl examples, and real responses. Four integration guides in Polish and English. Guides →
Company Search and Company Monitor — first two platform products in production. Search with filtering by industry, location, contact. Monitor with async queuing up to 100 entities per request and 29 detected event types. See API Reference →
Credit-based billing with Paddle integration — no subscription, pay for what you use, credits never expire. Multi-tier token system: Master Token with full access, API tokens with limited scope. Deliberate decision: checkout via email, zero stored user personal data.
The pipeline was moved to a scheduler. Every night, downloads, parses, detects changes, and generates events. The system began operating without human intervention.
A change detection system that generates events. 29 event types: name changes, address changes, business activity changes, status changes, bankruptcy changes, and more. Each event has a type, old value, new value, and detection date.
Silo by silo, report type by report type—a clean surge to the domain. Testing and stabilization, daily manual runs from the terminal.
3-stage pipeline: fetch historical reports → download XML, parse to JSON, create batch → parse batch to domain. The code was spaghetti—logic in the wrong places. Rewrite necessary. V2 in January.
Domain layer ready—DTO, Writer, Cleaner, Factory, Resolver. Full dictionaries, unit and integration tests.
Laravel 12, PHP 8.3, MySQL. Domain-first architecture from day one—DTO, Writer, Cleaner, Factory, Resolver, Event. The decision to adopt multi-register design was made right away, so that France and subsequent countries would be extensions, not refactors. API-first, without a frontend.
First contact with company registry data in 2017 — curiosity about what sits behind publicly available business registers. Eight years of collecting data from GUS and CEIDG as a side project. In 2025 the decision: turn it into a product. A year later — a working API with three tools in production.