Companies House PSC Changes - UK Beneficial Owner Monitor avatar

Companies House PSC Changes - UK Beneficial Owner Monitor

Pricing

from $0.005 / actor start

Go to Apify Store
Companies House PSC Changes - UK Beneficial Owner Monitor

Companies House PSC Changes - UK Beneficial Owner Monitor

Watch UK companies for changes in persons with significant control: added, ceased and changed PSCs with old values, from the public Companies House register, no API key.

Pricing

from $0.005 / actor start

Rating

0.0

(0)

Developer

Michal Pšenčík

Michal Pšenčík

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Companies House PSC Changes

Check a watchlist of UK companies for changes to their persons with significant control (PSCs). The actor reads the public Companies House register pages. No API key or proxy is needed.

Each delivered row contains one company's current PSC list and its changes since the last successful check in the same named watch. It is intended for small KYB and supplier-risk teams checking roughly 100 to 1,000 companies daily.

Input

{
"companyNumbers": ["08892100", "00519500", "00445790"],
"watchName": "default",
"onlyChanged": false,
"includeCeased": true,
"includeCorrespondenceAddress": false,
"maxCompanies": 1000
}
  • companyNumbers: required string list. Numeric values are zero-padded to eight characters; prefixes such as SC, NI and OC are uppercased and retained. Duplicate numbers are checked once. Invalid entries appear only in the free summary.
  • watchName: defaults to default. Reuse the exact name on subsequent runs to compare changes. A different name creates an independent baseline. Named stores persist across runs; do not run the same watch concurrently. Watch names are hashed into storage-safe names.
  • onlyChanged: defaults to false. Set true to deliver only first checks and changes. Unchanged checks still use network requests but generate no item charge.
  • includeCeased: defaults to true. False filters ceased PSCs from pscs, while complete history remains in watch state and relevant changes still appear in changes.
  • includeCorrespondenceAddress: defaults to false. Opt in only if you need these personal data.
  • maxCompanies: defaults to 1,000 distinct valid companies per run, in input order. Zero removes this limit. The summary reports valid companies omitted by it.

Output and change detection

The default dataset contains billable company checks only:

  • companyNumber, companyName, sourceUrl and checkedAt.
  • pscStatus: has_psc if the register lists active or historical PSCs, exempt if it lists an exemption, or no_psc when it lists none and no exemption. exemptionIds preserves the register's exemption element ids. activePscCount and activeStatementCount come from the header.
  • pscs: kind (individual, corporate or other), name, status (active or ceased), notified and ceased dates, nature-of-control slugs and published individual or corporate fields. Birth dates are YYYY-MM; other dates are YYYY-MM-DD. Missing optional fields are omitted. On dissolved-company pages the header omits "active" and non-ceased PSCs have no status tag. These entries use status: active to mean not recorded as ceased, which may be historical at dissolution; it does not mean the company is operating. Explicit ceased tags and dates are preserved. activePscCount and activeStatementCount report the corresponding non-ceased or non-withdrawn header counts on these pages.
  • statements: the register's statement text, whether each statement is active, and published notifiedOn and withdrawnOn dates when present. Withdrawn statements are retained with active: false.
  • changeType: new for the first check in this watch, then changed or unchanged. previousCheckedAt is null on the first check. First checks establish a baseline with empty changes.
  • changes: added, ceased, removed, control_changed or details_changed, with PSC identity (kind, name, notifiedOn), changedFields, oldValues, newValues and possibleCorrection. Added and removed entries include the full available new or old PSC; other changes include only changed fields. A missing side or removed field is null.

The HTML does not publish PSC ids. Identity is kind plus exact published name plus notification date. An added entry paired with a ceased or removed entry sharing kind and notification date gets possibleCorrection: true on both changes. This can indicate a renamed or corrected register entry; these changes remain visible and are not silently merged. The flag is a heuristic, not a conclusion.

Company name, exemption and statement changes also set changeType to changed; changes describes PSC changes only. Repeated identities on the same page are retained, including an active and a ceased entry with the same kind, name and notification date. Change detection matches unchanged occurrences first, then records of the same status, before comparing remaining occurrences. Switching address inclusion alone does not create a detail change. Address changes are compared only when both checks opted in. Added and removed records retain available addresses when the current check opts in, even if the previous check excluded addresses. No identity-verification dates are collected.

The free SUMMARY record in the default key-value store contains requested count, invalid entries, duplicate count, companies omitted by maxCompanies, successful checks, separate notFound and errored entries, counts by change type, rows stored, rows cut by a spending cap and HTTP requests including retries and pagination. HTTP 404 results are notFound only, never dataset rows. Exhausted request or parsing failures are errored only. Neither replaces the last successful baseline.

Watch state advances only after a row is stored, or after an unchanged onlyChanged check. A failed push or spending-cap omission leaves the previous baseline, so the change can be reported again. When delivery is blocked by a spending cap or the SDK signals the cap boundary, checking stops. rowsCutBySpendingCap counts checked rows that were not stored; companiesSkippedBySpendingCap counts the remaining selected companies that were not attempted. Their state stays unchanged. A failure between delivery and state persistence can repeat a row on the next run. Exported results are snapshots, not an authoritative real-time feed.

Price

$0.002 per company check delivered to the default dataset, plus $0.005 per actor start. The platform bills the built-in apify-default-dataset-item and apify-actor-start events. Quiet companies still produce useful current snapshots and are billed unless onlyChanged is true. With the default three companies, the expected total is $0.011. The summary is free. Invalid numbers, 404s, errors and unchanged checks suppressed by onlyChanged have no item charge.

Source and limits

Requests use the Companies House public register. They run sequentially at a maximum of one request per second, including retries and pagination. HTTP 429 and server failures retry up to four times with exponential backoff and Retry-After. Every request has a 30-second timeout. Pagination follows same-company ?page= links; missing or inconsistent pages fail that company instead of replacing its watch with incomplete data.

Companies House publishes no rate limit for these HTML pages. The rate is deliberately conservative. HTML can change, and upstream outages may cause errors. Public-page access has been verified from a desktop connection; Apify datacenter access must be confirmed before publishing.

Personal data

PSC entries contain personal data. The actor outputs only published register information, with less collected by default: correspondence addresses are omitted unless opted in, birth dates remain month and year only, and identity-verification dates are excluded. Addresses are also omitted from saved watch snapshots by default. Opting out on a later run removes addresses from that company's next saved snapshot, but does not delete older datasets, backups or other watches.

As the user, you are the data controller under UK GDPR. You need a lawful basis to process PSC data, must keep it accurate by rerunning the watchlist, and must not use it for purposes the register does not support. Set appropriate access and retention for your datasets and named watch stores, including deleting them when no longer needed. This is factual product information, not legal advice.

See Companies House data-products guidance for the source's conditions of use. Public availability does not remove your data-protection obligations.