# Intrastat Reporter (`eloquent_mountain/intrastat-reporter`) Actor

Dutch Intrastat dispatch ledger checked row by row and returned as an IDEP+ SRL import file with a reconciliation.

- **URL**: https://apify.com/eloquent_mountain/intrastat-reporter.md
- **Developed by:** [Paco](https://apify.com/eloquent_mountain) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$36.00 / 1,000 row declareds

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

## Intrastat Reporter

Dutch Intrastat dispatch ledger checked row by row and returned as an IDEP+ SRL import file with a reconciliation.

### Who it's for

Finance controllers, customs coordinators and logistics accountants of Dutch companies that file the monthly Intrastat declaration for goods sent to other EU countries, and who start from an ERP or spreadsheet export.

### What you get

The dispatch ledger is checked row by row and returned as a text file in the CBS Standard Record Layout 2021 (134 positions), which IDEP+ reads in with its SRL import template. Each row is tested for its CN8 code against the Combined Nomenclature of the declaration year (with candidate codes for retired or mistyped codes), partner VAT number (format and VIES), destination, nature of transaction, transport mode, mass or units and euro value. Failing rows never enter the file; each finding names the row, rule, fix and authority reference.

The report reconciles rows, invoice value, net mass and units between your ledger, the excluded rows and the re-parsed file. The file comes back when at least half of the rows can be declared; otherwise you get findings only and pay nothing. A free tool looks up CN8 codes for 2024 to 2026.

### Example

"Here is our monthly export dispatch CSV of 120 invoice rows to Germany, Belgium and France: validate the CN8 commodity codes, check transaction types and partner VAT formats, and produce the CBS Intrastat upload file."

### Limits

- Dutch CBS dispatches only; arrivals and other countries are not supported.
- Up to 500 rows per call, CSV text, euro values. Add your reporter VAT number, name and CBS registration number to complete the first record.
- Which of net mass or supplementary unit a code requires is not checked (unit column not loaded). The duty to declare is not assessed; candidate codes are not a classification decision.
- Nothing is stored after the run.

### How to use

- **Run it** in Apify Console or through the API: choose what to do, fill in the fields for that tool and start. The result is one item in the run's dataset.
- **From an AI assistant** through Apify's MCP server (mcp.apify.com), which finds and runs this Actor with the same fields. What each choice does:
  - `build_intrastat_declaration`: Check a monthly intra-EU dispatch ledger for the Dutch Intrastat declaration and return a CBS Standard Record Layout 2021 file (134 positions) that IDEP+ reads in.
  - `lookup_cn8_codes`: Check commodity codes against the Combined Nomenclature list of one declaration year (2024, 2025 or 2026).

### Pricing

- Row declared: $0.036

Failed calls are never charged.

# Actor input Schema

## `tool` (type: `string`):

build_intrastat_declaration: Check a monthly intra-EU dispatch ledger for the Dutch Intrastat declaration and return a CBS Standard Record Layout 2021 file (134 positions) that IDEP+ reads in. lookup_cn8_codes: Check commodity codes against the Combined Nomenclature list of one declaration year (2024, 2025 or 2026).

## `ledger_csv` (type: `string`):

CSV text of the dispatch ledger, header line first, up to 500 rows. Used by: build_intrastat_declaration.

## `period` (type: `string`):

Month of the dispatches, e.g. Used by: build_intrastat_declaration.

## `reporter_vat` (type: `string`):

Dutch VAT number of the reporting company. Used by: build_intrastat_declaration.

## `reporter_name` (type: `string`):

Name of the reporting company. Used by: build_intrastat_declaration.

## `cbs_registration_number` (type: `string`):

CBS registration number (up to 6 digits). Used by: build_intrastat_declaration.

## `default_nature_of_transaction` (type: `string`):

2-digit code for rows without one, e.g. Used by: build_intrastat_declaration.

## `default_mode_of_transport` (type: `string`):

Digit 0-9 for rows without a mode of transport; reported as a default. Used by: build_intrastat_declaration.

## `column_map` (type: `object`):

Optional header overrides, field to column name. Used by: build_intrastat_declaration.

## `check_vies` (type: `boolean`):

Check partner VAT numbers against VIES (skipped on test calls). Used by: build_intrastat_declaration.

## `codes` (type: `array`):

1-50 commodity codes as found in a ledger. Used by: lookup_cn8_codes.

## `year` (type: `integer`):

Declaration year (CN edition). Used by: lookup_cn8_codes.

## Actor input object example

```json
{
  "tool": "lookup_cn8_codes",
  "reporter_vat": "",
  "reporter_name": "",
  "cbs_registration_number": "",
  "default_nature_of_transaction": "",
  "default_mode_of_transport": "",
  "check_vies": true,
  "codes": [
    "84109000",
    "84109010"
  ],
  "year": 2026
}
```

# Actor output Schema

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

The tool result as a dataset item, shown in the overview view.

# 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 = {
    "codes": [
        "84109000",
        "84109010"
    ],
    "year": 2026
};

// Run the Actor and wait for it to finish
const run = await client.actor("eloquent_mountain/intrastat-reporter").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 = {
    "codes": [
        "84109000",
        "84109010",
    ],
    "year": 2026,
}

# Run the Actor and wait for it to finish
run = client.actor("eloquent_mountain/intrastat-reporter").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 '{
  "codes": [
    "84109000",
    "84109010"
  ],
  "year": 2026
}' |
apify call eloquent_mountain/intrastat-reporter --silent --output-dataset

```

## MCP server setup

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

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/N7kVrIqlzBpCK9dg4/builds/zUXtfeyxqNlEU2Ntr/openapi.json
