# IBAN, SWIFT/BIC & VAT Number Validator (bulk) (`omararida/finance-id-validator`) Actor

Validate IBANs (checksum + country format), SWIFT/BIC codes and VAT numbers (live VIES & HMRC lookup with company name) in bulk. Clean vendor master data before ERP import.

- **URL**: https://apify.com/omararida/finance-id-validator.md
- **Developed by:** [Omar Arida](https://apify.com/omararida) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 identifier validateds

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

## IBAN, SWIFT/BIC & VAT Number Validator (bulk)

Clean your vendor and customer master data **before** it reaches NetSuite, SAP, Dynamics or your payment run. Paste hundreds or thousands of **IBANs, SWIFT/BIC codes and VAT numbers** and get back a row per item saying whether it is valid, why not, and – for VAT numbers – the **officially registered company name and address**.

Built by a NetSuite-certified consultant who got tired of payment files bouncing because of one mistyped IBAN.

### What it checks

| Type | Checks | Extra data returned |
| --- | --- | --- |
| **IBAN** | Country code known, correct length for that country, **mod-97 checksum** | Formatted IBAN, BBAN, bank/branch/account numbers for DE, GB, FR, NL, ES, IT, AE, SA, EG |
| **SWIFT / BIC** | 8 or 11 character structure, valid country | Bank code, location, branch, test/passive BIC flags |
| **VAT (EU)** | Format, then **live VIES lookup** | Registered name, address, VIES request date |
| **VAT (UK)** | Format, then **live HMRC lookup** | Registered name, address |
| **VAT (other)** | Format only | – |

Types are **auto-detected**, so you can mix everything in one list.

### Who uses it

- AP / procurement teams onboarding new vendors
- NetSuite & ERP admins cleaning data before CSV import
- Finance shared-service centers validating payment files
- E-commerce and SaaS billing teams checking B2B customers' VAT numbers for reverse-charge invoicing
- AI agents (via Apify MCP) that need a trustworthy validation tool

### Input

Simple list:

```json
{
    "items": ["DE89 3704 0044 0532 0130 00", "GB29NWBK60161331926819", "DEUTDEFF", "DE811907980", "IE6388047V"],
    "lookupVat": true
}
```

With your own reference IDs (so you can join results back to your vendor file):

```json
{
    "items": [
        { "value": "FR7630006000011234567890189", "type": "iban", "reference": "VENDOR-1042" },
        { "value": "NL999999999B01", "type": "vat", "reference": "VENDOR-1042" }
    ]
}
```

| Field | Description | Default |
| --- | --- | --- |
| `items` | Strings or `{value, type?, reference?}` objects | – |
| `defaultType` | `auto`, `iban`, `bic` or `vat` | `auto` |
| `lookupVat` | Live VIES / HMRC registry lookup | `true` |
| `maxItems` | Safety cap | `10000` |

### Output

```json
{
    "reference": "VENDOR-1042",
    "input": "DE89 3704 0044 0532 0130 00",
    "normalized": "DE89370400440532013000",
    "type": "iban",
    "valid": true,
    "status": "valid",
    "reason": null,
    "country": "DE",
    "details": {
        "checkDigits": "89",
        "bban": "370400440532013000",
        "formatted": "DE89 3704 0044 0532 0130 00",
        "bankCode": "37040044",
        "accountNumber": "0532013000"
    },
    "checkedAt": "2026-10-29T20:00:00.000Z"
}
```

`status` is one of `valid`, `invalid`, `unknown_type` or `lookup_failed` (registry temporarily unavailable – retry later; the format check still ran). Download as JSON, CSV or Excel from the run's dataset.

### Pricing

Pay per event: a small amount **per identifier validated**. Set a maximum cost per run in the Apify Console and the Actor stops at your limit.

### Use from code or AI agents

```bash
curl "https://api.apify.com/v2/acts/omararida~finance-id-validator/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
  -X POST -H 'Content-Type: application/json' \
  -d '{"items":["DE89370400440532013000","DE811907980"]}'
```

Works through the [Apify MCP server](https://mcp.apify.com) for Claude, ChatGPT and other agents.

### Notes & limits

- IBAN validation proves the number is *well-formed*, not that the account exists – no bank can confirm that publicly.
- VIES and HMRC are official but occasionally rate-limit or go down; such rows come back as `lookup_failed` so you can re-run only those.
- Nothing you submit is stored anywhere except your own run's dataset.

### Support

Need another country's bank-code breakdown or a different registry? Open an issue on the Actor's **Issues** tab.

# Actor input Schema

## `items` (type: `array`):

One identifier per line. Type is auto-detected. For API use you can also pass objects: {"value": "DE89370400440532013000", "type": "iban", "reference": "VENDOR-1042"}.

## `defaultType` (type: `string`):

Force a type for every item, or let the Actor detect it.

## `lookupVat` (type: `boolean`):

EU numbers are checked live against VIES and UK numbers against HMRC, returning the registered company name and address. Turn off for format-only checks.

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

Safety cap on the number of identifiers processed (and charged).

## Actor input object example

```json
{
  "items": [
    "DE89 3704 0044 0532 0130 00",
    "GB29NWBK60161331926819",
    "DEUTDEFF",
    "DE811907980",
    "IE6388047V"
  ],
  "defaultType": "auto",
  "lookupVat": true,
  "maxItems": 10000
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "items": [
        "DE89 3704 0044 0532 0130 00",
        "GB29NWBK60161331926819",
        "DEUTDEFF",
        "DE811907980",
        "IE6388047V"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("omararida/finance-id-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 = { "items": [
        "DE89 3704 0044 0532 0130 00",
        "GB29NWBK60161331926819",
        "DEUTDEFF",
        "DE811907980",
        "IE6388047V",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("omararida/finance-id-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 '{
  "items": [
    "DE89 3704 0044 0532 0130 00",
    "GB29NWBK60161331926819",
    "DEUTDEFF",
    "DE811907980",
    "IE6388047V"
  ]
}' |
apify call omararida/finance-id-validator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omararida/finance-id-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/KpKP7wAOx88VFaRme/builds/4AKRN85pGT96jsC29/openapi.json
