Swiss company data

ch.prospex由 prospex.ch 發布v0.1.1更新於 Oct 24, 2026

Swiss company data: Zefix register, SHAB gazette, simap tenders, FINMA, GLEIF and ARAMIS

概覽

AI 產生的概覽

讓助理查詢六類瑞士公司公開資料:Zefix 商業登記、SHAB 公報、simap 招標、FINMA、GLEIF 與 ARAMIS。

可以做什麼
提供九個工具,除 watch 外每個命令列指令各對應一個。可用 UID 查詢公司,依名稱或法定營業目的檢索約 79 萬筆登記資料,列出公報發布與某公司的登記異動歷程,瀏覽 simap 公共招標,查詢某公司是否為 simap 註冊供應商,查核 FINMA 銀行與證券牌照,尋找法人識別碼及其集團母公司,並檢索聯邦資助的研究計畫。每個工具回傳 rows、count 與 notes,欄位與命令列 JSON 輸出相同。
適用情境
適合瑞士公司盡職調查、業務開發或採購研究,以及監控登記異動。例如查詢某州哪些公司的營業目的提到某個關鍵字、某公司是否持有銀行牌照或 LEI,或某個 UID 自某日期以來的變化。
執行需求
以 stdio 本機程序執行,可用 uvx 或 npx(套件名稱 swissco-mcp),也可用 pip 安裝;需要 Python 3.14 或更新版本,或使用 Docker。需要連線這六個公開資料來源。選用的 Zefix PublicREST 憑證透過 ZEFIX_USER 與 ZEFIX_PASSWORD 提供,可增加查詢欄位與名稱前綴搜尋;未提供時所有工具仍可使用。選用的 SWISSCO_STATE 指定快取目錄,SWISSCO_INTERVAL 只能調高請求間隔下限。
安裝前請注意
唯讀:僅查詢公開資料,不寫入、傳送或刪除。ZEFIX_PASSWORD 是機密,只應透過環境變數或命令列參數傳入,切勿提交至版本庫。結果不具權威性:只有簽章的公報 PDF 具法律效力;FINMA 查不到只表示不在該名單上,不代表無牌照;ARAMIS 或 LEI 查不到只表示沒有紀錄。請求會送往第三方聯邦服務,請遵守其限速要求。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Swiss company data,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

swissco

[PyPI] [Documentation]

Swiss company data from the shell. Look a company up by UID, search 790,000 of them by name or by legal purpose, list gazette publications, browse public tenders, check a bank licence, or watch a list of companies for change.

bash
uvx swissco lookup CHE-444.420.929

All data comes from six open-data sources, none of which needs a credential: Zefix on LINDAS for the commercial register, the Amtsblattportal for the Swiss Official Gazette of Commerce, simap.ch for public procurement, FINMA for authorised banks and securities firms, GLEIF for the Legal Entity Identifier and group structure, and ARAMIS for federally funded research.

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

Install

bash
uvx swissco --help          # run it without installingpip install swissco         # or install it

Python 3.14 or newer.

Docker

bash
docker run --rm prospexch/swissco search "Nestlé" --limit 5

The image runs as an unprivileged user and keeps its state — watch's seen-ids and the cached FINMA files — in /home/swissco/.swissco. Mount a volume there for anything that needs to remember what it saw last time:

bash
docker run --rm -v swissco-state:/home/swissco/.swissco \  prospexch/swissco watch --uid CHE-105.909.036

Zefix credentials, which every command works without, are passed through as environment variables:

bash
docker run --rm -e ZEFIX_USER -e ZEFIX_PASSWORD prospexch/swissco lookup CHE-105.909.036

Commands

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

swissco lookup

Everything the register publishes about one company.

console
$ swissco lookup CHE-444.420.929legal name       Baumberger Bau AGuid              CHE-444.420.929chid             CH-036.9.103.786-9ehra id          1702823legal form code  0151legal form       Schweizerische Zweigniederlassung im Handelsregister eingetragenmunicipality     Koppigencanton           BEaddress          Hauptstrasse 6, 3425 Koppigenpurpose          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.

swissco search

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

console
$ swissco search "usinage" --canton VD --limit 5LEGAL_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.

bash
swissco publications --canton ZH --since 2026-08-01swissco 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.

bash
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.

bash
printf 'CHE-444.420.929\nCHE-105.943.826\n' > uids.txtswissco 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:

crontab
0 7 * * * swissco watch ~/uids.txt --quiet --format json > ~/changes.json \          || mail -s "registry changes" [email protected] < ~/changes.json

A UID that has left the dataset is reported as no longer in the dataset, never as deleted. LINDAS carries only active entities, so a UID can leave the dataset after a re-registration, a correction, or a publication lag.

swissco tenders

Public procurement projects from simap, by canton and publication date.

console
$ swissco tenders --canton ZG --since 2026-08-25 --limit 3TITLE                                                  PROJECT_NUMBER  BUYER                           CANTON  CITY  PUBLICATION_DATE  PUBLICATION_TYPE-----------------------------------------------------  --------------  ------------------------------  ------  ----  ----------------  ----------------Neubau Pfarreizentrum, Katholische Kirchgemeinde Baar  22047           Katholische Kirchgemeinde Baar  ZG      Baar  2026-09-05        award

--canton and --type are repeatable; --lang picks which language the title and buyer are reported in. Paging is a cursor rather than an offset, so a wide range costs pages instead of failing.

The date range filters each project's newest publication, not the award inside it. A project awarded in March whose newest publication is an August correction appears only in a range covering August.

swissco vendor

Whether a company is registered as a supplier on simap.

console
$ swissco vendor CHE-409.633.691name                   Egli Gartenbau AG Surseeuid no                 CHE-409.633.691city                   Surseecanton                 LUurl                    https://www.gartenbau-egli.chcompany size           medium

A UID is resolved to a legal name, searched for, and then confirmed against the directory's own uidNo. The name finds the candidates; the UID decides between them — the directory holds both an "Egli Gartenbau AG Sursee" and an "Egli Gartenbau AG Uster".

There is no command for what a company has won. The supplier named on a simap award carries no UID, only free text typed by a procurement office. Matching those names would produce a plausible answer that is sometimes about a different company, so it is not offered.

swissco finma

FINMA's authorised banks and securities firms, joined to a UID.

console
$ swissco finma --uid CHE-105.845.287name                  Aargauische Kantonalbankcity                  Aarau 1licence type          Banksupervisory category  3uid                   CHE-105.845.287

Also swissco finma "Raiffeisen", --licence, --category, and --finma on lookup. Both files are cached for a week under the state directory.

Banks and securities firms only: FINMA licenses insurers, portfolio managers and fund management companies on separate lists this does not read. A miss means "not on this list", never "unlicensed".

swissco lei

A company's Legal Entity Identifier, and the group it is consolidated into.

console
$ swissco lei CHE-412.669.376legal name                 UBS Switzerland AGlei                        549300WOIFUSNYH0FL22registered as              CHE-412.669.376jurisdiction               CHstatus                     ACTIVEinitial registration date  2014-12-15direct parent              UBS AG (BFM8T61CT2L1QCEMIK50, CH)ultimate parent            UBS Group AG (549300SZJ9VS8SGXAN81, CH)direct children            0

--children lists what this company consolidates instead of counting it, and --lei on lookup folds the same fields into a company profile.

The parent is often foreign, and that is the reason to run this: a Swiss subsidiary's owner abroad has no commercial-register entry, so the register cannot answer the question at all.

GLEIF Level 2 records accounting consolidation: a parent is the entity that consolidates this one into its accounts, which it may do without owning all of it. About 28,000 Swiss entities hold an LEI against roughly 790,000 in the register, so a miss means "no LEI on file" and nothing more.

swissco research

Federally funded research projects from ARAMIS, the Confederation's register of research and innovation mandates. Innosuisse and SNSF money included.

console
$ swissco research CHE-337.958.399TITLE                                 PROJECT_NUMBER    OFFICE      STATUS      START_DATE  ROLEReducing Documentation Burden in S…   137.839 INNO-ICT  INNOSUISSE  In Process  2026-06-01  Implementation Partner

A UID is confirmed against each project's own participant UID, so every row reported is exact. Free text is searched as given and every hit comes back with its participating organisations. --limit caps how many candidates are hydrated, since the participant list costs one request per project, and --lang picks DE, EN, FR or IT.

ARAMIS searches project titles, abstracts and the free-text contractor field, and indexes the structured participant list under none of them. A company named only as a structured partner cannot be found, which is where Innosuisse implementation partners usually sit, so an empty result means only that no project mentions this company by name. It is not evidence that the company has taken no federal research money.

swissco reads the organisation, the role, the UID and the place off a participant. ARAMIS also publishes the researcher's name, e-mail address and telephone numbers, and none of those has a field in the parser.

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.

Use it from a coding agent

This repository ships an Agent Skill. It teaches Claude Code, Cursor, Codex and around twenty other agents how to drive swissco: every command, and the traps that quietly produce a wrong answer.

The skill is the directory .agents/skills/swissco/, the cross-client location every compliant agent scans, with .claude/skills/swissco symlinked to it so Claude Code finds it in its own. tests/test_skill.py asserts the spec's rules against it on every run, so the skill cannot drift out of the format without the suite saying so.

bash
npx skills add prospex-ch/swissco-cli

It lands in the consuming project's own .agents/skills/swissco/, symlinked into each agent's directory. Add -g to install it once for every project, --all to accept the defaults without being asked. swissco still has to be on the path or reachable through uvx.

The agent can then answer questions like "which companies in Zug mention blockchain in their purpose" or "has anything changed at CHE-105.943.826 since June" by running the right command itself.

Use it as an MCP server

The same six sources are available as an MCP server, from this repository. Nine tools, one per command except watch.

bash
claude mcp add swissco -- uvx swissco-mcp

Every tool returns rows, a count, and notes. The rows are the dicts swissco --format json prints, so a field carries the same name in both surfaces. The notes carry what each source covers, which is what turns an empty result into an answer: FINMA's list omits insurers and portfolio managers, and about 28,000 Swiss entities hold an LEI against roughly 790,000 in the register.

It lives in mcp/, ships as the PyPI package swissco-mcp and the npm package of the same name, and is registered as ch.prospex/swissco. Full reference for every tool, its arguments and its caveats: swissco-mcp.readthedocs.io.

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 [email protected]. 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.

simap. The read API answers unauthenticated. The site's robots.txt disallows the single-page app's project-detail routes, which swissco refuses outright; it says nothing about /api, where every request here goes.

FINMA. Two published files, downloaded as any browser would. FINMA republishes rather than versions them, so they are cached for a week and re-fetched after that.

GLEIF. The record API answers unauthenticated. GLEIF publishes the LEI data for anyone to use, and the terms of use state what applies.

ARAMIS. The public service answers unauthenticated and asks not to be flooded, so swissco paces it and reads one project at a time. The 43 MB bulk export sits on a host this client's allowlist omits, which is why no command can pull it.

Being a good citizen

These are small public services run by federal offices. swissco sends one request every 0.5 seconds at most — one a second for FINMA, which asks for more room — backs off exponentially on failure, and identifies itself with a real User-Agent carrying this repository's URL. --interval can raise those floors and cannot lower them.

Built on

PackageDoes
zefix-parserZefix: LINDAS SPARQL, PublicREST, UID validation
shab-parserSHAB: discovery, fetch, parse, eleven-type event classification

Both are MIT and maintained alongside this one. simap, FINMA, GLEIF and ARAMIS ship no client, so swissco carries its own for those four.

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 — including the award side of simap that this tool deliberately leaves alone — 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

來源:README.md,提交 7e14141

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.1最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分