# Swiss UID & VAT Number Validator (`darikami/swiss-uid-validator`) Actor

Check Swiss business numbers (UID CHE-xxx.xxx.xxx) and VAT numbers (MWST/TVA/IVA) against the official UID register of the Federal Statistical Office: status, legal form, VAT status, and for companies the name and registered address. EU VIES does not cover Switzerland - this does.

- **URL**: https://apify.com/darikami/swiss-uid-validator.md
- **Developed by:** [DARIKAMI GmbH](https://apify.com/darikami) (community)
- **Categories:** Business, Developer tools, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 number checked in the uid registers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Swiss UID & VAT Number Validator

**Check Swiss UID and VAT numbers in bulk against the official UID register of the Swiss Federal Statistical Office (BFS).**
You get the register status, the VAT status, the legal form and, for companies, the registered name and address.
**USD 0.004 per number checked (USD 4 per 1,000).** EU VIES does not cover Switzerland. This actor does.

| Input | Found | Status | VAT status | Name |
|---|---|---|---|---|
| `CHE-102.753.938` | yes | active | active | Swisscom AG |
| `CHE-101.654.423 MWST` | yes | active | active | Swisscom (Schweiz) AG |
| `CHE-123.456.788` | no | - | - | - (valid check digit, not in the register) |
| `CHE-123.456.789` | no | - | - | - (wrong check digit: free, no register call) |
| `not a number` | no | - | - | - (not a UID: free) |

The rows come from a real cloud run of 04.11.2026. The full item is under Output.

### Who uses it

- **Invoicing and accounting tools:** check that a Swiss customer's VAT number is active before you invoice.
- **KYB and supplier onboarding:** confirm that a Swiss company exists, is active and has the stated legal form.
- **CRM clean-up:** check your Swiss UIDs once a month and flag deleted entries and ended VAT registrations.

### What it does not do

- It does not search by name. You need the number.
- Sole traders and partnerships come back without name and address (personal data, see below).
- The register allows 20 lookups a minute. 1,000 numbers take about an hour.
- Only the commercial register's publications are legally binding.

### Input

```json
{ "uids": ["CHE-102.753.938", "CHE-101.654.423 MWST", "102753938"] }
```

Any common spelling is accepted. Up to 5,000 numbers per run. The register allows 20 lookups a minute. A long list takes longer.

### Output (one item per input number)

```json
{
  "input": "CHE-101.654.423 MWST",
  "uid": "CHE-101.654.423",
  "formatValid": true,
  "found": true,
  "uidStatus": "active",
  "active": true,
  "name": "Swisscom (Schweiz) AG",
  "legalFormCode": "0106",
  "legalForm": "Company limited by shares (AG/SA)",
  "personalDataWithheld": false,
  "address": { "street": "Alte Tiefenaustrasse", "houseNumber": "6", "zip": "3050", "town": "Bern", "canton": "BE", "country": "CH" },
  "commercialRegisterId": "CH03530169309",
  "lei": "549300JLQCS5OYYYFS40",
  "vatRegistered": true,
  "vatNumber": "CHE-101.654.423 MWST",
  "vatStatus": "active",
  "vatEntryDate": "1998-01-01",
  "vatLiquidationDate": null,
  "message": null,
  "checkedAt": "2026-11-03T02:16:19.497Z",
  "source": "UID register of the Swiss Federal Statistical Office (uid.admin.ch), public services"
}
```

### Pricing (pay per event)

| Event | Price | When |
|---|---|---|
| `uid-checked` | **USD 0.004** | one number looked up in the register - found or not found |

Free: numbers that fail the check-digit test (no register call), and numbers the register could not be reached
for. 1,000 checks cost USD 4.

### Personal data

Entries of natural persons - sole proprietorships, general and limited partnerships, simple partnerships, and
entries without a legal form - come back with `personalDataWithheld: true`: existence, status and VAT status only,
**no name, no address, no IDs**. Address lines that may name a person (`c/o ...`) are not returned for anyone.
There is no search by name.

A company named after a person keeps its name, because it is a legal person.

### Data source and terms

- **Source:** UID register public services V5.0, `https://www.uid-wse.admin.ch/V5.0/PublicServices.svc`, operated by
  the Federal Statistical Office (BFS), interface specification eCH-0108 v5.
- **Terms (read 03.11.2026):** the public functions - VAT number check and search of entries with public UID status -
  need no registration and are free of charge; limited to **20 requests per minute**, a caller above it is blocked
  for a while (Federal Chancellery, page "UID-Webservice"). The BFS interface specification 5.0 names the terms of
  use as open data with **attribution** - every item carries `source`.
- Only the commercial register's publications are legally binding; this actor reports the UID register's state at
  `checkedAt`.

### Run summary

The run summary is in the default key-value store under `SUMMARY`, the counts under `STATS`.
The data comes as the source publishes it, without warranty.

**More official-data actors by darikami:** [Swiss electricity tariffs](https://apify.com/darikami/swiss-electricity-tariffs) · [Swiss federal law MCP](https://apify.com/darikami/swiss-federal-law-mcp) · [SEC company fundamentals](https://apify.com/darikami/sec-company-fundamentals) · [German public tenders](https://apify.com/darikami/german-public-tenders).
In an AI agent: ask the Apify MCP server (`mcp.apify.com`) for `darikami/swiss-uid-validator`.

# Actor input Schema

## `uids` (type: `array`):

Swiss UIDs or VAT numbers, one per line, in any common form: CHE-123.456.788, CHE123456788, CHE-123.456.788 MWST/TVA/IVA, or the nine digits. Up to 5,000 per run. The register allows 20 lookups a minute, so 100 numbers take about 5-6 minutes.

## Actor input object example

```json
{
  "uids": [
    "CHE-102.753.938",
    "CHE-101.654.423 MWST"
  ]
}
```

# Actor output Schema

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

One item per input number: UID, register status, legal form, VAT status, and for legal entities the name and address.

## `summary` (type: `string`):

SUMMARY record: pushed, charged, attempts, errors, stoppedByBudget, ok, message.

# 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 = {
    "uids": [
        "CHE-102.753.938",
        "CHE-101.654.423 MWST"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("darikami/swiss-uid-validator").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 = { "uids": [
        "CHE-102.753.938",
        "CHE-101.654.423 MWST",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("darikami/swiss-uid-validator").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 '{
  "uids": [
    "CHE-102.753.938",
    "CHE-101.654.423 MWST"
  ]
}' |
apify call darikami/swiss-uid-validator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,darikami/swiss-uid-validator"
        }
    }
}
```

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/9ncjPG6qecdhGWBIg/builds/c9P367MdzptNnNpWT/openapi.json
