# Changelog of UK Companies House: Company Data, SIC Search & Change Monitor (`yourevenings/uk-companies-house`) Actor

- **URL**: https://apify.com/yourevenings/uk-companies-house/changelog.md
- **Full Actor documentation**: https://apify.com/yourevenings/uk-companies-house.md

## Changelog

### 0.1.10 (30 Oct 2026)

- README only: new "Input examples" section (copy-paste JSON inputs) and "Output sample" section (JSON trimmed from a real run); search phrases in the intro and FAQ. No change to code, input, output rows or charging.

### 0.1.9 (30 Oct 2026)

- Changelog wording only: earlier entries describe the dataset join without naming another Actor. No change to code, output rows or charging.

### 0.1.8 (30 Oct 2026), private build

- Go-live tidy: the Output tab view for the dataset join is now called "Dataset join matches" and its status messages refer to "dataset". No change to rows or charging.

### 0.1.7 (30 Oct 2026), private build

- Input schema: the description of the advanced 'Dataset ID with company numbers' field no longer names an internal output field; it now says what happens in plain words. No change to code, output rows or charging.
- README: removed the "sample dataset will be linked here at launch" line (no external sample links).

### 0.1.5 (22 Oct 2026), private build

- Company-name index: each month now also gets `n-<date>` shards (one line per company: normalised name, number, registered name, status), keyed by the first significant word of the normalised name. A `companyNames` lookup reads only the shards its names need (14 shards, about 5 MB, for 8 names) instead of the whole snapshot. Exact and normalised matching and the free `not_found` row with up to 3 candidates are unchanged. Candidates now come from companies whose name starts with one of the query's words (the full pass also found names where the shared word came later).
- The monthly refresh (`refreshData`) builds the index with each new month; for a month that is already built without one, the refresh adds the index only. Months without an index fall back to the old full pass.
- Local check, 2026-10-01 snapshot, 8 names (6 matches, 2 not_found): index 1.9 s vs full pass 33.7 s, identical rows, candidates and charges (6 company events). Index: 5,704,711 entries, 102 MB gzip, largest shard 0.78 MB; built in 56 s locally.

### 0.1.4 (22 Oct 2026), private build

- Fix: `maxResults` could be overshot by a few rows when several shards were read in parallel (a platform changes run with maxResults 100 returned and charged 102). Slots are now reserved before each push. Re-run returned and charged exactly 100.
- Platform runs on 0.1.4 (512 MB): dataset join + 4 numbers: 15 company rows, 15 company events, 1 free not_found (ChpBxZcZKGeB5PmT0, 7 s). Changes feed (new_on_register + status_changed, SIC 62, postcode area M, max 100): 100 change rows, 100 change events (0DBzUCYFRfB4zzGpR, 6 s).

### 0.1.0 (22 Oct 2026), private build

First build. Source: Companies House Free Company Data Product (monthly Basic Company Data snapshot) only. No Companies House API key, no Developer Hub account, no HTML scraping.

Data build: the 2026-10-01 snapshot is 7 zip parts (about 70 MB each, 471 MB in total; about 419 MB of CSV and 850,000 rows per part). It is streamed one part at a time into 256 gzip shards in the named key-value store `uk-companies-house-data` (about 322 MB), with a month-over-month change feed. Local build: about 4 minutes, under 100 MB RSS. 2026-09-01: 5,689,367 companies; 2026-10-01: 5,704,711.

Platform data build: 2 GB memory (0.5 CPU) takes about 4.5 minutes per part, about 35 minutes a month, CPU-bound; peak memory under 600 MB.

Acceptance tests (local runs against the locally built Sep and Oct 2026 store, simulated pay-per-event, 22 Oct 2026; ALL PASS, full results in test/results/acceptance.json; 10 unit tests pass):

1. Default input (Tesco PLC 00445790, J Sainsbury PLC 00185647, Rolls-Royce Holdings PLC 07524813): 3 company rows with status, SIC, accounts and confirmation dates and sourceUrl; charged 3 company events.
2. No personal data: 775 dataset-join rows compared with their raw CSV street lines, care-of names and PO boxes, none present; no officer/PSC/birth/address-line/contact field names across 5,128 rows; no email addresses.
3. Name match: "Tesco PLC" gives 00445790 (exact); "j sainsbury public limited company" gives 00185647 (normalised); an invented name gives a free not_found row with 3 candidates; charged 2.
4. SIC search (62012, incorporated on or after 2026-09-01, Active): 4,353 rows, all matching, charged 4,353. An independent count over the raw 2026-10-01 CSV gives the same 4,353 (5,704,712 rows, 1 short row padded). The Companies House advanced search isn't used (it's the website; out of scope for v1).
5. Rate limit: not applicable. There are no API calls; the 7 files are downloaded one at a time, once a month.
6. Monitor: run 1 free baseline; run 2 (same snapshot) free no_new_snapshot; run 3 after editing one stored name: exactly 1 name_changed charged 1. Real Sep to Oct monitor of 783 companies from a dataset join: 203 change rows, charged 203.
7. Snapshot labels and changes feed: every row has dataSource monthly-snapshot and dataAsOf; status_changed, removed_from_register and new_on_register in postcode area M with SIC 62 gave 484 rows, all matching, charged 484; 98 removed_from_register rows carry both snapshot dates.
8. Dataset join: 775 of 783 supplier company numbers from a test dataset resolved (99.0%); 8 free not_found rows.
9. Daily QA for 3 days: not started (private).
