OrbTop

Switzerland Zefix Scraper - Companies, Auditors, SHAB Events

BUSINESSLEAD GENERATIONOTHER

Switzerland Zefix Scraper - Companies, Auditors, SHAB Events

Scrape the Swiss Federal Registry of Commerce (Zefix) for company records: UID, legal form, registered seat, business purpose, address, audit firm, branch offices, and the full SHAB legal-events feed. Search by company name, single UID, or canton — covers every legally registered entity in all 26 Swiss cantons.


Switzerland Zefix Scraper Features

  • Searches Zefix by company name, exact UID (CHE-XXX.XXX.XXX), or canton.
  • Returns the canonical legal name, all language translations, and historical names — Switzerland is a four-language country, and the registry takes that seriously.
  • Pulls the full address, registered seat (Sitz), legal form, and cantonal registry-office link straight from the official source.
  • Embeds the company's SHAB (Schweizerisches Handelsamtsblatt) publication history — every board change, capital increase, merger, and liquidation event with a configurable lookback window.
  • Flags has_recent_change for any entity with a SHAB event in the last 365 days. Useful if you're running KYC alerting and care more about the diff than the snapshot.
  • Lists audit firms (Revisionsstelle), branch offices, and merger relationships so you can map a corporate group without hitting another data source.
  • Pure JSON API. No browser, no proxy, no captcha.

Who Uses Swiss Zefix Data?

  • Banks and family offices — Run KYB on Swiss counterparties before opening accounts. The address, legal form, and audit-firm fields cover most onboarding checks.
  • Fintechs and crypto firms in Zug — Verify counterparty registration and pull the SHAB feed to catch board changes that move signing authority.
  • Commodity traders (Geneva, Zug, Lugano) — Pre-fill compliance files for trading partners with structured registry data instead of PDF excerpts.
  • AML and sanctions screening — Combine legal_name, translated_names, and old_names with watchlist matching so a name change doesn't break the screen.
  • DACH-region prospecting — Pair with a Bundesanzeiger crawler to cover Germany + Switzerland in one workflow.
  • Researchers and journalists — Map Swiss corporate ownership chains by walking branch offices and merger relationships.

How Switzerland Zefix Scraper Works

  1. Pick a mode. by_name for keyword search, by_uid for a direct lookup, or by_canton to walk every active company in a canton.
  2. The scraper warms a session with Zefix and runs the search. For multi-result modes it pages through the registry until it has enough candidates.
  3. Each candidate gets a single detail fetch that returns the company record plus its embedded SHAB feed. Address, audit firms, branch offices, and merger relationships flatten into the schema.
  4. Records stream into the Apify dataset. Stop the run any time — what's already saved is yours.

Input

{
  "mode": "by_name",
  "query": "Nestle",
  "canton": "",
  "activeOnly": true,
  "includeShab": true,
  "shabLookbackYears": 3,
  "maxItems": 10
}
Field Type Default Description
mode string "by_name" by_name searches the Zefix name index, by_uid fetches one company by its CHE UID, by_canton walks active companies in a canton.
query string "Nestle" Search term for by_name (e.g. Glencore). For by_uid, paste a UID like CHE-105.909.036 or CHE105909036. Ignored for by_canton.
canton string "" Two-letter Swiss canton code. For by_name it is an optional filter. For by_canton it drives the lookup.
activeOnly boolean true Drops companies marked deleted or in liquidation.
includeShab boolean true Embeds the SHAB legal-events feed. Set false for lighter records.
shabLookbackYears integer 3 Lookback window for SHAB publications. 0 keeps all history (capped at 25 years).
maxItems integer 10 Maximum records to save. Apify's tester has a 5-min hard timeout — keep this at 15 or below for tester runs.

Single UID lookup

{
  "mode": "by_uid",
  "query": "CHE-105.909.036",
  "includeShab": true,
  "maxItems": 1
}

Walk every active company in canton Zug

{
  "mode": "by_canton",
  "canton": "ZG",
  "activeOnly": true,
  "includeShab": false,
  "maxItems": 1000
}

Find Vaud-based companies matching a name

{
  "mode": "by_name",
  "query": "Holding",
  "canton": "VD",
  "activeOnly": true,
  "maxItems": 200
}

Switzerland Zefix Scraper Output Fields

{
  "uid": "CHE105909036",
  "uid_formatted": "CHE-105.909.036",
  "chid": "CH55000672935",
  "chid_formatted": "CH-550-0067293-5",
  "ehraid": 126288,
  "legal_name": "Nestlé S.A.",
  "translated_names": ["Nestlé AG", "Nestlé Ltd."],
  "old_names": [],
  "legal_form_id": 3,
  "legal_form": "Ltd",
  "legal_form_name": "Corporation",
  "status": "EXISTIEREND",
  "is_active": true,
  "delete_date": "",
  "shab_date": "2026-04-21",
  "legal_seat": "Vevey",
  "legal_seat_id": 5890,
  "register_office_id": 550,
  "canton": "VD",
  "cantonal_excerpt_url": "https://prestations.vd.ch/pub/101266/extract?lang=FR&companyOfsUid=CHE-105.909.036",
  "address_organisation": "Nestlé S.A.",
  "address_street": "Avenue Nestlé",
  "address_house_number": "55",
  "address_zip": "1800",
  "address_town": "Vevey",
  "address_country": "CH",
  "purpose": "La participation à des entreprises industrielles, de services, commerciales et financières en Suisse et à l'étranger…",
  "audit_firms": ["Ernst & Young SA (CHE-294.400.879)"],
  "main_offices": [],
  "branch_offices": [],
  "taken_over_by": "",
  "taken_over": [],
  "shab_publications": [
    "2026-04-21 — VD — Nestlé S.A., à Vevey + Cham, CHE-105.909.036 (FOSC du 02.03.2026, p. 0/1006583861). Freixe Laurent, inscrit sans signature, n'est plus administrateur…"
  ],
  "shab_publication_count": 12,
  "has_recent_change": true,
  "zefix_url": "https://www.zefix.ch/de/search/entity/list/firm/CHE-105.909.036",
  "scraped_at": "2026-04-30T10:06:00.000Z"
}
Field Type Description
uid string Swiss Unique Enterprise Identifier without separators (e.g. CHE105909036).
uid_formatted string UID in canonical display format CHE-XXX.XXX.XXX.
chid string Legacy Swiss commercial-register ID without separators.
chid_formatted string Legacy CHID in display format CH-XXX-XXXXXXX-X.
ehraid number Internal Zefix entity ID. Stable per company; usable to refetch.
legal_name string Canonical legal name as registered (one of DE/FR/IT/RM depending on canton).
translated_names string[] Other-language translations of the legal name.
old_names string[] Historical legal names this company has used.
legal_form_id number Numeric legal-form code (1=SP, 3=Corporation/AG, 4=GmbH, 5=Cooperative, 6=Association, 7=Foundation, etc.).
legal_form string Legal-form short code in English.
legal_form_name string Legal-form full English name.
status string Registry status (EXISTIEREND, GELOESCHT, IN_AUFLOESUNG).
is_active boolean True when status is EXISTIEREND.
delete_date string Date the company was struck from the register.
shab_date string Date of the most recent SHAB publication.
legal_seat string Town/municipality of the registered seat.
legal_seat_id number Internal Zefix municipality ID.
register_office_id number Cantonal registry-office ID.
canton string Two-letter Swiss canton code derived from register_office_id.
cantonal_excerpt_url string Direct URL to the cantonal commercial-register excerpt (the official PDF source).
address_organisation string Organisation name on the registered address line.
address_care_of string c/o line on the registered address.
address_street string Street name.
address_house_number string Street number.
address_addon string Address line 2 / addon.
address_po_box string Post-office box.
address_zip string Swiss four-digit postal code.
address_town string Town/city of the registered address.
address_country string Country code (CH for Swiss-domiciled).
purpose string Business purpose / Zweck text as registered (in registration language).
audit_firms string[] Audit firms (Revisionsstelle), formatted as NAME (CHE-XXX.XXX.XXX).
main_offices string[] Main / head office linkage. Empty for top-level companies.
branch_offices string[] Branch offices (Zweigniederlassungen) with town.
taken_over_by string Successor entity that absorbed this company after a merger.
taken_over string[] Predecessor entities this company absorbed.
shab_publications string[] SHAB legal events, newest-first, formatted as YYYY-MM-DD — CANTON — message. Honours shabLookbackYears.
shab_publication_count number Number of SHAB publications kept after the lookback filter.
has_recent_change boolean True if any SHAB publication in the last 365 days.
zefix_url string Direct link to the company's record on zefix.ch.
scraped_at string ISO 8601 timestamp of when this record was fetched.

FAQ

How do I scrape Swiss company data from Zefix?

Switzerland Zefix Scraper handles the lookup for you. Pick by_name, by_uid, or by_canton, supply the query, and the actor returns flat JSON records — no PDF parsing, no language detection in your pipeline, no per-canton excerpt downloads.

What data can I get from Zefix?

Switzerland Zefix Scraper returns 35+ fields per company: UID, legal form, registered seat, full address, business purpose, audit firm, branch offices, merger relationships, every language translation of the legal name, and the SHAB legal-events feed with configurable lookback.

How much does Switzerland Zefix Scraper cost to run?

Switzerland Zefix Scraper uses Apify's pay-per-event pricing: $0.10 per actor start plus $0.001 per record. A 1,000-company run lands at roughly $1.10. The Zefix API itself is free Swiss open-government data — there are no third-party fees behind that price.

Can I filter by canton?

Switzerland Zefix Scraper supports canton in two ways. Set mode: "by_canton" with a two-letter code (ZH, BE, GE, VD, ZG, BS…) to walk every active company registered in that canton. For name-based searches, set canton as an additional filter to keep only matches whose registered seat is in that canton.

Does Switzerland Zefix Scraper need proxies?

Switzerland Zefix Scraper does not need proxies. Zefix is Swiss federal open data and the actor hits it at a polite cadence with a valid session cookie. There are no captchas, no Cloudflare layer, and no rate-limit pushback in normal use.

Does the actor return officers and directors?

Not as structured fields. Switzerland's federal registry does not publish the board roster as a separate data column — director changes appear inside SHAB publication messages. Those messages are returned in shab_publications with HTML stripped and prose cleaned. Parsing names out of multilingual SHAB text is left to the caller.


Need More Features?

Need beneficial-ownership data, structured officer extraction from SHAB messages, or a different Swiss source? File an issue or get in touch.

Why Use Switzerland Zefix Scraper?

  • First on Apify — There is no other dedicated Zefix actor. Switzerland is a top-tier KYC/AML jurisdiction and the registry has been free for years; the gap was just engineering.
  • Clean output — 35+ flat fields per company, language-translated names rolled up, SHAB events as readable strings instead of HTML soup. The JSON is ready to ship to a CRM, a screening engine, or a Snowflake warehouse without a cleanup pass.
  • Affordable — ~$0.001 per record on Apify's standard PPE profile. A full DACH KYC pull pairs cleanly with a Bundesanzeiger crawler for the German side.