---
title: "Bulk BIN Lookup CSV — Upload, Enrich, Download"
description: "Upload a CSV of up to 2,000 BINs in the dashboard and download an enriched file with scheme, issuer, country, and card flags. No code required."
section: "API"
url: "https://binlookupapi.com/docs/batch-csv/"
markdown_url: "https://binlookupapi.com/docs/batch-csv.md"
---
# Batch CSV

The Batch page accepts a CSV file of BINs and returns a CSV file with one lookup for each row. You do not write code and you do not use an API key for this page.

This is the dashboard form of [`POST /v1/bins`](/docs/batch-lookups/). The row limit, the data, and the quota rules are the same.

## Availability

Batch CSV is included in BLAPI-500KPM (US$100 per month). See [Billing](/docs/subscriptions/).

On other plans, the Batch page shows a preview and does not process the file. Change the plan to BLAPI-500KPM. An upgrade is active immediately. See [Troubleshooting](/docs/support/troubleshooting/#batch-page).

A test-mode organisation can use the page with mock data. The test-mode daily limit is 500 lookups. A test file with more than 500 data rows is rejected.

Any member of the organisation can use the page. No special role is required.

## Run a batch

1. Sign in at [https://app.binlookupapi.com/](https://app.binlookupapi.com/) and open Batch.
2. Read the remaining daily quota on the page. The whole file must fit in that quota.
3. Drag the CSV file to the upload area, or select the area to choose a file.
4. Select Process CSV.
5. The browser downloads `<your-file>-enriched.csv`.

The page then shows how many rows were found, how many were not found, and how many were not valid. Select Download again to download the same file.

The result stays in the browser only. The server does not store the result file. If you leave the page, the result is discarded.

## File rules

| Rule | Detail |
|------|--------|
| File size | 1 MB maximum. |
| Rows | 2,000 data rows maximum. |
| Columns | One column. Put one BIN on each line. |
| Header | Optional. A first row that is not a number, such as `bin`, is a header. The page does not look up a header. |
| Encoding | UTF-8. A byte order mark at the start is removed. |
| Line endings | `LF`, `CRLF`, and `CR` are accepted. |
| Blank lines | Ignored, including blank lines at the end. |
| Quotes | A fully quoted cell is accepted (`"400062"`). A doubled quote (`""`) is an escaped quote. |

Each value uses the same rules as [one lookup](/docs/api-reference/#look-up-one-bin). The range is 6 to 11 digits, from `100000` to `99999999999`. Leading zeros are not significant. `0400062` is looked up as `400062`. The `bin` column in the result repeats the text that you sent.

WARNING: Do not upload full card numbers. A value longer than 11 characters is replaced before it is stored. See [Card number redaction](#card-number-redaction).

### Example input

```csv
bin
400062
99999999
invalid
4242424242424242
```

## Output columns

The result always has these 15 columns, in this order:

```text
bin,scheme,funding,brand,category,country_code,country_name,issuer_name,issuer_website,issuer_phone,currency,prepaid,commercial,longer_bin_available,error
```

| Column | Meaning |
|--------|---------|
| `bin` | The value that you sent. |
| `scheme` | The card network, in lower case. Example: `visa`. |
| `funding` | `credit`, `debit`, `prepaid`, or `unknown`. |
| `brand` | The brand as issued. Example: `VISA`. |
| `category` | The product level. Examples: `CLASSIC`, `SIGNATURE`, `BUSINESS`. |
| `country_code` | The ISO 3166-1 alpha-2 code. |
| `country_name` | The name of the issuing country. |
| `issuer_name` | The issuing bank. |
| `issuer_website` | The issuer website, when it is known. |
| `issuer_phone` | The issuer phone number, when it is known. |
| `currency` | The ISO 4217 code of the issuing country. |
| `prepaid` | `true` or `false`. |
| `commercial` | `true` or `false`. |
| `longer_bin_available` | `true` when a longer BIN can match a more specific record. |
| `error` | Empty on success. Otherwise `NOT_FOUND` or `BAD_REQUEST`. |

An unknown value is an empty cell. Field definitions are in the [API reference](/docs/api-reference/#response-fields).

### Example output

```csv
bin,scheme,funding,brand,category,country_code,country_name,issuer_name,issuer_website,issuer_phone,currency,prepaid,commercial,longer_bin_available,error
400062,visa,debit,VISA,SIGNATURE,AE,UNITED ARAB EMIRATES,EMIRATES NBD BANK (P.J.S.C.),http://www.emiratesnbd.com/en/,+971800456,AED,false,false,true,
99999999,,,,,,,,,,,,,,NOT_FOUND
invalid,,,,,,,,,,,,,,BAD_REQUEST
[REDACTED],,,,,,,,,,,,,,BAD_REQUEST
```

## Row errors

The result has one row for each input row, in the same order. The page does not drop a row and does not reorder rows.

| Error code | Cause |
|------------|-------|
| `NOT_FOUND` | The BIN is valid and is not in the dataset. |
| `BAD_REQUEST` | The value is not a valid BIN. It is not numeric, it has fewer than 6 digits, or it has more than 11 characters. |

## Card number redaction

A value longer than 11 characters can be a full card number. The `bin` column shows `[REDACTED]` and the error is `BAD_REQUEST`. The original value is not written to the result file or to the request log.

## Quota

Each data row uses one lookup. This includes rows with `NOT_FOUND` or `BAD_REQUEST`. A file of 2,000 rows uses 2,000 lookups.

The page accepts the whole file or none of it. If the file needs more lookups than the remaining quota, the page does not charge the quota and does not write a request-log entry. The page shows the required count and the remainder:

```text
Daily quota exceeded: this file needs 2,000 lookups but only 340 remain today (limit 10,000).
```

Split the file, or wait for the reset at 00:00 UTC. See [Daily quota](/docs/subscriptions/#daily-quota).

A successful run is one row on the Usage page. The unit count is the row count.

## Upload errors

The page rejects the whole file and does not charge the quota when validation fails.

| Message | Cause |
|---------|-------|
| `Choose a CSV file to upload` | You started the upload with no file. |
| `The CSV file must be 1 MB or smaller` | The file is larger than 1 MB. |
| `The CSV file is empty` | The file has no content. |
| `CSV contains no data rows` | The file has only a header, or only blank lines. |
| `CSV has more than 2,000 data rows` | The file has more than 2,000 data rows after the header. |
| `line 12 has multiple columns; upload a single-column CSV` | That line has a comma that is not inside quotes. |
| `line 12 has malformed quotes` | A quote on that line is not closed, or text follows the closing quote. |
| `Lookup backend error` | The lookup service failed. Try again later. If it continues, [contact support](/docs/support/contact/). |

The line number is the physical line in the file.

## Batch CSV or the API

| | Batch CSV | `POST /v1/bins` |
|---|-----------|-----------------|
| Interface | Dashboard upload | HTTP request |
| Limit | 2,000 BINs | 2,000 BINs |
| Output | CSV file, 15 columns | JSON, one object per BIN |
| Automation | Manual | A script can run it |
| Use it for | A spreadsheet or a one-time file | An application or a repeated job |

Both use the same quota rate. Both require BLAPI-500KPM, or a test-mode organisation.

## Related pages

- [Batch lookups](/docs/batch-lookups/)
- [API reference](/docs/api-reference/)
- [Billing](/docs/subscriptions/)
- [Dashboard](/docs/support/dashboard/)
- [Troubleshooting](/docs/support/troubleshooting/#csv-upload)
