DEV Community

FindBSB
FindBSB

Posted on

I built a free BSB validation API for Australian devs

I Built a Free BSB Validation API for Australian Devs

If you've ever built a payment form, payroll system, or anything that touches Australian bank transfers, you've probably had to deal with BSB numbers.

BSBs (Bank State Branch codes) are the 6-digit numbers that identify Australian bank branches. Every domestic transfer needs one. And yet there's no decent free API to validate them — until now.

The problem

A few months ago I was building a payment feature for a marketplace platform. Users were entering BSB numbers manually, and we had no way to validate them before submitting to Stripe.

The options were:

  • AusPayNet (the official source) — provides a CSV download, no API
  • Existing BSB lookup sites — no API, just UI
  • Building our own — parse the CSV, host it somewhere, build an endpoint

So I built it. And then I thought, why not just make it public?

What I built

FindBSB — a free JSON API for Australian BSB lookups. No API key required. No signup. Just HTTP.

Base URL: https://findbsb.com.au/api

Single BSB lookup

curl https://findbsb.com.au/api/bsb/062-000
Enter fullscreen mode Exit fullscreen mode
{
  "bsb": "062-000",
  "mnemonic": "CBA",
  "bank": "Commonwealth Bank of Australia",
  "branch": "48 Martin Place Sydney",
  "address": "48 Martin Place",
  "suburb": "Sydney",
  "state": "NSW",
  "postcode": "2000",
  "payments": ["paper", "electronic", "cash"],
  "closed": false
}
Enter fullscreen mode Exit fullscreen mode

Filter by bank, state, suburb, postcode

curl "https://findbsb.com.au/api/bsb?bank=ANZ&state=NSW&limit=5"
Enter fullscreen mode Exit fullscreen mode

Bulk validation — up to 500 BSBs per request

This is the one I'm most proud of. Paste a list, get back a clean result:

curl -X POST https://findbsb.com.au/api/validate \
  -H "Content-Type: application/json" \
  -d '{"bsbs": ["062-000", "012-003", "999-999"]}'
Enter fullscreen mode Exit fullscreen mode
{
  "total": 3,
  "valid": 2,
  "invalid": 1,
  "closed": 1,
  "results": [
    {"bsb": "062-000", "valid": true, "closed": false, "bank": "Commonwealth Bank of Australia", ...},
    {"bsb": "012-003", "valid": true, "closed": true, "bank": "Australia & New Zealand Banking Group", ...},
    {"bsb": "999-999", "valid": false, "error": "not found"}
  ]
}
Enter fullscreen mode Exit fullscreen mode

Python example

import requests

def validate_bsbs(bsb_list):
    response = requests.post(
        'https://findbsb.com.au/api/validate',
        json={'bsbs': bsb_list},
        headers={'User-Agent': 'MyApp/1.0'}
    )
    return response.json()

result = validate_bsbs(['062-000', '012-003', '999-999'])
print(f"Valid: {result['valid']}, Invalid: {result['invalid']}")
Enter fullscreen mode Exit fullscreen mode

JavaScript example

const res = await fetch('https://findbsb.com.au/api/bsb/062-000');
const bsb = await res.json();
console.log(bsb.bank); // Commonwealth Bank of Australia
Enter fullscreen mode Exit fullscreen mode

How it works

  • Data sourced from AusPayNet (the official Australian payments body) — 18,000+ BSBs
  • Updated monthly when AusPayNet publishes new data
  • Built on AWS Lambda + API Gateway, proxied through Cloudflare
  • Rate limited to 30 requests/minute per IP — use /api/validate for bulk

Also on RapidAPI

If you prefer the RapidAPI ecosystem, it's listed there too: search FindBSB — Australian BSB Lookup.

Full docs

API docs and live playground at findbsb.com.au/api/


Would love feedback — especially if there are endpoints or response fields that would make this more useful for your use case. Happy to add postcode search, SWIFT codes alongside BSBs, or anything else that's missing.

Top comments (0)