Bulk Email, Phone, IBAN & BIC Validator avatar

Bulk Email, Phone, IBAN & BIC Validator

Pricing

from $0.80 / 1,000 apify-default-dataset-items

Go to Apify Store
Bulk Email, Phone, IBAN & BIC Validator

Bulk Email, Phone, IBAN & BIC Validator

Validate mixed lists of email addresses, phone numbers, IBANs and BICs in one run. Get a valid flag, a normalized value and type-specific details for every item. Offline structure checks for IBAN and BIC, with a default region for phone numbers.

Pricing

from $0.80 / 1,000 apify-default-dataset-items

Rating

0.0

(0)

Developer

bite-sized-insights

bite-sized-insights

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Security

Limited permissions

Share

Validate emails, phone numbers, IBANs and BICs in one bulk run - mix all four types in a single list and get one uniform result per item: valid or not, a clean normalized value, and the type-specific details.

Send a list of items, each with a type and a value, and get back a result for every one in the same order. Email addresses are syntax-checked, normalized and tested for a mail server and disposable domains. Phone numbers are parsed and checked against their country's numbering plan. IBANs and BICs are checked for structure, country and check digits. Use one actor and one dataset instead of four separate cleanup jobs.

No login required. No cookies needed. Pay-per-event pricing.

Why Choose This Actor?

"One list, one run, one result format - for every kind of contact and payment data you need to clean"

Our Bulk Data Validator provides:

  • Four Types in One Run: email, phone, iban and bic items can be mixed freely in the same input
  • Uniform Results: every item returns the same six fields (type, value, valid, normalized_value, data, error), so you can filter on valid without knowing the type
  • Clean Normalized Values: the normalized email address, the international phone format, the compact upper-case IBAN or BIC - ready to import
  • Type-Specific Details: MX and disposable-domain checks for emails; formats, number type, carrier, location and time zones for phone numbers; country, check digits and bank parts for IBANs and BICs
  • Bad Items Never Stop the Run: an unknown type or a missing value comes back as a result with an error message, not as a failed run
  • Cost-Effective: Pay only for the items you validate: $0.80 / 1k items
  • No Third-Party Dependency: no upstream service to fail or rate-limit you, and no API key to manage

Quick Start

{
"items": [
{ "type": "email", "value": "jane@example.com" },
{ "type": "phone", "value": "020 7946 0958", "options": { "region": "GB" } },
{ "type": "iban", "value": "DE89 3704 0044 0532 0130 00" },
{ "type": "bic", "value": "DEUTDEFF500" },
{ "type": "iban", "value": "DE00 1234" }
]
}

Usage Examples

Phone Numbers Without a Country Code

Set a default region for the whole run, and override it per item with options.region:

{
"items": [
{ "type": "phone", "value": "020 7946 0958" },
{ "type": "phone", "value": "030 123456", "options": { "region": "DE" } },
{ "type": "phone", "value": "+14155552671" }
],
"default_region": "GB"
}

A number that starts with + always uses its own country code.

Clean Up a Supplier List

{
"items": [
{ "type": "email", "value": "accounts@supplier.example" },
{ "type": "iban", "value": "GB82 WEST 1234 5698 7654 32" },
{ "type": "bic", "value": "NWBKGB2L" }
]
}

Output Example

Each item produces one dataset record. data depends on the type.

{
"type": "email",
"value": "jane@example.com",
"valid": true,
"normalized_value": "jane@example.com",
"data": {
"email": "jane@example.com",
"normalized_email": "jane@example.com",
"syntax_valid": true,
"domain_has_mx": true,
"is_disposable": false,
"is_role_account": false,
"is_free_provider": false,
"did_you_mean": null,
"deliverable_likely": true,
"reason": null
},
"error": null
}
{
"type": "phone",
"value": "020 7946 0958",
"valid": true,
"normalized_value": "+44 20 7946 0958",
"data": {
"phone_number": "020 7946 0958",
"e164": "+442079460958",
"international": "+44 20 7946 0958",
"national": "020 7946 0958",
"rfc3966": "tel:+44-20-7946-0958",
"country_code": 44,
"region_code": "GB",
"is_possible": true,
"possibility": "is_possible",
"is_valid": true,
"number_type": "fixed_line",
"carrier": null,
"location": "London",
"time_zones": ["Europe/London"],
"reason": null
},
"error": null
}
{
"type": "iban",
"value": "DE89 3704 0044 0532 0130 00",
"valid": true,
"normalized_value": "DE89370400440532013000",
"data": {
"iban": "DE89 3704 0044 0532 0130 00",
"normalized_iban": "DE89370400440532013000",
"formatted_iban": "DE89 3704 0044 0532 0130 00",
"country_code": "DE",
"check_digits": "89",
"bban": "370400440532013000",
"is_valid": true,
"reason": null
},
"error": null
}
{
"type": "bic",
"value": "DEUTDEFF500",
"valid": true,
"normalized_value": "DEUTDEFF500",
"data": {
"bic": "DEUTDEFF500",
"normalized_bic": "DEUTDEFF500",
"institution_code": "DEUT",
"country_code": "DE",
"location_code": "FF",
"branch_code": "500",
"is_valid": true,
"reason": null
},
"error": null
}

An item that is processed but fails validation has valid: false and the explanation in data.reason:

{
"type": "iban",
"value": "DE00 1234",
"valid": false,
"normalized_value": "DE001234",
"data": {
"iban": "DE00 1234",
"normalized_iban": "DE001234",
"formatted_iban": null,
"country_code": null,
"check_digits": null,
"bban": null,
"is_valid": false,
"reason": "The number's checksum or check digit is invalid."
},
"error": null
}

Input Parameters

ParameterTypeRequiredDescription
itemsarrayYes1-100,000 objects {type, value, options?}; type is email, phone, iban or bic
default_regionstringNoTwo-letter country code (e.g. US, GB) for phone numbers written without a + prefix

options is optional. Phone items accept {"region": "DE"}, which overrides default_region for that item. Email, IBAN and BIC items ignore options.

Output Fields

FieldTypeDescription
typestringThe item type as provided
valuestringThe value exactly as provided in the input
validbooleanEmail: likely deliverable. Phone, IBAN, BIC: passes validation. Always false when error is set
normalized_valuenull/stringEmail: normalized address. Phone: international format. IBAN, BIC: compact upper-case form. Null when it could not be parsed
dataobjectThe type-specific details below. Empty when error is set
errornull/stringSet only when the item could not be processed at all (unknown type, missing or non-text value, bad options)

data for email

email, normalized_email, syntax_valid, domain_has_mx, is_disposable, is_role_account, is_free_provider, did_you_mean, deliverable_likely (syntax valid, mail server found and not a disposable domain) and reason. is_disposable is the disposable-email flag and feeds deliverable_likely. Role accounts such as support@ and free providers such as Gmail are flagged but do not affect deliverable_likely. did_you_mean is a corrected full address when the domain looks like a typo of a popular provider (john@gmial.com -> john@gmail.com), otherwise null.

data for phone

phone_number, e164, international, national, rfc3966, country_code, region_code, is_possible, possibility, is_valid, number_type, carrier, location, time_zones and reason. Number type, carrier, location and time zones are filled for valid numbers only.

data for iban

iban, normalized_iban, formatted_iban (groups of four), country_code, check_digits, bban, is_valid and reason. The parts are filled for valid IBANs only.

data for bic

bic, normalized_bic, institution_code, country_code, location_code, branch_code (null for 8-character codes), is_valid and reason. The parts are filled for valid BICs only.

Pricing

CostDescription
$0.0001 / startCharged per actor run
$0.80 / 1,000 itemsCharged per item validated, whatever its type

API Integration

cURL

curl -X POST "https://api.apify.com/v2/acts/bite-sized-insights/validator-all/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{"type": "email", "value": "jane@example.com"},
{"type": "iban", "value": "DE89 3704 0044 0532 0130 00"}
]
}'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("bite-sized-insights/validator-all").call(
run_input={
"items": [
{"type": "email", "value": "jane@example.com"},
{"type": "phone", "value": "020 7946 0958", "options": {"region": "GB"}},
{"type": "iban", "value": "DE89 3704 0044 0532 0130 00"},
]
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['type']} {item['value']}: valid={item['valid']} -> {item['normalized_value']}")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('bite-sized-insights/validator-all').call({
items: [
{ type: 'email', value: 'jane@example.com' },
{ type: 'phone', value: '020 7946 0958', options: { region: 'GB' } },
{ type: 'iban', value: 'DE89 3704 0044 0532 0130 00' },
],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
console.log(`${item.type} ${item.value}: valid=${item.valid} -> ${item.normalized_value}`);
});

Use Cases

  • CRM and Lead Cleanup: Check emails and phone numbers of an imported list in one pass
  • Supplier and Payee Onboarding: Catch mistyped IBANs and BICs before a payment run bounces
  • Form and Signup Checks: Batch-validate mixed contact and bank details collected through forms
  • Data Migration: Normalize contact and bank fields to one clean format before loading them into a new system
  • Fraud Signals: Flag disposable email domains, VoIP numbers or mismatched countries as a low-cost first pass

FAQ

Does this check that a bank account or a phone number really exists?

No. IBANs and BICs are checked for length, country, structure and check digits, which catches typos and invented numbers, but there is no bank or account lookup, so a well-formed IBAN may still belong to no account. Phone numbers are checked against the numbering plan of their country; whether a number is currently assigned or reachable cannot be known from that data. Emails are the one type with a live check: the domain is looked up for a mail server.

What makes an email "valid"?

valid is true when the address has correct syntax, its domain has a mail server and it is not a known disposable or temporary email domain. Role accounts such as info@ or support@ are flagged in data.is_role_account but stay valid, since they are often perfectly deliverable. The check does not contact the mailbox, so it cannot confirm that a specific mailbox exists.

How are phone numbers without a country code handled?

A number starting with + always uses its own country code. For other numbers, the region in the item's options is used, then the run's default_region. Without either, the number cannot be interpreted and data.reason explains why.

What happens to an item with an unknown type or no value?

The run continues. That item gets a result with valid: false, empty data and an error message such as Unknown task type 'vat', expected one of: email, phone, iban, bic, and it is counted like any other item.

Are the results in the same order as my input?

Yes. Result number N always belongs to item number N of the input, including items that returned an error.

Is my data stored or shared anywhere?

No. Input is processed for the duration of the run only and results are written to your own private run dataset, same as any other Apify actor.

Disclaimer

This actor validates values against format and structure rules and, for email, a mail-server lookup. It does not contact people, banks or carriers and cannot guarantee that an email, number or account is in use. Rules and data change over time; results reflect the version of the actor you run.


Need help? Open an issue on the actor's repository or contact support through Apify Console.