Switzerland Company Registry Scraper (Zefix, UID) avatar

Switzerland Company Registry Scraper (Zefix, UID)

Pricing

from $11.54 / 1,000 results

Go to Apify Store
Switzerland Company Registry Scraper (Zefix, UID)

Switzerland Company Registry Scraper (Zefix, UID)

Search the Swiss company registry by name or UID and extract structured records: UID (CHE), name, legal form, full address and canton, status, purpose, publications and mutations. Export to JSON, CSV or Excel.

Pricing

from $11.54 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Share

Switzerland Company Registry Scraper (Zefix, UID)

Switzerland Company Registry Scraper (Zefix, UID)

Here is one real result, with every field the actor returns:

{
"uid": "CHE108731444",
"uidFormatted": "CHE-108.731.444",
"chid": "CH23207303779",
"chidFormatted": "CH-232-0730377-9",
"ehraid": 447194,
"name": "Nestlé Enterprises SA",
"legalFormId": 3,
"legalForm": "Corporation",
"status": "EXISTIEREND",
"statusLabel": "Active",
"deleted": false,
"deleteDate": null,
"legalSeat": "Vevey",
"canton": "VD",
"registryOffice": "Registre du commerce du Canton de Vaud",
"registerOfficeId": 550,
"lastPublicationDate": "2026-05-04",
"cantonalExcerptUrl": "https://prestations.vd.ch/pub/101266/extract?lang=FR&companyOfsUid=CHE-108.731.444",
"zefixUrl": "https://www.zefix.ch/en/search/entity/list/firm/447194",
"address": {
"careOf": null,
"street": "Entre deux Villes",
"houseNumber": "12",
"addon": null,
"poBox": null,
"postalCode": "1800",
"town": "Vevey",
"country": "CH"
},
"purpose": "la société a pour but la fabrication, la vente et la distribution en Suisse et à l'étranger de tous produits, notamment alimentaires, diététiques, pharmaceutiques, médicaux, cosmétiques et hygiéniques. [trimmed]",
"alternativeNames": ["Nestlé Enterprises Ltd"],
"oldNames": ["[object Object]", "[object Object]", "[object Object]"],
"auditFirms": [
{
"name": "Ernst & Young SA",
"uid": "CHE294400879",
"uidFormatted": "CHE-294.400.879",
"chid": "CH55001399418",
"chidFormatted": "CH-550-0139941-8",
"legalSeat": "Renens (VD)"
}
],
"publications": [
{
"date": "2026-05-04",
"canton": "VD",
"journalDate": "2026-04-29",
"journalId": 9137,
"mutationTypes": ["aenderungorgane"]
}
],
"scrapedAt": "2026-08-10T00:00:00.000Z",
"error": null
}

Note: the purpose value is trimmed to its opening sentence for readability (the real field returns the full multi-sentence statute of purpose), and publications is trimmed to one of the company's registry entries. Every value shown is exactly as returned. oldNames is shown exactly as the source currently serializes it (object placeholders); scrapedAt is shown as a representative ISO timestamp.

The most complete Swiss company registry scraper available. It returns every field Zefix exposes for a company, including UID and CHID identifiers, registered address, statute of purpose, audit firms, and the full list of registry publications and mutations, and gives you name and UID lookup with canton, legal-form, and status filters plus an optional contact-enrichment add-on to target exactly the companies you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches the Swiss central company index (Zefix) by company name or UID, resolves each match, and writes one normalized record per company to the run's dataset. With withDetails on it fetches the full registered record for each company: registered address, purpose, alternative and former names, audit firm, and the list of registry publications and mutations. Missing source values are returned as null.

Data covers companies in the Swiss commercial register. A UID such as CHE-105.909.036 (or CHE105909036) is looked up directly; any other text is a name search that returns every matching company across all cantons unless you filter.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 active companies matching the name, each with its full registered record.

{
"maxCompanies": 10,
"query": "Nestlé",
"activeOnly": true,
"withDetails": true
}

Pass a UID in query for a direct lookup, or add canton and legalForm filters to narrow a name search. query is required; all other inputs are optional.

Input reference

FieldTypeRequiredDefaultDescription
querystringyesNestléA company name (or part of it) to search for, or a Swiss UID (for example CHE-105.909.036 or CHE105909036) to look up a company directly.
maxCompaniesintegerno10Maximum number of company records to collect. Range 1 to 5000.
cantonenumno(any)Restrict results to one Swiss canton (two-letter code, for example ZH, VD, GE). Empty searches all of Switzerland.
legalFormenumno(any)Restrict to one legal form by ID (for example 3 Corporation, 4 Limited liability company). Empty returns any form.
activeOnlybooleannotrueOnly companies still on the register. Turn off to also include deleted (struck off) companies.
withDetailsbooleannotrueFetch the full record per company: registered address, purpose, alternative and former names, audit firm, and registry publications and mutations.
enrichContactsbooleannofalseOptional paid add-on. For each result without an email, attempt to find a public business contact email and a contact person's name. Billed per attempt, plus an extra charge only when an email is found.
enrichContactsMaxintegerno50Cap how many results the add-on tries to enrich. Free Apify accounts are capped at 3.

Filters combine with logical AND on a name search.

Output reference

One dataset item per company. Types: string, integer, boolean, object, object[], string[], or null when the source value is absent. Fields marked (details) require withDetails; fields marked (enrich) require the contact add-on.

FieldTypeDescription
uidstringUID without separators (for example CHE108731444).
uidFormattedstringFormatted UID (for example CHE-108.731.444).
chidstringCommercial register ID without separators.
chidFormattedstringFormatted commercial register ID.
ehraidintegerZefix internal entity ID.
namestringRegistered company name.
legalFormIdintegerLegal form ID.
legalFormstringLegal form label.
statusstringRaw registry status (for example EXISTIEREND).
statusLabelstringStatus label in English (for example Active).
deletedbooleanWhether the company is struck off.
deleteDatestringDeletion date (YYYY-MM-DD), or null.
legalSeatstringRegistered legal seat (municipality).
cantonstringCanton code.
registryOfficestringCantonal registry office name (details).
registerOfficeIdintegerRegistry office ID (details).
lastPublicationDatestringDate of the most recent registry publication (details).
cantonalExcerptUrlstringURL to the cantonal register excerpt (details).
zefixUrlstringZefix entity page URL.
addressobjectRegistered address (street, houseNumber, postalCode, town, country, and more) (details).
purposestringStatute of purpose text (details).
alternativeNamesstring[]Alternative registered names (details).
oldNamesstring[]Former names (details).
auditFirmsobject[]Audit firms with their own UID and seat (details).
publicationsobject[]Registry publications and mutations, each with date, canton, journal, and mutation types (details).
scrapedAtstringISO 8601 timestamp of when the record was collected.
enrichedEmailstringPublic business contact email found by the add-on (enrich), or null.
enrichedContactNamestringContact person's name found by the add-on (enrich), or null.
enrichedJobTitlestringContact person's job title (enrich), or null.
enrichedEmailStatusstringVerification status of the found email (enrich), or null.
enrichedSourcestringWhere the contact was found (enrich), or null.
enrichedConfidencenumberConfidence score for the found contact (enrich), or null.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"query": "Nestlé", "maxCompanies": 10, "withDetails": true}):

{
"uid": "CHE108731444",
"uidFormatted": "CHE-108.731.444",
"ehraid": 447194,
"name": "Nestlé Enterprises SA",
"legalForm": "Corporation",
"statusLabel": "Active",
"deleted": false,
"legalSeat": "Vevey",
"canton": "VD",
"registryOffice": "Registre du commerce du Canton de Vaud",
"lastPublicationDate": "2026-05-04",
"zefixUrl": "https://www.zefix.ch/en/search/entity/list/firm/447194",
"address": { "street": "Entre deux Villes", "houseNumber": "12", "postalCode": "1800", "town": "Vevey", "country": "CH" },
"alternativeNames": ["Nestlé Enterprises Ltd"],
"auditFirms": [
{ "name": "Ernst & Young SA", "uidFormatted": "CHE-294.400.879", "legalSeat": "Renens (VD)" }
]
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~switzerland-companies-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query":"Nestlé","maxCompanies":10,"withDetails":true}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~switzerland-companies-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query":"CHE-105.909.036","withDetails":true}'

Apify CLI:

apify call scrapers_lat/switzerland-companies-scraper \
--input '{"query":"bank","canton":"ZH","legalForm":"3","maxCompanies":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per company returned (result event). See the pricing tab for the current per-result price.
  • Detail add-on. When withDetails is on, each company whose full record is fetched charges a small details event on top of the result price. Turn withDetails off to avoid it.
  • Contact enrichment add-on (optional, off by default). When enrichContacts is on, each attempt charges a contact-search-attempt event, plus a contact-email-found event only when an email is found. enrichContactsMax caps how many results are attempted (free accounts capped at 3).
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results and add-on events.
  • Free Apify plans are capped at 10 companies per run. Upgrade for higher maxCompanies.

FAQ and troubleshooting

A run returned 0 records. Why? The name or UID matched nothing, or your canton / legalForm filter excluded every match. Loosen the filters or check the UID. Zero-result runs are not charged.

How do I look up one company by UID? Put the UID in query, for example CHE-105.909.036 or CHE105909036. It is resolved directly without a name search.

How do I include struck-off companies? Turn activeOnly off. Deleted companies are then included, with deleted true and a deleteDate.

Why is purpose or address missing? Detail fields require withDetails to be enabled. With it off, the actor returns the lighter search fields only.

Is this an official Zefix or federal tool? No. This actor is independent and has no affiliation with Zefix or the Swiss Federal Office of Justice. It reads only data that is publicly available in the Swiss commercial register.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Zefix or the Swiss Federal Office of Justice. Accesses only publicly available commercial register data.