swissco: Swiss company data (Zefix, SHAB, simap)

Servidor MCP Zefix: registro comercial suíço, diário oficial SHAB, licitações simap, FINMA, GLEIF e ARAMIS.

Documentação

swissco

PyPI Documentation

Dados de empresas suíças direto do terminal. Consulte uma empresa pelo UID, pesquise entre 790.000 delas por nome ou por objeto social, liste publicações do diário oficial, navegue por licitações públicas, verifique uma licença bancária ou acompanhe uma lista de empresas em busca de alterações.

uvx swissco lookup CHE-444.420.929

Todos os dados vêm de seis fontes de dados abertas, nenhuma das quais exige credenciais: Zefix no LINDAS para o registro comercial, o Amtsblattportal para o Diário Oficial do Comércio suíço, simap.ch para compras públicas, FINMA para bancos autorizados e corretoras de valores, GLEIF para o Identificador de Entidade Legal e estrutura de grupo, e ARAMIS para pesquisa financiada pelo governo federal.

Construído e mantido pela Prospex, uma plataforma suíça de inteligência de vendas B2B.

Instalação

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

Python 3.14 ou mais recente.

Docker

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

A imagem roda como um usuário sem privilégios e mantém seu estado — os IDs já vistos de watch e os arquivos FINMA em cache — em /home/swissco/.swissco. Monte um volume lá para qualquer coisa que precise lembrar o que viu da última vez:

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

As credenciais do Zefix, sem as quais todos os comandos funcionam, são passadas como variáveis de ambiente:

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

Comandos

Todo comando aceita --format table|json|csv, --limit e --quiet.

swissco lookup

Tudo o que o registro publica sobre uma empresa.

$ 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

Aceita CHE-444.420.929, CHE444420929 ou o UID embutido em outro texto.

swissco search

Empresas por nome legal ou por objeto social: como uma empresa descreve o que faz, com suas próprias palavras, no registro.

$ 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 aceita um código de duas letras, --legal-form um código eCH-0097 (0106 é uma SA, 0107 uma GmbH).

swissco publications

Publicações do registro comercial no diário oficial, em um intervalo de datas.

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

Sem --type, apenas as páginas de lista são lidas: uma requisição a cada 2.000 publicações. Com --type, o corpo de cada publicação sobrevivente é buscado e classificado nos onze tipos de evento que shab-parser reconhece, então restrinja o intervalo e o cantão primeiro.

Intervalos além de cerca de dez dias são divididos em janelas automaticamente. A API rejeita qualquer requisição cujo deslocamento de página alcance 10.000, e o diário oficial publica cerca de mil entradas de registro comercial por dia.

swissco events

O histórico de registro de uma empresa.

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

As páginas de lista do diário oficial não trazem UID, apenas um título, então isso resolve o UID para um nome legal, mantém as publicações cujo título se parece com esse nome, depois busca esses corpos e mantém os eventos cujo próprio UID corresponde. A correspondência de título decide o que vale a pena baixar; o UID do corpo decide o que é relatado. Os corpos buscados são armazenados em cache no diretório de estado, então uma nova execução sobreposta não custa nada.

swissco watch

O que mudou desde a última vez.

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

Cada empresa é comparada por impressão digital, um resumo sobre seus campos de identidade, endereço e objeto social. Sai com 10 quando algo mudou e 0 quando nada mudou, então o cron pode ramificar com base nisso:

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

Um UID que saiu do conjunto de dados é relatado como não está mais no conjunto de dados, nunca como excluído. O LINDAS carrega apenas entidades ativas, então um UID pode sair do conjunto de dados após um novo registro, uma correção ou um atraso de publicação.

swissco tenders

Projetos de compras públicas do simap, por cantão e data de publicação.

$ swissco tenders --canton ZG --since 2026-08-25 --limit 3
TITLE                                                  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 e --type são repetíveis; --lang escolhe em qual idioma o título e o comprador são relatados. A paginação é um cursor em vez de um deslocamento, então um intervalo amplo custa páginas em vez de falhar.

O intervalo de datas filtra a publicação mais recente de cada projeto, não a adjudicação dentro dele. Um projeto adjudicado em março cuja publicação mais recente é uma correção de agosto aparece apenas em um intervalo que cubra agosto.

swissco vendor

Se uma empresa está registrada como fornecedora no simap.

$ swissco vendor CHE-409.633.691
name                   Egli Gartenbau AG Sursee
uid no                 CHE-409.633.691
city                   Sursee
canton                 LU
url                    https://www.gartenbau-egli.ch
company size           medium

Um UID é resolvido para um nome legal, pesquisado e então confirmado contra o próprio uidNo do diretório. O nome encontra os candidatos; o UID decide entre eles — o diretório contém tanto uma "Egli Gartenbau AG Sursee" quanto uma "Egli Gartenbau AG Uster".

Não existe comando para o que uma empresa venceu. O fornecedor nomeado em uma adjudicação do simap não carrega UID, apenas texto livre digitado por um escritório de compras. Corresponder esses nomes produziria uma resposta plausível que às vezes é sobre uma empresa diferente, então isso não é oferecido.

swissco finma

Bancos autorizados e corretoras de valores da FINMA, unidos a um UID.

$ swissco finma --uid CHE-105.845.287
name                  Aargauische Kantonalbank
city                  Aarau 1
licence type          Bank
supervisory category  3
uid                   CHE-105.845.287

Também swissco finma "Raiffeisen", --licence, --category e --finma em lookup. Ambos os arquivos são armazenados em cache por uma semana no diretório de estado.

Apenas bancos e corretoras de valores: a FINMA licencia seguradoras, gestores de carteiras e empresas de gestão de fundos em listas separadas que isso não lê. Uma ausência significa "não nesta lista", nunca "sem licença".

swissco lei

O Identificador de Entidade Legal de uma empresa e o grupo no qual ela é consolidada.

$ swissco lei CHE-412.669.376
legal name                 UBS Switzerland AG
lei                        549300WOIFUSNYH0FL22
registered as              CHE-412.669.376
jurisdiction               CH
status                     ACTIVE
initial registration date  2014-12-15
direct parent              UBS AG (BFM8T61CT2L1QCEMIK50, CH)
ultimate parent            UBS Group AG (549300SZJ9VS8SGXAN81, CH)
direct children            0

--children lista o que esta empresa consolida em vez de contá-la, e --lei em lookup incorpora os mesmos campos em um perfil de empresa.

A controladora costuma ser estrangeira, e essa é a razão para executar isso: o proprietário de uma subsidiária suíça no exterior não tem entrada no registro comercial, então o registro não pode responder à pergunta de forma alguma.

Os registros de Nível 2 do GLEIF documentam consolidação contábil: uma controladora é a entidade que consolida esta em suas contas, o que ela pode fazer sem possuir tudo dela. Cerca de 28.000 entidades suíças possuem um LEI contra aproximadamente 790.000 no registro, então uma ausência significa "sem LEI registrado" e nada mais.

swissco research

Projetos de pesquisa financiados pelo governo federal do ARAMIS, o registro da Confederação de mandatos de pesquisa e inovação. Dinheiro da Innosuisse e do FNS incluído.

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

Um UID é confirmado contra o UID de participante de cada projeto, então cada linha relatada é exata. Texto livre é pesquisado como fornecido e cada resultado retorna com suas organizações participantes. --limit limita quantos candidatos são hidratados, já que a lista de participantes custa uma requisição por projeto, e --lang escolhe DE, EN, FR ou IT.

O ARAMIS pesquisa títulos de projetos, resumos e o campo de texto livre do contratante, e indexa a lista estruturada de participantes sob nenhum deles. Uma empresa nomeada apenas como parceira estruturada não pode ser encontrada, que é onde os parceiros de implementação da Innosuisse costumam estar, então um resultado vazio significa apenas que nenhum projeto menciona esta empresa pelo nome. Não é evidência de que a empresa não recebeu dinheiro federal de pesquisa.

swissco lê a organização, o papel, o UID e o local de um participante. O ARAMIS também publica o nome do pesquisador, endereço de e-mail e números de telefone, e nenhum deles tem um campo no analisador.

Saída

--format é a única coisa que muda a saída. Um comando canalizado para jq e o mesmo comando observado por uma pessoa produzem bytes idênticos, então um script que funciona no seu terminal funciona em CI.

table e csv são renderizados a partir das mesmas linhas que json serializa, então uma coluna não pode aparecer em um formato e faltar em outro. Notas de progresso vão para o stderr, onde --quiet as silencia; erros vão para o stderr como um único objeto JSON.

Use a partir de um agente de codificação

Este repositório inclui uma Agent Skill. Ela ensina Claude Code, Cursor, Codex e cerca de vinte outros agentes a usar swissco: todos os comandos e as armadilhas que silenciosamente produzem uma resposta errada.

A skill é o diretório .agents/skills/swissco/, o local entre clientes que todo agente compatível verifica, com .claude/skills/swissco como link simbólico para ele, de modo que o Claude Code o encontre no seu próprio. tests/test_skill.py verifica as regras da especificação contra ele em cada execução, então a skill não pode sair do formato sem que a suíte diga isso.

npx skills add prospex-ch/swissco-cli

Ela chega no próprio .agents/skills/swissco/ do projeto consumidor, com link simbólico para o diretório de cada agente. Adicione -g para instalá-la uma vez para cada projeto, --all para aceitar os padrões sem ser perguntado. swissco ainda precisa estar no caminho ou acessível via uvx.

O agente pode então responder perguntas como "quais empresas em Zug mencionam blockchain no objeto social" ou "algo mudou na CHE-105.943.826 desde junho" executando o comando certo por conta própria.

Use como servidor MCP

As mesmas seis fontes estão disponíveis como servidor MCP, a partir deste repositório. Nove ferramentas, uma por comando, exceto watch.

claude mcp add swissco -- uvx swissco-mcp

Cada ferramenta retorna rows, um count e notes. As linhas são os dicionários que swissco --format json imprime, então um campo carrega o mesmo nome em ambas as superfícies. As notas carregam o que cada fonte cobre, que é o que transforma um resultado vazio em uma resposta: a lista da FINMA omite seguradoras e gestores de carteiras, e cerca de 28.000 entidades suíças possuem um LEI contra aproximadamente 790.000 no registro.

Ele vive em mcp/, é distribuído como o pacote PyPI swissco-mcp e o pacote npm de mesmo nome, e está registrado como ch.prospex/swissco. Referência completa para cada ferramenta, seus argumentos e suas ressalvas: swissco-mcp.readthedocs.io.

Acesso e termos

SHAB / Amtsblattportal. A API REST é o canal que o operador oferece para acesso por máquina: livremente acessível, sem autenticação para dados publicados, sem limite de taxa documentado, tamanho de página limitado a 2.000. A interface web é proibida por robots.txt, que não alcança a API. O operador isenta-se de completude, e apenas o PDF assinado é juridicamente vinculante.

Zefix no LINDAS. Publicado em opendata.swiss, sem credenciais. Os termos de uso comercial nunca foram resolvidos; a página do conjunto de dados declara o que se aplica.

Zefix PublicREST. Exige credenciais emitidas por zefix@bj.admin.ch. Todos os comandos aqui funcionam sem elas. Fornecê-las via --user/--password ou ZEFIX_USER/ZEFIX_PASSWORD adiciona capital, status, data de exclusão, nomes anteriores e relações corporativas a lookup, e uma busca por prefixo de nome a search.

simap. A API de leitura responde sem autenticação. O robots.txt do site proíbe as rotas de detalhes de projeto do aplicativo de página única, que swissco recusa terminantemente; ele não diz nada sobre /api, para onde vai toda requisição aqui.

FINMA. Dois arquivos publicados, baixados como qualquer navegador faria. A FINMA republica em vez de versioná-los, então eles são armazenados em cache por uma semana e re-buscados depois disso.

GLEIF. A API de registros responde sem autenticação. A GLEIF publica os dados de LEI para uso de qualquer pessoa, e os termos de uso declaram o que se aplica.

ARAMIS. O serviço público responde sem autenticação e pede para não ser sobrecarregado, então swissco o ritma e lê um projeto por vez. A exportação em massa de 43 MB está em um host que a lista de permissões deste cliente omite, que é o motivo pelo qual nenhum comando pode baixá-la.

Sendo um bom cidadão

Estes são pequenos serviços públicos operados por órgãos federais. swissco envia no máximo uma requisição a cada 0,5 segundos — uma por segundo para a FINMA, que pede mais espaço — recua exponencialmente em caso de falha e se identifica com um User-Agent real carregando a URL deste repositório. --interval pode aumentar esses mínimos e não pode reduzi-los.

Construído sobre

PacoteO que faz
zefix-parserZefix: LINDAS SPARQL, PublicREST, validação de UID
shab-parserSHAB: descoberta, busca, análise, classificação de eventos em onze tipos

Ambos são MIT e mantidos junto com este. simap, FINMA, GLEIF e ARAMIS não possuem cliente, então o swissco carrega o seu próprio para esses quatro.

Observando mais do que uma lista

swissco watch via cron é a versão gratuita do que o Prospex vende. O Prospex observa todo o registro continuamente, integra-o a contratações, financiamento, licitações e sinais da web — incluindo o lado de premiação do simap que esta ferramenta deliberadamente ignora — e informa quais dessas mudanças valem uma ligação. Se um job de cron e uma lista de UIDs cobrirem isso, esta ferramenta é tudo o que você precisa.

Licença

MIT