BSB Lookup API
Free REST API for Australian BSB numbers. JSON responses, no API key, no signup.
https://bsbfinder.com/api/v1
Quickstart
Look up BSB 062-000 in your language of choice:
curl https://bsbfinder.com/api/v1/bsb/062-000
import requests r = requests.get("https://bsbfinder.com/api/v1/bsb/062-000") data = r.json() if data["success"]: branch = data["data"] print(branch["institution_name"], "-", branch["branch_name"]) else: print("Error:", data["error"])
const res = await fetch("https://bsbfinder.com/api/v1/bsb/062-000"); const { success, data, error } = await res.json(); if (success) { console.log(`${data.institution_name} - ${data.branch_name}`); } else { console.error("Error:", error); }
import java.net.URI; import java.net.http.*; HttpClient client = HttpClient.newHttpClient(); HttpRequest req = HttpRequest.newBuilder() .uri(URI.create("https://bsbfinder.com/api/v1/bsb/062-000")) .GET() .build(); HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString()); System.out.println(res.body()); // parse with Jackson, Gson, or org.json
package main import ( "encoding/json" "fmt" "net/http" ) func main() { res, _ := http.Get("https://bsbfinder.com/api/v1/bsb/062-000") defer res.Body.Close() var body map[string]interface{} json.NewDecoder(res.Body).Decode(&body) fmt.Println(body["data"]) }
<?php $res = file_get_contents("https://bsbfinder.com/api/v1/bsb/062-000"); $body = json_decode($res, true); if ($body["success"]) { echo $body["data"]["institution_name"]; }
require "net/http" require "json" res = Net::HTTP.get(URI("https://bsbfinder.com/api/v1/bsb/062-000")) body = JSON.parse(res) puts body["data"]["institution_name"] if body["success"]
Response Format
Every response uses the same envelope. Check success before reading data.
{
"success": true,
"data": {
"bsb": "062-000",
"institution": "CBA",
"institution_name": "Commonwealth Bank of Australia",
"branch_name": "Head Office",
"address": "48 Martin Place",
"suburb": "Sydney",
"state": "NSW",
"postcode": "2000",
"payments": { "paper": true, "electronic": true, "high_value": true }
},
"meta": { "source": "Official BSB Directory" }
}
Errors set success: false and an error string. Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining) are returned on every response.
Endpoints
Look up a single BSB. Accepts 062-000 or 062000.
Change history for a BSB — additions, deletions, field updates with timestamps.
Validate format and existence in one call. Returns valid and exists booleans.
Search by BSB, bank name, suburb, or postcode.
q — query string (required)bank — filter by institution code (e.g. CBA)state — filter by state (NSW, VIC, …)limit — max results, default 20, cap 100Look up up to 50 BSBs in one request. Body: {"bsbs": ["062-000", "033-000"]}
List all financial institutions with BSB counts.
Aggregate stats: total BSBs, institutions, last update.
Bulk Lookup Example
curl -X POST https://bsbfinder.com/api/v1/bulk \ -H "Content-Type: application/json" \ -d '{"bsbs": ["062-000", "033-000", "082-001"]}'
import requests res = requests.post( "https://bsbfinder.com/api/v1/bulk", json={"bsbs": ["062-000", "033-000", "082-001"]}, ) for branch in res.json()["data"]["results"]: print(branch["bsb"], branch["institution_name"])
const res = await fetch("https://bsbfinder.com/api/v1/bulk", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ bsbs: ["062-000", "033-000", "082-001"] }), }); const { data } = await res.json(); data.results.forEach(b => console.log(b.bsb, b.institution_name));
Rate Limits
The free tier allows 100 requests per day per IP address. When you exceed the limit the API returns HTTP 429. Every response includes:
X-RateLimit-Limit— your daily capX-RateLimit-Remaining— requests left in the window
Need more? A paid tier with unlimited daily requests is coming soon — get in touch if you want early access.
Data Source
BSB data is sourced from the official directory and checked daily. Historical changes are preserved and available via the history endpoint.