Skip to main content

swissco

PyPI Documentation

Swiss company data from the shell. Look a company up by UID, search 790,000 of them by name or by what they say they do, list gazette publications, or watch a list of companies for change.

uvx swissco lookup CHE-444.420.929

No signup, no API key, no config file. Two federal open-data sources do the work: Zefix on LINDAS for the commercial register, and the Amtsblattportal for the Swiss Official Gazette of Commerce.

Built and maintained by Prospex, a Swiss B2B sales intelligence platform.

Install

uvx swissco --help          # run it without installing
pip install swissco         # or install it

Python 3.14 or newer.

Commands

Every command takes --format table|json|csv, --limit and --quiet.

swissco lookup

Everything the register publishes about one company.

$ swissco lookup CHE-444.420.929
legal name       Baumberger Bau AG
uid              CHE-444.420.929
chid             CH-036.9.103.786-9
ehra id          1702823
legal form code  0151
legal form       Schweizerische Zweigniederlassung im Handelsregister eingetragen
municipality     Koppigen
canton           BE
address          Hauptstrasse 6, 3425 Koppigen
purpose          Anbieten von Kleintransporte aller Art.
zefix uri        https://register.ld.admin.ch/zefix/company/1702823

Accepts CHE-444.420.929, CHE444420929, or the UID buried in other text. The check digit is verified before any request goes out.

swissco search

Companies by legal name or by statutory purpose: how a company describes what it does, in its own words, in the register.

$ swissco search "usinage" --canton VD --limit 5
LEGAL_NAME                             UID              LEGAL_FORM                                         MUNICIPALITY  CANTON  PURPOSE
-------------------------------------  ---------------  -------------------------------------------------  ------------  ------  ------------------------------------------------------------
Atelier roue libre S.A.                CHE-261.821.895  Aktiengesellschaft                                 Penthalaz     VD      La société a pour but l'usinage, la réparation, la révision…
Cute Cut Sàrl                          CHE-403.577.924  Gesellschaft mit beschränkter Haftung GMBH / SARL  Lausanne      VD      la société a pour but toutes activités, notamment la fabric…
DecoupART CNC Sàrl                     CHE-342.723.896  Gesellschaft mit beschränkter Haftung GMBH / SARL  Paudex        VD      la société a pour but tous types de travaux dans les domain…
LAVA Technologies Sàrl en liquidation  CHE-217.431.384  Gesellschaft mit beschränkter Haftung GMBH / SARL  Nyon          VD      la société a pour but: développement de machines d'usinage …
Pousaz Mécanique SA                    CHE-166.712.190  Aktiengesellschaft                                 Oron          VD      La société a pour but l'exploitation d'un atelier mécanique…

--canton takes a two-letter code, --legal-form an eCH-0097 code (0106 is an AG, 0107 a GmbH).

swissco publications

Commercial-register publications from the gazette, in a date range.

swissco publications --canton ZH --since 2026-08-01
swissco publications --canton ZH --since 2026-08-01 --type CAPITAL_INCREASED

Without --type, only the list pages are read: one request per 2,000 publications. With --type, each surviving publication's body is fetched and classified into the eleven event types shab-parser recognises, so narrow the range and the canton first.

Ranges past about ten days are split into windows automatically. The API rejects any request whose page offset reaches 10,000, and the gazette publishes around a thousand commercial-register entries a day.

swissco events

One company's registry history.

swissco events CHE-444.420.929 --since 2024-01-01

The gazette's list pages carry no UID, only a title, so this resolves the UID to a legal name, keeps the publications whose title looks like that name, then fetches those bodies and keeps the events whose own UID matches. The title match decides what is worth downloading; the body's UID decides what is reported. Fetched bodies are cached under the state directory, so an overlapping re-run costs nothing.

swissco watch

What changed since last time.

printf 'CHE-444.420.929\nCHE-105.943.826\n' > uids.txt
swissco watch uids.txt --state ~/.swissco/

Each company is compared by fingerprint, a digest over its identity, address and purpose fields. Exits 10 when something changed and 0 when nothing did, so cron can branch on it:

0 7 * * * swissco watch ~/uids.txt --quiet --format json > ~/changes.json \
          || mail -s "registry changes" me@example.com < ~/changes.json

A UID that has left the dataset is reported as no longer in the dataset, never as deleted. LINDAS carries active entities and is not a historical export, so a UID can leave it for reasons that have nothing to do with the company ending.

Output

--format is the only thing that changes the output. A command piped into jq and the same command watched by a person produce identical bytes, so a script that works in your terminal works in CI.

table and csv are rendered from the same rows that json serialises, so a column cannot appear in one format and be missing from another. Progress notes go to stderr, where --quiet silences them; errors go to stderr as a single JSON object.

Access and terms

SHAB / Amtsblattportal. The REST API is the channel the operator offers for machine access: freely accessible, no authentication for published data, no documented rate limit, page size capped at 2,000. The website UI is disallowed by robots.txt, which does not reach the API. The operator disclaims completeness, and only the signed PDF is legally binding.

Zefix on LINDAS. Published on opendata.swiss, no credentials. Commercial-use terms have never been settled; the dataset page states what applies.

Zefix PublicREST. Requires credentials issued by zefix@bj.admin.ch. Every command here works without them. Supplying them through --user/--password or ZEFIX_USER/ZEFIX_PASSWORD adds capital, status, deletion date, former names and corporate relations to lookup, and a name-prefix search to search.

Being a good citizen

These are small public services run by federal offices. swissco sends one request every 0.5 seconds at most, backs off exponentially on failure, and identifies itself with a real User-Agent carrying this repository's URL. --interval can raise that floor and cannot lower it.

Built on

Package Does
zefix-parser Zefix: LINDAS SPARQL, PublicREST, UID validation
shab-parser SHAB: discovery, fetch, parse, eleven-type event classification

Both are MIT and maintained alongside this one. swissco is the shell over them.

Watching more than a list

swissco watch from cron is the free version of what Prospex sells. Prospex watches the whole register continuously, joins it to hiring, funding, tenders and web signals, and tells you which of those changes is worth a call. If a cron job and a UID list cover it, this tool is all you need.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swissco-0.1.0.tar.gz (24.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swissco-0.1.0-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file swissco-0.1.0.tar.gz.

File metadata

  • Download URL: swissco-0.1.0.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for swissco-0.1.0.tar.gz
Algorithm Hash digest
SHA256 52e6b13692e1f3a7f8c57d1912cbd6ade1bb91ef9c83e37bf45273a9ab88bb17
MD5 da6516fb36594d6698eb06a8270dc6c6
BLAKE2b-256 4a73e88777c951eaa7f120ee021acb633e716db4058bf71c628b4c93014447d9

See more details on using hashes here.

File details

Details for the file swissco-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: swissco-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for swissco-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 999798d4a76f7124095c350cbea367e9aa98127de92c42403589d0d47609a8d7
MD5 a38d1f67e5a705b9fb6a1d7c6a9760ff
BLAKE2b-256 053276cfa25b87e43ab6cb7a5061a1d2d882981c58af278ff08f0b5d00f99ec0

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

2 files

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page