The open neobank dataset
Everything on neobankbeat is generated from one file: data.json. It's free to use, including commercially — attribution appreciated. Defunct neobanks and pure BaaS/infrastructure providers are excluded; unverified fields are null rather than guessed.
Field dictionary
Each entity is an object under entities. Top-level meta carries counts, field notes and methodology.
| field | type | meaning |
|---|---|---|
| name | string | Display name of the neobank. |
| category | enum | traditional · hybrid · web3-native (see notes). |
| audience | enum | general, or a niche: SMB, teens, gen z, women, migrants, freelancers… |
| hq · founded | string · number | Headquarters (city, country) and year founded. |
| custody | enum | Custodial · Self-custodial · MPC self-custodial · Mixed. |
| region | enum | Primary market, exactly one value: US · Canada · UK · US/UK · Europe · LatAm · Asia · ANZ · Africa · MENA · Global. Distinct from active_regions, which lists everywhere it operates. |
| regulation_type | enum | Broker-led · E-money institution · Fintech license (CH) · License pending (partner model today) · Licensed bank · MiCA CASP (EU) · Other / mixed · Partner-bank model · Payment institution · Self-custodial software · VASP / MSB / crypto licenses. |
| license | string | Plain-text license / sponsor-bank detail. |
| card_network · card_type | string | Visa/Mastercard/domestic/— and debit/prepaid/credit/virtual/crypto-settled/wallet. |
| cashback · yield | string | Headline "up to" figures — change constantly, always confirm with the issuer. |
| stablecoins | boolean | Whether stablecoins are supported. |
| services | array | Money-movement capabilities: on-ramp, off-ramp, fiat-payin, fiat-payout, iban, multi-currency, virtual-cards, crypto-cards. |
| fx_markup | object | FX markup on the free/standard plan, with source URL + as_of date. |
| kyc | string | KYC posture. |
| active_regions · countries | array | Macro-regions and country-level availability where known. |
| reported_users | object | value_millions + metric + as_of, where disclosed. |
| founders · funding · investors | string · array | Named founders, total disclosed funding, and notable disclosed backers. |
| ai | enum | Verified in-production AI use: underwriting · interface · agentic. |
| volume | object | figure + metric + source, for the few that disclose payment or transaction volume rather than user counts. |
| note | string | One line of current, factual detail — scale, license status, a recent launch. |
| story | string | One line on how the company got here. Editorial, not a data field: use it for context, not for analysis. |
| website · domain · x_handle · terms_url · privacy_url | string | Verified links where confirmed; null when unverified (never fabricated). |
| slug | string | Stable URL slug — the /n/<slug>/ profile path. Derived from name, persisted so it never drifts. |
| features | object | Tri-state capability flags (true / false / null=unverified): apple_pay, google_pay, api, webhooks, oauth, sandbox, business_accounts, virtual_cards, physical_cards, iban, self_custody, mpc, yield_bearing, savings, lending, investing, treasury, crypto, stablecoin_native. null is never "no". |
| stablecoin_tickers | array | Which stablecoins are supported (USDC, USDT, EURC…); [] = verified none, null = unverified. Companion to the stablecoins boolean. |
| card_networks | array | Normalized card networks (Visa, Mastercard, Amex, RuPay, Verve, Mada…); supersedes the free-text card_network. |
| card_form · card_funding | array | Orthogonal card axes: form (virtual, physical) and funding (debit, credit, prepaid, charge, bnpl); split out of card_type. |
| payment_rails | array | Instant/interbank rails (SEPA, SEPA-Instant, FedNow, ACH, Wire, SWIFT, Pix, UPI…); null = unverified. |
| fx_markup_pct · cashback_pct · yield_pct | number | Numeric companions to the fx_markup / cashback / yield prose — headline percent; null when no number is stated. |
| timeline | array | Dated events {date, type, description, source, tags}: founded, funding, launch, license, expansion, milestone… null = none recorded. |
| partners | object | Infrastructure map: issuer, partner_bank, treasury, identity, kyc_provider, card_network — who actually holds and moves the money. null = unverified. |
| funding_stage | enum | Investor-lens stage: Pre-seed / Seed / Series A / B / C+ / Public / Acquired / Bootstrapped / Subsidiary. Heuristic — explicit signals (public ticker, "acquired", named round) are reliable; the $-amount fallback is directional. null = undisclosed. |
Notes & methodology
- category: traditional = licensed fiat, custodial · hybrid = fiat + custodial crypto · web3-native = self-custodial, on-chain-first
- rates: cashback/yield are 'up to' figures that change constantly and vary by region — always confirm with the issuer
- services: money-movement capabilities (on-ramp, off-ramp, fiat-payin, fiat-payout, iban, multi-currency, virtual-cards, crypto-cards); verified per provider docs, tags omitted when unverified — absence is not proof of absence
- fx_markup: foreign-exchange markup on the free/standard plan, sourced + dated; rates change often, always confirm with the issuer
- verification: defunct neobanks and pure BaaS/infrastructure are excluded; unverified fields are null rather than guessed
- graveyard: delisted entities are archived in the graveyard array with status 'delisted', the delisting date and a cause of death (kind: rail = partner/rail exit, acquired, regulator) — never silently deleted; excluded from all counts
Load it
import json, urllib.request
data = json.load(urllib.request.urlopen("https://www.neobankbeat.com/data.json"))
print(data["meta"]["total"], "neobanks")
for e in data["entities"][:5]:
print(e["name"], "·", e["category"], "·", e["regulation_type"])
Mirrors
The same data is published on the two hubs researchers and model pipelines actually search. Both are refreshed from this file, so data.json stays the source of truth — if the three ever disagree, this one is right.
The mirrors add two shapes this site doesn't serve: entities.jsonl, one neobank per line, and entities.csv, flattened to plain columns with the nested fx_markup, reported_users and volume objects split into their own _as_of and _source fields. Both download without an account:
from datasets import load_dataset
ds = load_dataset("neobankbeat/neobanks", split="train")
print(ds.filter(lambda e: e["regulation_type"] == "Licensed bank").num_rows, "hold a bank license")
Cite it
Figures compiled from public sources, for comparison only — not financial advice. "Up to" rates change constantly; always confirm with the issuer. Spotted an error? Suggest a fix.