# Swiss TARES Landed Cost: Duty and VAT (`alpine-data/swiss-tares-landed-cost`) Actor

Swiss TARES landed cost calculator: look up a tariff number or keyword in the official BAZG TARES files, get normal duty and a VAT estimate you set as Excel. Not a customs ruling.

- **URL**: https://apify.com/alpine-data/swiss-tares-landed-cost.md
- **Developed by:** [Alpine Data Labs](https://apify.com/alpine-data) (community)
- **Categories:** E-commerce, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 tariff lookups

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 TARES landed cost: duty and VAT by tariff number

Look up a **Swiss customs tariff number** (TARES, 8 digits) or a **word** such as *Pferde* or *horses*. Get the **normal duty** from the official **BAZG** files, the German and English tariff text, and a **VAT estimate** using the percent you set. Optional weight and customs value turn the rate into francs. Download **Excel**. The form and the API use the same fields.

This is **not a customs ruling**. The legal texts win. Preference rates (free-trade agreements) are not applied, because they need proof of origin.

### How to run it

1. Type a number (`0101.2110` or `01012110`) or a word. The form is filled with `0101.2110`, 100 kg and CHF 1,000.
2. Leave **VAT** at **8.1** (standard) or set **2.6** or **0**.
3. Click **Start**. The first run downloads the official chapter file and can take a minute.
4. Export **Excel**. Schedule it with **Only rates that changed** if you want a mail when the rate moves.

### What one row looks like

| Number | English text | Duty rate | Estimated duty CHF | Estimated VAT CHF |
|---|---|---|---|---|
| 0101.2110 | within the limits of the tariff quota | (from the file) | (if the unit is per 100 kg or percent) | (from your VAT percent) |

### Auf Deutsch

**TARES Landed Cost.** Warennummer oder Suchwort, optional Gewicht und Zollwert in Franken, MwSt-Satz (Standard 8.1, reduziert 2.6). Der Actor liest die kostenlosen TARES-Dateien des BAZG und rechnet den **Normalansatz**. Präferenzansätze werden nicht angewendet. Das Ergebnis ist unverbindlich. Massgebend bleibt der Gesetzestext.

### Input (form = API)

| Field | What it does | Example |
|---|---|---|
| **queries** | Number or word. Array or one string. | `0101.2110` |
| **weightKg** | For duties per 100 kg. | `100` |
| **customsValueChf** | For percent duties and VAT. | `1000` |
| **vatPercent** | Your setting. Not read from the file. | `8.1` |
| **maxMatches** | Cap when a word matches many numbers. | `5` |
| **onlyNew** | Skip an unchanged rate. | `false` |
| **alertName** | Separate memory. | `feed` |

Aliases: `query`, `tariffNumber`, `hsCode`, `keywords`, `limit`.

### Pricing

**$0.01 per tariff row.** Unchanged rows skipped by **onlyNew** are free. SILVER 10% off, GOLD and above 20% off. The download of the official file is included.

### FAQ

**Why is VAT not taken from TARES?** The published duty file does not carry the VAT category. You set 8.1, 2.6 or 0, and the row says so.

**Industrial goods are often duty-free since 2024.** When the file says 0, the row shows 0. VAT can still apply.

**Is a 6-digit HS code enough?** It is only a prefix. The Swiss 8-digit number can differ. A short code returns up to **maxMatches** numbers that start with it.

### For developers: API

`POST https://api.apify.com/v2/acts/alpine-data~swiss-tares-landed-cost/runs?token=YOUR_TOKEN`

```json
{
  "queries": ["0101.2110"],
  "weightKg": 100,
  "customsValueChf": 1000,
  "vatPercent": 8.1
}
```

An empty body runs that example.

### Data source

Free TARES data files of the Swiss Federal Office for Customs and Border Security (BAZG). The files are non-binding. This Actor is not affiliated with the BAZG.

### Related

- [Swiss company register](https://apify.com/alpine-data/swiss-company-register)
- [TED tender monitor](https://apify.com/alpine-data/ted-tender-monitor)
- [All tools](https://apify.com/alpine-data)

# Actor input Schema

## `queries` (type: `array`):

One per line. An 8-digit number (0101.2110 or 01012110), a shorter heading (0101), or a word in German or English (Pferde, horses). API: an array, or one string.

## `weightKg` (type: `number`):

Used when the normal duty is charged per 100 kg. Leave empty if you only want the rate.

## `customsValueChf` (type: `number`):

Used for percent duties and for the VAT estimate.

## `vatPercent` (type: `number`):

The tariff file does not store the VAT category. 8.1 is the standard Swiss import rate. Use 2.6 for the reduced rate or 0 to skip VAT. This is your setting, not a ruling.

## `maxMatches` (type: `integer`):

A word can match many tariff numbers. This caps how many are looked up.

## `onlyNew` (type: `boolean`):

For a scheduled run: skip a tariff number whose normal rate did not change. Unchanged rows are free.

## `alertName` (type: `string`):

Only if you watch more than one list. Each name remembers its own rates.

## Actor input object example

```json
{
  "queries": [
    "0101.2110"
  ],
  "weightKg": 100,
  "customsValueChf": 1000,
  "vatPercent": 8.1,
  "maxMatches": 5,
  "onlyNew": false,
  "alertName": ""
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

# 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 = {
    "queries": [
        "0101.2110"
    ],
    "weightKg": 100,
    "customsValueChf": 1000,
    "alertName": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("alpine-data/swiss-tares-landed-cost").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 = {
    "queries": ["0101.2110"],
    "weightKg": 100,
    "customsValueChf": 1000,
    "alertName": "",
}

# Run the Actor and wait for it to finish
run = client.actor("alpine-data/swiss-tares-landed-cost").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 '{
  "queries": [
    "0101.2110"
  ],
  "weightKg": 100,
  "customsValueChf": 1000,
  "alertName": ""
}' |
apify call alpine-data/swiss-tares-landed-cost --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alpine-data/swiss-tares-landed-cost"
        }
    }
}
```

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/tlmOKMTihai65bqTb/builds/3mxmZJxvp2v7QDyIW/openapi.json
