Search Latvian companies from the official Register of Enterprises open data — identity, legal form, address, activity and capital, plus optional officers, shareholders, beneficial owners (UBO) and annual-report financials. Resale-open data, no key.
0.1.13 — 2026-10-22 — source host switched to the Register's own open-data server
The register's files are now downloaded from the Register of Enterprises' own open-data host (dati.ur.gov.lv) instead of the data.gov.lv aggregator, which had become unreachable (connection timeouts). These are the same daily-updated, semicolon-delimited CSVs that data.gov.lv federated from the register — same files, same columns, same license. No input or output field changed; this only removes the dependency on the aggregator's availability.
0.1.12 — 2026-10-09 — lookups return terminated entities, capital and annual report no longer left to chance, registryUrl opens the entity's page; README rewritten
A lookup by registration number returns the entity whatever its status.status has a new first choice, "automatic", and it is the default: active entities for a search, as before, and any status for a lookup. Before, the default active also applied to lookups, so a terminated company asked for by number came back as nothing. Choose active to keep the old filter on a lookup.
Numbers that return no row are named in the run's status message and in its NOT_RETURNED record, with the reason that can apply (not in the register, or a filter the entity does not pass). An entry that is not a registration number — nine or eleven digits — is named as well; it used to match nothing, without a word (the earlier build wrote no status message at all). A list longer than maxResults is cut at that many numbers and the message says so, and a name typed next to registration numbers is not searched, which the message also says. A list that holds entries but no registration number returns no row, as it did before, and the message now says why; it is never run as a search of the other filters.
capital is the paid-up share capital, on every run. The register keeps a paid-up amount and, for some companies, a registered one. The Actor took whichever record was newer and, when both carried the same date, either of them — not the same one on every run: on 2026-10-08 that was open for 2,764 companies. capital is now the paid-up amount (140,503 companies have one), or the entity's latest record of another kind where there is no paid-up one, and the new capital.kind says which. New field registeredCapital: the registered amount, for the 3,039 companies whose entry has one (higher than the paid-up amount in 2,830 of them: shares not fully paid).
financials is the entity's own latest report. A parent company files its group's consolidated report next to its own; for the 354 entities with both for their latest year, either could come back. Consolidated reports are no longer used, and among several own reports of one year the one that ends last, then the one filed last, is taken. New fields financials.periodStart and financials.periodEnd give the period the report covers: of the 124,445 reports returned for active Commercial Register entities, 3,982 cover fewer than 300 days and 1,509 more than 430.
The lists of people have a fixed order (by name, as the characters compare); two runs on the same day could return the same two officers in opposite order. Shareholder lines without a name are kept: joint owners (168 member lines and 14 stockholder lines — the register gives no names), an AS's stock held through the depository (37 lines; name is the depository; shares, votes and nominalValue are null because the register states no number) and six stockholder lines of persons the file has no name for. Dropping the joint owners left a company's listed shares below its capital. type on a shareholder line is person, entity, joint owners or depository.
Two things the register's files hold are now in the rows. An officer line carries representationWithAtLeast, the number that belongs to the right WITH_AT_LEAST — together with at least that many others (27,087 officer lines of 8,968 entities; null with any other right). A stockholder line carries nominalValue and currency, as SIA member lines already did (above zero on 22,462 of the 22,476 stock lines that are not depository lines).
registryUrl now leads to the entity's own page on the register's portal (https://info.ur.gov.lv/#/legal-entity/<number>). The earlier link (#/data-search?number=<number>) opened the portal's empty search page: checked in a browser on five entities, the old form showed the entity on none, the new form on all five; five more entities from the other registers (journal, press titles, religious organisations, representative offices) were opened with the new form, and each page shows the entity's number. The value of the field changes; no field was added or removed for it.
Downloads are checked. Each of the register's files is compared with the size the portal announces, and the time limit covers the whole transfer; a file that ended early without an error would have been read as a smaller register (not seen to happen). A run that downloads while the portal replaces its files — at about 20:25 GMT on the two evenings observed — can get files of two days; the run now says so in its status message when the times the portal gives for its files lie more than six hours apart. Lines the CSV reader cannot parse are counted and reported (none in the ten files on 2026-10-08). Rows are written in batches — one by one, 1,625 rows took 46 seconds — and a run with a maximum charge stops at the rows it covers and says so; a lookup then looks up only the first numbers the charge covers.
A run that finishes or fails says why. The earlier build wrote no status message. A search says "stopped at maxResults" only when the cap cut something. An empty search names the filters in force and, when matching entities exist but have ended, how many: legalForm: "SAB" matches 2,238 entities, none of them active. A run that cannot download the register's files fails with a message that names the file, and writes its OUTPUT record; it used to end with a stack trace in the log and no message. While it works the run sets progress messages, so a run that is stopped from outside shows the step it had reached. The download failure, the two-day message and the stop from outside were run locally against a stand-in for the portal, not on the platform.
The form's counts are active entities of all, counted on 2026-10-08. They were totals that included terminated entities ("Public organisation (SAB) — 2,238" returned no row by default), dated 2026-07-28 but counted on an older copy. The Enterprise Register journal is no longer called "pre-2005 entities": 34,641 of its entities are active.
The README's examples did not match this Actor. They used input keys it does not have (queries, maxResultsPerQuery, with a literal undefined value) and the input table listed phantom fields (maxConcurrency, includeRaw). The text also told readers to look elsewhere for revenue and headcount, which this Actor delivers. Every example now uses the real input and was run on the platform; the output table says how often each field was filled in a measured run.
Corrected claims:status is active or terminated (not inactive / dissolved); the name search is a "contains" search, not relevance-ranked; rows carry no query or scrapedAt field; active does not mean trading.
The Python example works with the current Apify client. It read the results with run['defaultDatasetId']; with apify-client 3 for Python call() returns a run object and that line raised TypeError: 'Run' object is not subscriptable after the run had finished. It now reads run.default_dataset_id; with client version 1 or 2, keep run['defaultDatasetId'].
No pricing change. Output changes:capital.kind, registeredCapital, financials.periodStart and periodEnd, representationWithAtLeast on officer lines and nominalValue and currency on stockholder lines added; capital can differ from earlier runs for 2,773 companies — the 2,764 counted above and 9 with a conditional-equity record of the same date — and does differ for 66 more, whose newest record is a registered (58) or a conditional (8) one; financials can differ for the 354 parents counted above; shareholder lines without a name are delivered (name is null or the depository), with the new type values joint owners and depository; a capital record with no currency has currency: null (it was written as EUR; 4 records). Behaviour changes for inputs that already exist: a lookup by number with no status given also returns terminated entities; a list of numbers longer than maxResults is cut to the first numbers of the list (it was cut to the lowest numbers found); an entry that holds several numbers separated by commas is read as those numbers (its digits were run together and matched nothing).
0.1 — 2026-09-07
The README was regenerated from a template shared by many Actors; the entry of that day read "Enabled AI-agent payments (x402) + rebuilt the README to the full standard". The label is the generator's: the builds of that day were numbered like the others of this Actor. That README is the one the entry above corrects — its examples and parts of its text did not describe this Actor.
0.1.2 — 2026-07-28
legalForm labels rebuilt from the register's own code list; activities[] split into separate entries; new registerType filter and English registerType output with the letter in registerTypeCode; the legalForm filter no longer over-matches (AS used to match SE as well).
0.1.1.1 — 2026-07-28
Financial figures were up to 1,000 times too small for companies that file in thousands; they are now scaled to full currency units and the filing unit is exposed as financials.reportedIn.
0.1.1 — 2026-07-28
The Console form's example run shows ownership and financials: both switches are ticked and two example registration numbers are pre-filled.
0.0
Initial release, 2026-07-09 (the Actor's first changelog called it 0.1): Latvian entities from the Register of Enterprises open data — identity, legal form, address, activity and capital, with opt-in officers, shareholders, beneficial owners (UBO) and annual-report financials.