Zefix.ch Scraper - Swiss Commercial Register avatar

Zefix.ch Scraper - Swiss Commercial Register

Pricing

from $0.79 / 1,000 companies

Go to Apify Store
Zefix.ch Scraper - Swiss Commercial Register

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

ParseBird

Maintained by Community

Actor 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?

FieldDescription
uidSwiss company UID, formatted CHE-xxx.xxx.xxx
nameOfficial registered company name
legal_formLegal form short code (AG, GmbH, Verein, Stiftung, ...)
legal_seatRegistered seat (municipality)
cantonCanton code (ZH, BE, GE, ...)
statusactive, in_liquidation, or deleted
purposeOfficial company purpose text, as filed with the registry
addressFull registered street address
postal_code / citySwiss postal code and city
sogc_dateDate of the company's last SOGC/SHAB (Swiss Official Gazette of Commerce) publication
register_officeName of the cantonal commercial registry office
registry_hrefDirect link to the cantonal registry excerpt
source_url / source_platformZefix detail-page URL and "zefix.ch"
scraped_atISO 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

  1. Open Zefix.ch Scraper on Apify Store and click Try for free.
  2. Enter a Search query (company name, keyword, or UID).
  3. (Optional) Restrict to a Canton and/or Legal form, and set Max results.
  4. (Optional) Use Search URLs instead, to run one or more Zefix search links directly.
  5. Click Start, then open the Dataset tab. Export as JSON, CSV, Excel, HTML, or XML.
{
"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

CodeCantonCodeCanton
AGAargauNWNidwalden
AIAppenzell InnerrhodenOWObwalden
ARAppenzell AusserrhodenSGSt. Gallen
BEBernSHSchaffhausen
BLBasel-LandschaftSOSolothurn
BSBasel-StadtSZSchwyz
FRFribourgTGThurgau
GEGenèveTITicino
GLGlarusURUri
GRGraubündenVDVaud
JUJuraVSValais
LULuzernZGZug
NENeuchâtelZHZü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.

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

  1. The Actor builds a search request from your searchQuery/canton/legalForm, or reads them straight out of each searchUrls entry.
  2. It calls Zefix's own public search endpoint (the same one the website uses) and returns matches up to maxResults.
  3. If includeDetails is on, each result's own registry entry is fetched concurrently for the official purpose text and full street address.
  4. Duplicate companies (by UID) across multiple queries are only pushed once.
  5. Each company is billed as one company-scraped event; a detail-enriched company is additionally billed one company-detail event.

How much does it cost to scrape Zefix.ch?

Zefix.ch Scraper uses pay-per-event pricing with two events.

EventWhen it firesFreeBronzeSilverGold
company-scrapedEvery company row$0.99 / 1k$0.89 / 1k$0.89 / 1k$0.79 / 1k
company-detailExtra, 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 ApifyClient
client = 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.

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

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.