# IBAN Validator API (`maximedupre/iban-validator`) Actor

Validate IBANs in one run with country structure checks and the ISO 13616 MOD-97 checksum. Get the submitted value, normalized formats, country details when available, SEPA membership, and a clear diagnostic status for each row.

- **URL**: https://apify.com/maximedupre/iban-validator.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 iban checks

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### ✅ IBAN checks for payment and data teams

Finance teams, accounts-payable staff, and developers can check a list of IBANs in one run. The Actor returns the submitted value, machine-ready and grouped formats, country details when available, separate structure and checksum checks, SEPA membership, and a diagnostic status for each IBAN. Use these rows to catch malformed bank details before they enter a payment or data workflow.

- Check a list of IBANs with **[IBAN Validator](https://apify.com/maximedupre/iban-validator/examples/iban-validator)** and review one validation row per submitted value.
- Catch check-digit mistakes with **[IBAN Checksum Validator](https://apify.com/maximedupre/iban-validator/examples/iban-checksum-validator)** before using an IBAN in a payment file.
- Review country structure and length with **[IBAN Format Checker](https://apify.com/maximedupre/iban-validator/examples/iban-format-checker)** for each submitted value.
- Use **[IBAN Validation](https://apify.com/maximedupre/iban-validator/examples/iban-validation)** to separate valid IBANs from clear diagnostic statuses.
- Test an example value with **[IBAN Number Example](https://apify.com/maximedupre/iban-validator/examples/iban-number-example)** and see its normalized forms and checks.

#### 📦 IBAN validation rows at a glance

Each submitted IBAN creates one dataset row. The row keeps the original value and adds electronic and print formats, validity flags, parsed country details when available, length checks, check digits, BBAN data, SEPA membership, and a diagnostic status.

#### ▶️ Run an IBAN list step by step

1. Open the Actor and add one or more values to **IBANs**.
2. Put each value in its own list item.
3. Start the run.
4. Open the output link or dataset to review and export the rows.

#### ⚙️ Input

The `ibans` field is required. Add one or more IBAN values; each value is checked separately, and invalid values are returned too.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `ibans` | array of strings | Lists the IBAN values to validate. Each value produces its own output row, including when it is invalid. |

**Example input**

This is the public input from a successful current-beta default-input run:

```json
{
  "ibans": [
    "GB29 NWBK 6016 1331 9268 19"
  ]
}
```

#### 🧾 Output

The output link opens the default dataset. It contains one object for each submitted IBAN. Optional fields are left out when the country or parsed account parts cannot be read, or when no bank code is recognized.

**Output fields**

| Field | Type | What it does |
|---|---|---|
| `submittedIban` | string | Keeps the IBAN exactly as submitted. |
| `electronicFormat` | string | Gives the normalized IBAN for machine use. |
| `printFormat` | string | Gives the normalized IBAN grouped for people to read. |
| `isValid` | boolean | Says whether the country structure and checksum checks pass. |
| `diagnosticStatus` | string | Gives the standard status, such as `VALID`, `INVALID_LENGTH`, or `INVALID_CHECKSUM`. |
| `countryCode` | string | Gives the two-letter country code when it can be read. |
| `countryName` | string | Gives the country name when the country code is known. |
| `structureValid` | boolean | Says whether the IBAN matches the country's structure and expected length. |
| `checksumValid` | boolean | Says whether the IBAN passes the ISO 13616 MOD-97 checksum. |
| `observedLength` | integer | Counts characters in the normalized IBAN. |
| `expectedLength` | integer | Gives the required length when the country format is known. |
| `checkDigits` | string | Gives the two check digits when they can be read. |
| `bban` | string | Gives the parsed Basic Bank Account Number when available. |
| `isSepaMember` | boolean | Says whether the detected country takes part in SEPA. |
| `bankName` | string | Gives a mapped bank name when a bank code is recognized. |

**Example validation row**

This complete row is from a successful current-beta run:

```json
{
  "submittedIban": "GB29 NWBK 6016 1331 9268 19",
  "electronicFormat": "GB29NWBK60161331926819",
  "printFormat": "GB29 NWBK 6016 1331 9268 19",
  "isValid": true,
  "diagnosticStatus": "VALID",
  "countryCode": "GB",
  "structureValid": true,
  "checksumValid": true,
  "observedLength": 22,
  "expectedLength": 22,
  "checkDigits": "29",
  "bban": "NWBK60161331926819",
  "isSepaMember": true,
  "countryName": "United Kingdom"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. One IBAN check is charged for each submitted value saved to the dataset, including invalid values. The current price is shown in the Actor's pricing panel.

#### 🔌 Integrations

Run the Actor from Apify Console or the Apify API, then export the dataset in the format your workflow needs. You can also schedule runs and pass the finished dataset to Apify integrations.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Is this an IBAN calculator, or can it find an IBAN from an account number?

No. This Actor checks IBANs that you provide; it does not create one or show how to find an IBAN number from an account number. Ask the bank or account holder for the correct value.

##### Does a valid IBAN prove that the account exists?

No. A valid status means the IBAN matches its country structure and passes the ISO 13616 MOD-97 checksum. It does not confirm that the account is open, belongs to a person, or can receive a payment.

##### Does the Actor look up a bank or payment provider?

No. Live bank, branch, account, ownership, and payment checks are outside this Actor's contract. It validates the structure and checksum of the submitted IBAN.

##### What does a diagnostic status mean?

`VALID` means all checks pass. `INVALID_INPUT` means the value cannot be read as an IBAN. `INVALID_COUNTRY` means the country code is not supported. `INVALID_LENGTH` means the length is wrong. `INVALID_STRUCTURE` means the value has the wrong country pattern. `INVALID_CHECKSUM` means the structure is right but the MOD-97 checksum fails.

##### Can I check several IBANs in one run?

Yes. Add the values to `ibans`, one per list item. The Actor checks each submitted value independently and saves one row for each value, including invalid values.

##### Why are some output fields missing?

Country details, expected length, check digits, BBAN data, and bank name are optional. They are omitted when the country or account parts cannot be read; the bank name is also omitted when no bank code is recognized.

##### What is the difference between electronic and print format?

Electronic format has no spaces and is suited to machine use. Print format groups the same normalized value for easier reading.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~iban-validator/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Phone Number Validation API](https://apify.com/maximedupre/phone-number-validation) — format phone numbers for customer or supplier contact lists.
- [Email MX Verifier](https://apify.com/maximedupre/email-mx-verifier) — check email syntax and MX records before importing a contact list.
- [Sanctions & Watchlist Screening — Risk-Scored Decisions](https://apify.com/maximedupre/sanctions-screening) — screen names during supplier or counterparty onboarding.
- [IBAN Validator & Parser](https://apify.com/bgfc97/iban-validator-parser) — parse IBAN country, check digits, and BBAN data for payment-data cleanup.
- [TR IBAN Validator API](https://apify.com/caulleonard/iban-validator) — check Turkish IBAN structure and MOD-97 checksum for local payment flows.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Add one or more IBANs, one per item. Invalid values are returned too.

## Actor input object example

```json
{
  "ibans": [
    "GB82WEST12345698765432",
    "DE89370400440532013000"
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the dataset to see one row for each submitted IBAN.

# 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": [
        "GB82 WEST 1234 5698 7654 32"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/iban-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 = { "ibans": ["GB82 WEST 1234 5698 7654 32"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/iban-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/cNe4bzMtpVuink1mY/builds/iWYmYQfvZvlRfQusV/openapi.json
