# IBAN Validator & Bank Lookup (BIC, Bank Name) – Bulk (`fast_data_asap/iban-validator-bank-lookup`) Actor

Validate IBANs in bulk, offline: country length + BBAN structure for all IBAN countries, MOD-97 and national checksums, SEPA flag. Bank name, BIC and city from the official Bundesbank BLZ file and official registries of 20+ countries. No external APIs.

- **URL**: https://apify.com/fast_data_asap/iban-validator-bank-lookup.md
- **Developed by:** [Fast Data](https://apify.com/fast_data_asap) (community)
- **Categories:** 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

$0.50 / 1,000 iban 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 Validator & Bank Lookup (BIC, Bank Name) – Bulk, Offline-Fast

Validate thousands of IBANs in seconds and find out which bank is behind each one. Everything runs **offline inside the actor** – no third-party IBAN API is ever called, so your account data never leaves the run.

### What it does

For every IBAN you supply it:

- **Normalises** the input (spaces, dashes, lower case and an `IBAN` prefix are fine) and formats it in groups of 4.
- Checks the **country code** and the **country-specific length** for all countries in the SWIFT IBAN registry.
- Checks the **BBAN structure** (e.g. DE: 8-digit Bankleitzahl + 10-digit account; FR: bank, branch, account, RIB key).
- Verifies the **ISO 7064 MOD-97 checksum** (the 2 check digits).
- Verifies the **national account checksum** where an algorithm is known (DE, FR, ES, IT, BE, …) – catches typos the IBAN checksum alone may miss.
- Flags **SEPA** membership.
- **Bank lookup**: bank name, BIC and city.
  - **Germany**: official **Deutsche Bundesbank Bankleitzahlendatei**, downloaded fresh at build time (`dataSourceDate` shows the validity date of the file, e.g. `2026-09-07`).
  - **Other countries**: bank name and BIC from official central-bank registries (AT, BE, CH, CZ, ES, FI, FR, IT, NL, PL, SE, SK, … via the open-source *schwifty* registry). Where no data exists, `bankCode` is still returned.

> **Note:** a valid IBAN only proves that the number is correctly formed. It does **not** prove that the account exists, is open, or belongs to a particular person. Use a bank-side check (e.g. Verification of Payee) for that.

### Who it's for

Finance and accounting teams cleaning vendor master data, e-commerce and SaaS checkouts collecting SEPA mandates, CRM/ERP imports, fintech onboarding, and AI agents that need a reliable IBAN check tool.

### Why it's better

- **Bank name + BIC + city**, not just "valid / invalid" – with the official Bundesbank file for Germany.
- **National checksums** on top of MOD-97 for stricter validation.
- **Offline & private**: no external API calls, no rate limits; 1,000s of IBANs per second.
- **Cheap**: $0.0005 per IBAN, malformed inputs are free.
- **Flat, AI-friendly output** with a clear `error` text per row.

### Input

```json
{
  "ibans": [
    "DE89370400440532013000",
    "GB82 WEST 1234 5698 7654 32",
    "NL91ABNA0417164300",
    "FR1420041010050500013M02606",
    "DE89370400440532013001"
  ],
  "includeBankInfo": true
}
```

### Output (real values from a test run)

```json
{
  "input": "DE89370400440532013000",
  "iban": "DE89 3704 0044 0532 0130 00",
  "countryCode": "DE",
  "country": "Germany",
  "valid": true,
  "checksumValid": true,
  "lengthValid": true,
  "formatValid": true,
  "nationalChecksumValid": true,
  "sepa": true,
  "bankCode": "37040044",
  "branchCode": null,
  "accountNumber": "0532013000",
  "bankName": "Commerzbank",
  "bic": "COBADEFFXXX",
  "bankCity": "Köln",
  "bankDataSource": "Deutsche Bundesbank Bankleitzahlendatei",
  "dataSourceDate": "2026-09-07",
  "error": null
}
```

A wrong check digit (`DE89370400440532013001`) returns `"valid": false, "checksumValid": false, "error": "Invalid IBAN check digits (MOD-97)"`. `NL91ABNA0417164300` returns `"bankName": "ABN AMRO BANK N.V.", "bic": "ABNANL2A"`.

| Field | Meaning |
|---|---|
| `valid` | Length, BBAN structure, MOD-97 and (where known) national checksum all OK |
| `checksumValid` / `lengthValid` / `formatValid` / `nationalChecksumValid` | Individual checks (`null` = not applicable / not checkable) |
| `sepa` | Country is in the SEPA zone |
| `bankCode`, `branchCode`, `accountNumber` | Parts of the BBAN |
| `bankName`, `bic`, `bankCity` | Bank lookup (city for DE) |
| `bankDataSource`, `dataSourceDate` | Where the bank data comes from and how fresh it is |
| `error` | Human-readable reason when something fails |

### Pricing

Pay per event: **$0.0005 per IBAN** (`iban` event) for every well-formed IBAN of an IBAN country – including the bank lookup. Inputs that are not IBANs at all, or from countries without IBAN, are free. 10,000 IBANs = $5.

### Use via API, n8n, Make or MCP

- **API**: `POST https://api.apify.com/v2/acts/fast_data_asap~iban-validator-bank-lookup/run-sync-get-dataset-items?token=<TOKEN>` with the input JSON above.
- **n8n / Make / Zapier**: use the Apify integration, actor `fast_data_asap/iban-validator-bank-lookup`.
- **MCP (Claude, Cursor, other AI agents)**: `https://mcp.apify.com?tools=fast_data_asap/iban-validator-bank-lookup`

### Data sources

- IBAN formats: SWIFT IBAN registry (bundled).
- Germany: Deutsche Bundesbank, Bankleitzahlendatei (public download, refreshed whenever the actor is rebuilt).
- Other countries: official national bank-code lists as compiled by the open-source [schwifty](https://github.com/mdomke/schwifty) library (MIT).

# Actor input Schema

## `ibans` (type: `array`):

IBANs to validate, one per line. Spaces, dashes and an 'IBAN' prefix are ignored; lower case is fine.

## `includeBankInfo` (type: `boolean`):

Look up the bank behind the bank code. Germany: official Deutsche Bundesbank Bankleitzahlendatei. Other countries: official registries where available (AT, BE, CH, ES, FR, IT, NL, PL and more).

## Actor input object example

```json
{
  "ibans": [
    "DE89370400440532013000",
    "GB82 WEST 1234 5698 7654 32",
    "NL91ABNA0417164300",
    "FR1420041010050500013M02606",
    "DE89370400440532013001"
  ],
  "includeBankInfo": true
}
```

# Actor output Schema

## `results` (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 = {
    "ibans": [
        "DE89370400440532013000",
        "GB82 WEST 1234 5698 7654 32",
        "NL91ABNA0417164300",
        "FR1420041010050500013M02606",
        "DE89370400440532013001"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fast_data_asap/iban-validator-bank-lookup").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 = { "ibans": [
        "DE89370400440532013000",
        "GB82 WEST 1234 5698 7654 32",
        "NL91ABNA0417164300",
        "FR1420041010050500013M02606",
        "DE89370400440532013001",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fast_data_asap/iban-validator-bank-lookup").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 '{
  "ibans": [
    "DE89370400440532013000",
    "GB82 WEST 1234 5698 7654 32",
    "NL91ABNA0417164300",
    "FR1420041010050500013M02606",
    "DE89370400440532013001"
  ]
}' |
apify call fast_data_asap/iban-validator-bank-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fast_data_asap/iban-validator-bank-lookup"
        }
    }
}
```

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/KAqXoalHzWNi3Tkd5/builds/CQADTVHl3xKf7v3kV/openapi.json
