Newly registered Polish companies, foundations and associations from the official KRS court register: NIP, address, PKD, capital, email, with filters and change detection.
Differentiator (PRICING.json, internal): rewritten after review 4 (A3) against the README and dataset views of inovaflow/new-business-registrations; the difference is stated only from allChanges mode, corporate-governance fields of the extract, the P/S register switch, the working-day window with Polish holidays, source-drift guards, Poland-only maxItems and price.
Default window counted in working days: "Working days back" skips weekends and Polish public holidays (fixed and Easter-based, Christmas Eve from 2025), so the default of 2 on a Sunday covers Thursday to Sunday and on a Monday morning covers Friday to Monday; before, the calendar window returned almost nothing on those days. Maximum 15 working days; explicit dates still allow 31 days.
"Only new since last run" state is now kept per combination of mode, registers, scan depth and filters (hash of the normalised settings, without the date window and maxItems) instead of one account-wide record. Only entities actually returned are remembered; saving merges with the stored record and verifies the write, so parallel runs do not overwrite each other.
New-registrations mode with complete depth reads only the newest 100,000 KRS numbers of the window's bulletins. Measured on 2026-09-30: the full day 2026-09-29 needs 1,158 lookups instead of 4,217 and still returns all 267 registrations (95 s instead of 5.4 min); on 2026-09-25 it returned 308 of 309, missing one entity with a number more than 500,000 below the newest and 21 register entries; a one-voivodeship run for that day takes 64 s instead of 209 s. Scheduled runs also skip numbers whose registration date is already known to be outside the window.
Status message reports coverage of the registration date ("registration date present in X of Y extracts") and of every field used by an active filter; the run fails when the registration date is missing in more than 10% of extracts or a filter field disappears, instead of reporting fewer results.
Clear reason when nothing is returned: no registration in the window, none matching the filters, or everything already delivered.
Retries on HTTP 429/5xx respect the Retry-After header.
Website host is returned in lowercase, like the email.
README: factual note on personal data instead of a legal verdict, pricing before input, FAQ on run time and limits (a month of new registrations is about 13,300 lookups).
Pricing: no free results in a run (price per result plus the start fee added on publication); the README pricing section describes plan-based prices and the start fee instead of a free allowance.
Scheduled runs: numbers already delivered or known to be outside the window are dropped before the lookups are split into batches, so every batch holds a full set of live requests.
Docker build context excludes tests, local storage and node_modules (.dockerignore); test fixtures no longer contain email addresses of natural persons.
0.1
Initial release: feed of newly registered Polish entities from the official KRS API (bulletin of the day + current extract), registers P and S, modes newRegistrations and allChanges.
Filters: legal form, voivodeship, city, PKD prefix (main or any), name keyword, share capital range, only with email, only with website.
sinceLastRun keeps delivered KRS numbers in the named key-value store krs-feed-state for 45 days.
The run fails when the bulletin is empty for a past day, when no extract carries a registration date, when extracts stop arriving, or when more than 20% of lookups fail. The status message reports email and website coverage.
Measured on 2026-09-29: full day, registers P and S, 4,217 lookups, 267 registrations, 0 failed requests, 5.4 minutes.
Tested with three inputs: typical (two-day window, all legal forms), edge (allChanges for one voivodeship and legal form, registers P and S) and no results (PKD prefix without matches: one status row with found=false).