Zefix.ch Scraper - Swiss Commercial Register
Pricing
from $0.79 / 1,000 companies
Zefix.ch Scraper - Swiss Commercial Register
Search the Swiss Central Business Names Index (Zefix) by company name, canton, or legal form. Get UID, legal form, registered seat, address, purpose, and SOGC publication date. Export JSON, CSV, Excel.
Pricing
from $0.79 / 1,000 companies
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Zefix.ch Scraper - Swiss Commercial Register
Extract company records from Zefix — Switzerland's official Central Business Names Index (Zentraler Firmenindex), run by the Federal Statistical Office. Zefix.ch Scraper returns clean, structured JSON for every match: UID, legal form, registered seat, canton, status, full address, official purpose, and the date of its last SOGC/SHAB publication.
| Search by company name or keyword, filter by canton and legal form, or paste Zefix search URLs directly — every result is enriched from its own registry entry for the full street address, postal code, and official purpose text. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Zefix.ch Scraper (parsebird/zefix-ch-scraper) searches the Swiss commercial register (Zefix). Inputs: searchQuery (string, min 2 characters, also accepts a UID like "CHE-111.730.652"), searchUrls (array of Zefix search URLs — name/canton/legalForm query params are read from each), canton (string — 2-letter code or DE/FR/EN full name, comma-separated for multiple, e.g. "ZH,BE"), legalForm (string — AG/GmbH/Verein/Stiftung/etc, comma-separated), activeOnly (boolean, default true — excludes deleted companies), maxResults (integer, default 100, max 2000), includeDetails (boolean, default true — fetches each company's registry entry for purpose/address/postal code/city), proxyConfiguration (Apify proxy, default — Zefix has no anti-bot protection). Output per company: uid (CHE-xxx.xxx.xxx), name, legal_form, legal_seat, canton, status (active/in_liquidation/deleted), purpose, address, postal_code, city, sogc_date, register_office, registry_href, source_url, source_platform, scraped_at. Pricing: pay-per-event, two events — "company-scraped" ($0.99/1k Free down to $0.79/1k Gold) fires for every row, "company-detail" ($2.99/1k Free down to $1.49/1k Gold) fires additionally when a row is enriched with the full registry entry. API: https://apify.com/parsebird/zefix-ch-scraper/api - Token: https://console.apify.com/account/integrations
What is Zefix.ch Scraper?
Zefix.ch Scraper is an Apify Actor that extracts company data from Zefix, the Swiss Central Business Names Index maintained by the Federal Statistical Office on behalf of all 26 cantonal commercial registries. Give it a company name, a UID, or a canton/legal-form filter, and it returns every matching company as structured JSON — the same data shown on the public zefix.ch website, plus each company's full registered address and official purpose text.
Zefix has no public search API of its own for third parties; this Actor calls the same public JSON endpoint the zefix.ch website itself uses to render search results, so it works as a practical Zefix API alternative without scraping HTML.
What can Zefix.ch Scraper do?
- 🔍 Name/keyword search — matches anywhere in the company name; also accepts a UID directly (e.g.
CHE-111.730.652). - 🇨🇭 Canton filtering — restrict results to one or more of Switzerland's 26 cantons, by code or full name in German, French, or English.
- ⚖️ Legal form filtering — AG, GmbH, Einzelunternehmen, Kollektivgesellschaft, Kommanditgesellschaft, Genossenschaft, Verein, Stiftung, Zweigniederlassung, and more.
- 🟢 Active-only or full history — exclude deleted companies by default, or include them to see the full historical register.
- 🔗 Search URL mode — paste one or more
zefix.ch/en/search/entity/list?...URLs directly; canton and legal form filters are read straight from the URL. - 📄 Full registry detail — every result is enriched from its own registry entry for the complete official purpose text, street address, postal code, and city.
- ⚡ Runs on Apify with scheduling, API access, integrations, and export to JSON, CSV, Excel, HTML, or XML.
What data can you extract from Zefix?
| Field | Description |
|---|---|
uid | Swiss company UID, formatted CHE-xxx.xxx.xxx |
name | Official registered company name |
legal_form | Legal form short code (AG, GmbH, Verein, Stiftung, ...) |
legal_seat | Registered seat (municipality) |
canton | Canton code (ZH, BE, GE, ...) |
status | active, in_liquidation, or deleted |
purpose | Official company purpose text, as filed with the registry |
address | Full registered street address |
postal_code / city | Swiss postal code and city |
sogc_date | Date of the company's last SOGC/SHAB (Swiss Official Gazette of Commerce) publication |
register_office | Name of the cantonal commercial registry office |
registry_href | Direct link to the cantonal registry excerpt |
source_url / source_platform | Zefix detail-page URL and "zefix.ch" |
scraped_at | ISO 8601 scrape timestamp |
purpose, address, postal_code, and city require a registry-detail fetch (see includeDetails below) — every other field comes straight from the search result.
How to scrape Zefix
- Open Zefix.ch Scraper on Apify Store and click Try for free.
- Enter a Search query (company name, keyword, or UID).
- (Optional) Restrict to a Canton and/or Legal form, and set Max results.
- (Optional) Use Search URLs instead, to run one or more Zefix search links directly.
- Click Start, then open the Dataset tab. Export as JSON, CSV, Excel, HTML, or XML.
Input example — name + canton + legal form
{"searchQuery": "software","canton": "ZH","legalForm": "AG","activeOnly": true,"maxResults": 50}
Input example — search URL
{"searchUrls": ["https://www.zefix.ch/en/search/entity/list?name=consulting&searchType=exact&canton=BE"],"maxResults": 100}
Input example — search-level fields only (cheaper)
{"searchQuery": "consulting","canton": "Vaud","maxResults": 200,"includeDetails": false}
Output example
{"uid": "CHE-209.993.214","name": "2S-Software AG","legal_form": "AG","legal_seat": "Stammheim","canton": "ZH","status": "active","purpose": "Die Gesellschaft bezweckt die Erbringung von Dienstleistungen im Bereich Informations- und Kommunikationstechnologie...","address": "Heerenweg 7","postal_code": "8476","city": "Unterstammheim","sogc_date": "2022-02-11","register_office": "Handelsregisteramt des Kantons Zürich","registry_href": "https://zh.chregister.ch/cr-portal/auszug/auszug.xhtml?uid=CHE-209.993.214","source_url": "https://www.zefix.ch/en/search/entity/list/firm/1523485","source_platform": "zefix.ch","scraped_at": "2026-09-05T12:00:00Z"}
Download the dataset in JSON, CSV, Excel, HTML, or XML from the Dataset tab.
Swiss canton codes
| Code | Canton | Code | Canton |
|---|---|---|---|
| AG | Aargau | NW | Nidwalden |
| AI | Appenzell Innerrhoden | OW | Obwalden |
| AR | Appenzell Ausserrhoden | SG | St. Gallen |
| BE | Bern | SH | Schaffhausen |
| BL | Basel-Landschaft | SO | Solothurn |
| BS | Basel-Stadt | SZ | Schwyz |
| FR | Fribourg | TG | Thurgau |
| GE | Genève | TI | Ticino |
| GL | Glarus | UR | Uri |
| GR | Graubünden | VD | Vaud |
| JU | Jura | VS | Valais |
| LU | Luzern | ZG | Zug |
| NE | Neuchâtel | ZH | Zürich |
Pass these in canton as the code or the full German/French/English name (e.g. "ZH", "Zurich", "Zürich" all work), comma-separated for multiple cantons. Leave empty to search all cantons.
Legal forms
AG (Aktiengesellschaft / SA / Corporation), GmbH (Sàrl / LLC), Einzelunternehmen (sole proprietorship), Kollektivgesellschaft (general partnership), Kommanditgesellschaft (limited partnership), Genossenschaft (cooperative), Verein (association), Stiftung (foundation), Zweigniederlassung (branch), and a handful of rarer forms (foreign branch, investment companies, etc.). The German short code, full German/French/Italian/English name, and common abbreviations (SA, Sàrl, Ltd, LLC, ...) are all accepted in legalForm.
Use cases
- 🏢 Company research & due diligence — verify a Swiss company's legal status, registered address, and official purpose before doing business.
- 📊 Market mapping — pull every registered company for a canton and legal form combination (e.g. all Zurich AGs matching a keyword) to build a prospect list.
- 🔁 Monitoring — re-run a saved search on a schedule to catch newly registered companies or status changes (new entries, liquidations).
- 🤖 AI & data pipelines — feed structured Swiss registry data into LLM agents through the Apify MCP server.
How it works
- The Actor builds a search request from your
searchQuery/canton/legalForm, or reads them straight out of eachsearchUrlsentry. - It calls Zefix's own public search endpoint (the same one the website uses) and returns matches up to
maxResults. - If
includeDetailsis on, each result's own registry entry is fetched concurrently for the official purpose text and full street address. - Duplicate companies (by UID) across multiple queries are only pushed once.
- Each company is billed as one
company-scrapedevent; a detail-enriched company is additionally billed onecompany-detailevent.
How much does it cost to scrape Zefix.ch?
Zefix.ch Scraper uses pay-per-event pricing with two events.
| Event | When it fires | Free | Bronze | Silver | Gold |
|---|---|---|---|---|---|
company-scraped | Every company row | $0.99 / 1k | $0.89 / 1k | $0.89 / 1k | $0.79 / 1k |
company-detail | Extra, per detail-enriched row (full registry data: purpose, full address, SOGC date) | $2.99 / 1k | $2.49 / 1k | $1.99 / 1k | $1.49 / 1k |
A search-only run (includeDetails: false) of 1,000 companies costs about $0.99 on the Free plan. The default run, with full registry details included, costs about $3.98 per 1,000 companies. Apify platform usage (compute) is billed separately — Zefix has no anti-bot protection, so runs are fast and use very little platform credit. See the Apify pricing page.
API usage examples
Run Zefix.ch Scraper with the Apify API.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run_input = {"searchQuery": "software","canton": "ZH","legalForm": "AG","maxResults": 100,}run = client.actor("parsebird/zefix-ch-scraper").call(run_input=run_input)for company in client.dataset(run["defaultDatasetId"]).iterate_items():print(company["name"], "-", company["uid"], "-", company["canton"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('parsebird/zefix-ch-scraper').call({searchQuery: 'consulting',canton: 'Bern',maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((c) => `${c.name} (${c.uid})`));
Connect finished datasets to Google Sheets, Slack, Zapier, Make, webhooks, or your own pipeline.
Is it legal to scrape Zefix.ch?
Zefix.ch Scraper reads only publicly visible data — the same company records any visitor sees on zefix.ch, a public Swiss government register. It does not log in or access private account data. You should still review Zefix's Terms of Use and make sure your use case complies with applicable laws. For background, read Apify's guide: Is web scraping legal?.
Related Actors
- FirmenABC.at Scraper — Austrian company data.
- Job-Room.ch Jobs Scraper — Swiss job listings from arbeit.swiss.
- UK Companies House Scraper — UK company register data.
- Website Contact Finder — Emails, phones, and socials from any list of websites.
FAQ
Do I need a Zefix account or API key? No. The Actor uses Zefix's own public search data — no login or API key.
Why is Apify Proxy used by default if Zefix has no anti-bot protection? It's set as a sensible default for IP hygiene on sustained/scheduled runs, not because it's required — every test for this Actor passed identically with no proxy at all.
Why do I get fewer results than the total shown, even below my Max results?
Zefix's public search endpoint has no working pagination (its offset parameter is accepted but ignored) — a single request returns up to 2,000 matches. If your query has more matches than that, narrow it with a canton or legal form filter, or split it into more specific queries.
What's the minimum search query length? 2 characters. Shorter queries are rejected by Zefix's own API and are skipped with a warning in the log.
Can I search by UID instead of name?
Yes — put the UID (formatted like CHE-111.730.652, or without the dashes) in searchQuery.
What does includeDetails: false skip?
The purpose, address, postal_code, and city fields — everything else (UID, name, legal form, canton, status, SOGC date, registry link) still comes from the search result at no extra charge.
Can I schedule recurring runs? Yes. Use Apify schedules to re-run a saved search and catch newly registered companies.
Something looks wrong or missing. Report it on the Issues tab and it will be looked at quickly.