# Zefix Scraper — Swiss Commercial Register Companies (`hipersoft/zefix-scraper`) Actor

Scrape Swiss companies from Zefix, the official Swiss commercial register index: name, UID, CH-ID, legal form, status, legal seat, canton, register excerpt link, plus purpose, address, former names, audit firm, branches and publication dates. Export CSV/JSON.

- **URL**: https://apify.com/hipersoft/zefix-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / company

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Zefix Scraper: Swiss Commercial Register Companies

**Zefix Scraper** extracts company records from **Zefix**, the official central business name index of the **Swiss commercial register** (Handelsregister / Registre du commerce / Registro di commercio). Search any company name or keyword and get each company's **name, UID (CHE number), CH-ID, legal form (AG, GmbH, SA, Sàrl, sole proprietorship, association, foundation, cooperative…), status (active, in liquidation, deleted), legal seat, canton, last publication date** and the link to the **cantonal register excerpt**. Turn on **Full company details** to also get the **company purpose, registered address, former names, audit firms, branch and main offices, takeovers and publication dates**. Filter by **canton, legal form and status**, and export to **CSV, Excel or JSON**. Ideal for **KYC, B2B lead generation, due diligence and Swiss market research**.

### What does Zefix Scraper do?

- 🇨🇭 **All Swiss companies** in the commercial register: AG, GmbH, SA, Sàrl, sole proprietorships, partnerships, associations, foundations, cooperatives, branches.
- 🔎 **Search by name or keyword**: bäckerei, treuhand, immobilien, consulting, any brand.
- 🗺️ **Canton filter**: all 26 cantons (ZH, BE, GE, VD, BS, TI…).
- 🏛️ **Legal form filter** using any common abbreviation (AG, GmbH, SA, Sàrl, Verein, Stiftung…).
- ✅ **Status filter**: active only, or include companies in liquidation and deleted ones.
- 🆔 **Identifiers**: UID (CHE-xxx.xxx.xxx), CH-ID and register number.
- 📄 **Register excerpt link** for each company.
- 🎯 **Company purpose** (optional): the official business purpose text.
- 📍 **Registered address** (optional).
- 🔁 **Former names, takeovers, branches and audit firms** (optional).
- 🌐 **Legal form names** in English, German, French or Italian.

### What data can you scrape from Zefix?

| Field | Description |
|---|---|
| Company | Name, UID, CH-ID, Zefix link |
| Legal | Legal form and abbreviation, status |
| Location | Legal seat, canton |
| Register | Last publication date, deletion date, register excerpt link |
| Purpose\* | Official business purpose |
| Address\* | Organisation, c/o, street, PO box, ZIP, town, country |
| History\* | Former names, takeovers, publication dates |
| Network\* | Audit firms, branch offices, main offices |

\* With **Full company details** turned on.

### Use cases for Swiss company data

- **KYC and compliance**: verify Swiss companies, UIDs, legal form and status.
- **B2B lead generation**: build lists of Swiss companies by industry keyword, canton and legal form.
- **Due diligence**: check purpose, address, former names, takeovers and auditors.
- **Market research**: count new and active companies by sector and canton.
- **CRM enrichment**: add UID, legal form and registered address to your accounts.
- **Supplier onboarding**: validate Swiss vendors automatically.

### How to scrape Zefix

1. Click **Try for free** to open Zefix Scraper in Apify Console.
2. Enter **company names or keywords**.
3. Optionally pick **cantons**, **legal forms** and **status**, and turn on **Full company details**.
4. Set **Max companies** and click **Start**.
5. Download the companies as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "searchTerms": ["bäckerei", "treuhand"],
  "cantons": ["ZH", "BE"],
  "legalForms": ["AG", "GmbH"],
  "status": "active",
  "includeDetails": true,
  "maxItems": 1000
}
```

| Field | Description |
|---|---|
| **Company names or keywords** | Words in the company name; one search each. |
| **Cantons** | Only companies in these cantons. |
| **Legal forms** | Only these legal forms (any abbreviation or name). |
| **Status** | Active only, or all. |
| **Full company details** | Adds purpose, address, former names, auditors, branches, publications. |
| **Language** | Language for legal form names. |
| **Max companies** | Stop after this many (0 = no limit). |

### Output

#### Company example (with full details)

```json
{
  "name": "Bäckerei Baggenstoss GmbH",
  "uid": "CHE-459.169.218",
  "chid": "CH-020-4050418-7",
  "ehraid": 1146842,
  "legalForm": "Limited Liability Company",
  "legalFormShort": "LLC",
  "status": "active",
  "legalSeat": "Richterswil",
  "canton": "ZH",
  "lastPublicationDate": "2015-11-09",
  "registerExcerptUrl": "https://zh.chregister.ch/cr-portal/auszug/auszug.xhtml?uid=CHE-459.169.218",
  "url": "https://www.zefix.ch/en/search/entity/list/firm/1146842",
  "purpose": "Die Gesellschaft bezweckt den Betrieb einer Bäckerei und Konditorei sowie eines Cafés…",
  "address": {
    "organisation": "Bäckerei Baggenstoss GmbH",
    "street": "Dorfstrasse 58",
    "zip": "8805",
    "town": "Richterswil",
    "country": "CH"
  },
  "formerNames": [],
  "auditFirms": [],
  "branchOffices": [],
  "publications": [],
  "search": "bäckerei"
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `name`, `uid`, `chid`, `ehraid`, `url` | mixed | Company identity. |
| `legalForm`, `legalFormShort`, `status` | string | Legal form and status. |
| `legalSeat`, `canton` | string | Location. |
| `lastPublicationDate`, `deletionDate`, `registerExcerptUrl` | string | Register info. |
| `purpose` | string | Business purpose. |
| `address` | object | Registered address. |
| `formerNames` | array | Previous names. |
| `auditFirms`, `branchOffices`, `mainOffices`, `tookOver`, `takenOverBy` | array | Related companies. |
| `publications` | array | Publication dates and IDs. |
| `search`, `scrapedAt` | string | Source info. |

### How much does it cost to scrape Zefix?

Zefix Scraper uses **pay-per-company** pricing: a small fixed price per company, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price.

### More company data

- [KVK Scraper](https://apify.com/hipersoft/kvk-scraper): Dutch Chamber of Commerce companies.
- [Europages Scraper](https://apify.com/hipersoft/europages-scraper): European B2B suppliers.

### FAQ

**What is Zefix?**
Zefix is the official central index of companies entered in the Swiss cantonal commercial registers.

**What is a UID?**
The Swiss Business Identification Number (CHE-xxx.xxx.xxx) used for tax and register purposes.

**Can I filter by canton or legal form?**
Yes. Use **Cantons** and **Legal forms** (AG, GmbH, SA, Sàrl, Verein, Stiftung, etc.).

**Does it include deleted companies?**
Set **Status** to **All** to include companies in liquidation and deleted companies.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate Zefix Scraper with other apps?**
Zefix Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to use this data?**
Commercial register data is public by law in Switzerland. You are responsible for using it in line with Swiss data protection law.

### Related Actors

- [KVK Scraper](https://apify.com/hipersoft/kvk-scraper)
- [Europages Scraper](https://apify.com/hipersoft/europages-scraper)

### Notes

Original clean-room implementation. Returns only public data. Not affiliated with the Swiss Federal Office of Justice or Zefix.

# Actor input Schema

## `searchTerms` (type: `array`):

Words in the company name, e.g. bäckerei, treuhand, immobilien, consulting, Migros. Each term is a separate search.

## `cantons` (type: `array`):

Only companies registered in these cantons.

## `legalForms` (type: `array`):

Only these legal forms, using any common abbreviation or name, e.g. AG, GmbH, SA, Sàrl, Einzelunternehmen, Verein, Stiftung, Genossenschaft.

## `status` (type: `string`):

Active companies only, or include companies in liquidation and deleted ones.

## `includeDetails` (type: `boolean`):

Also collect the company purpose, registered address, former names, audit firms, branch and main offices, takeovers and publication dates. Slower.

## `language` (type: `string`):

Language for legal form names.

## `maxItems` (type: `integer`):

Stop after this many companies. 0 means no limit.

## `proxyConfiguration` (type: `object`):

Not required for normal use.

## Actor input object example

```json
{
  "searchTerms": [
    "treuhand"
  ],
  "status": "active",
  "includeDetails": false,
  "language": "en",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "treuhand"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/zefix-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["treuhand"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/zefix-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "treuhand"
  ],
  "maxItems": 50
}' |
apify call hipersoft/zefix-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/zefix-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kLqfNgouT55eNTxaG/builds/BLsfmhxlCyDkuQDnk/openapi.json
