Extract transactions from bank statement (PDF)
Turn your customer's PDF bank statements into enriched and categorized transaction data. Upload a statement and get structured data with automatic transaction classification.
What You Need
- Customer ID see Create a Customer
- Official, machine-readable PDF bank statement (not scanned images)
- Under 10MB file size
- Supported banks include: ANZ Bank, Bank of Melbourne (BOM), Bank of Queensland (BOQ), BankSA, Bendigo, Commonwealth Bank (CBA), National Australia Bank (NAB), St George, Suncorp, Tyro, Westpac, plus Illion Bank statements.
Upload Your Statement
- cURL
- JavaScript
curl -X POST "https://api.walkerstdata.com.au/v1/customer/{customerId}/transactions/pdf" \
-H "x-api-key: YOUR_API_KEY" \
-F "file=@statement.pdf"
const customerId = 'your-customer-id';
const fileInput = document.getElementById('pdfFile');
const file = fileInput.files[0];
const formData = new FormData();
formData.append('file', file);
const response = await fetch(`https://api.walkerstdata.com.au/v1/customer/${customerId}/transactions/pdf`, {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
},
body: formData
});
const result = await response.json();
console.log('Processing started, job ID:', result.data.jobId);
You'll get back a jobId to track the extraction and classification progress.
What Happens Next
Walker Street Data automatically:
- Identifies the bank and account
- Extracts every transaction from the submitted statement
- Enriches the transactions by adding further detail and classifications
Check Extraction Status
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/jobs/{jobId}/status" \
-H "x-api-key: YOUR_API_KEY"
const jobId = 'your-job-id';
const response = await fetch(`https://api.walkerstdata.com.au/v1/jobs/${jobId}/status`, {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY',
}
});
const result = await response.json();
console.log('Status:', result.data.status);
Wait for status to show Completed.
Get Your Extracted Transaction Data
Once extraction is complete, retrieve your clean, categorized transactions:
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/customer/{customerId}/transactions?jobId={jobId}" \
-H "x-api-key: YOUR_API_KEY"
const customerId = 'your-customer-id';
const jobId = 'your-job-id';
const response = await fetch(`https://api.walkerstdata.com.au/v1/customer/${customerId}/transactions?jobId=${jobId}`, {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY',
}
});
const result = await response.json();
console.log('Transactions:', result.data.transactions);
What You Get
Each enriched transaction includes:
- Original data: Date, amount, description, balance (preserved exactly)
- Unique identifiers: Transaction ID, job ID, customer ID
- Account context: Bank name, BSB, account number, account type, account name
- Business identifiers: ABN (Australian Business Number) when available
- Hierarchical categorization: 3-level classification system
- Level 1: Broad categories (e.g., "expenses", "sales")
- Level 2: Specific categories (e.g., "office_expenses", "credit_sales_eftpos")
- Level 3: The receiving or originating entity involved in the transaction
- Confidence scores: Probability scores for each classification level
- ML predictions: Detailed model predictions and probabilities for all categories
- Enrichment status: Whether full enrichment was attempted
Example Response
{
"data": {
"transactions": [
{
"transactionDate": "2023-11-01",
"amount": 1242.0,
"description": "MERCHANT SETTLEMENT 315799424037154 CAMBRIDGE MOTEL",
"balance": 4491.63,
"transactionId": "262b22a7-e9ea-4093-8f46-ce33b9101ca2",
"jobId": "34e1bbd4-36be-4d95-9351-a047eed5bf97",
"abn": "43008496928",
"customerId": "524ba9bc-06e7-417e-bd54-b99785f5194a",
"clientId": "a0ced7e1-da3a-40ea-a18f-4c829f816c6a",
"level1": "credit_sales",
"level1_probability": "1.00",
"level2": "credit_sales_eftpos",
"level2_probability": "1.00",
"level3": "",
"level3_probability": "1.00",
"predictions": "[{\"Level\":\"level1\",\"ModelId\":\"cr\",\"OverrideId\":null,\"Prediction\":\"credit_sales\",\"Probability\":0.9999006390571594,\"Probabilities\":{\"misc\":0.000011706169971148483,\"other\":0.000016813470210763626,\"sales\":0.9999006390571594,\"capital\":0.0000008941031524045684,\"personal\":0.00000004917253448866177,\"dishonour\":0.000000000005991042731356977,\"transfers\":0.00002295951526321005,\"government\":0.000035462519008433446,\"investment\":0.0000011775888424381264,\"loan-credits\":0.000010180337085330393}},{\"Level\":\"level2\",\"ModelId\":\"cr_sales\",\"OverrideId\":null,\"Prediction\":\"credit_sales_eftpos\",\"Probability\":0.9992071986198425,\"Probabilities\":{\"bnpl\":0.000000000035041858303941353,\"cash\":0.0000000000033682188982364636,\"eftpos\":0.9992071986198425,\"invoices\":0.00048790135770104825,\"brokerage\":0.0000000000000000010574509446803864,\"other-sales\":0.0003048870130442083,\"debtor-finance\":0.0000000000000003980625776967868,\"finance-settlements\":0.00000000000000000000011883322421247524}},{\"Level\":\"level3\",\"ModelId\":\"all_originator\",\"OverrideId\":\"Non finance/loan-credits/dishonour\",\"Prediction\":null,\"Probability\":1,\"Probabilities\":{\"19\":0.07109493017196655,\"26\":0.12756478786468506,\"33\":0.23543857038021088,\"82\":0.06715944409370422,\"187\":0.3556573688983917}}]",
"fullEnrichmentAttempted": true,
"bankName": "Suncorp",
"bsb": "484732",
"accountNumber": "004749327",
"accountType": "Business Account",
"accountName": "CAMBRIDGE HOTEL MANAGEMENT PTY LTD"
}
]
}
}