Guide ยท CSV
The MAC vendor database as CSV: format, and five ways to use it
Six columns, one row per registered block, every OUI size IEEE assigns, not just the 24-bit ones. No account, no rate limit, just a file.
The CSV download is the full block list: every MA-L, MA-M, MA-S, IAB, and CID registration IEEE has published, one row each, rebuilt from the live registry twice a day. Unlike the Cisco-format and nmap-format files, which only have room for 24-bit blocks, this one keeps the smaller /28 and /36 allocations intact.
Columns
| Column | What it is |
|---|---|
| mac_prefix | The block's prefix in hex octets, truncated to the whole bytes mask_bits actually covers: 3 octets for a /24, 4 for a /28, 5 for a /36. |
| mask_bits | 24, 28, or 36. How many leading bits of a MAC address this block claims. |
| block_type | IEEE's name for the allocation size: MA-L (/24), MA-M (/28), MA-S (/36), IAB (/36, legacy), or CID (/36, not for hardware). |
| organization | The registered organization name, verbatim from IEEE. |
| address | The organization's registered address, when IEEE publishes one. Often blank. |
| country | ISO 3166-1 alpha-2 country code, extracted from the address. Blank when it can't be determined. |
mac_prefix,mask_bits,block_type,organization,address,country
00:00:0C,24,MA-L,"CISCO SYSTEMS, INC.",,US
Five ways to use it
1. A quick shell lookup. No parsing needed for a single prefix:
grep -i "^D0:7A:B5" vendors.csv
2. Spreadsheets. It's plain UTF-8 CSV with a header row, so Excel, Numbers, and Google Sheets all import it with no special handling.
3. pandas.
import pandas as pd
df = pd.read_csv("vendors.csv")
df[df.country == "US"].organization.value_counts().head(10)
4. MySQL.
LOAD DATA LOCAL INFILE 'vendors.csv'
INTO TABLE mac_vendors
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
5. Automated, bandwidth-friendly refreshes. The file is served as a static file with a real Last-Modified header, so a conditional request only re-downloads it when it's actually changed since your last fetch:
curl -z vendors.csv -o vendors.csv https://macadress.com/downloads/vendors.csv
Drop that in a daily cron job and real bytes only move on the days something in the registry changed.
Need this joined against traffic as it happens instead of as a nightly batch job? The free JSON API does the same lookup live, one request per address or in a batch, with nothing to keep in sync.
More guides