Bank of America API Access
Bank of America API Access
Bank of America does not offer a public API for personal banking customers. Their developer APIs (CashPro Developer Studio) are exclusively for commercial and business banking clients.
To programmatically access personal Bank of America account data, including downloading statements, use Plaidβa financial data aggregation service that connects to 12,000+ financial institutions.
The reality of bank APIs
| Bank API Type | Access Level | Use Case |
|---|---|---|
| CashPro API (BoA) | Commercial clients only | Business treasury, corporate payments |
| Plaid | Developers with approved apps | Personal & business account data |
| Direct screen scraping | Unreliable, against ToS | Not recommended |
Using Plaid to access Bank of America
Prerequisites
- Create a Plaid developer account at plaid.com
- Obtain API keys (client_id and secret)
- For production access to Bank of America, apply for Production approval (OAuth mode required)
Available data through Plaid
- Transactions: Full transaction history with merchant names, categories, and metadata
- Balances: Real-time account balances
- Statements: Actual PDF bank statements (US only, via
/statements/download) - Account details: Account numbers, routing numbers (for ACH)
Downloading statements (last 12 months)
Plaid's Statements product retrieves bank-branded PDF statements directly from the institution.
Workflow
1. Create Link token with "statements" product
2. User authenticates via Plaid Link
3. Exchange public_token for access_token
4. Call /statements/list to get available statements
5. Call /statements/download for each statement PDF
Code example (Python)
pythonimport plaid from plaid.api import plaid_api from plaid.model import * # Initialize client configuration = plaid.Configuration( host=plaid.Environment.Production, # or Sandbox for testing api_key={ 'clientId': 'YOUR_CLIENT_ID', 'secret': 'YOUR_SECRET', } ) client = plaid_api.PlaidApi(plaid.ApiClient(configuration)) # After user links account, get statements list request = StatementsListRequest(access_token=access_token) response = client.statements_list(request) # Download each statement for account in response.accounts: for statement in account.statements: download_request = StatementsDownloadRequest( access_token=access_token, statement_id=statement.statement_id ) pdf_response = client.statements_download(download_request) # Save PDF filename = f"{account.name}_{statement.month}_{statement.year}.pdf" with open(filename, 'wb') as f: f.write(pdf_response.read())
Code example (JavaScript/Node.js)
javascriptimport { Configuration, PlaidApi, PlaidEnvironments } from 'plaid'; const config = new Configuration({ basePath: PlaidEnvironments.production, baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, }, }, }); const plaidClient = new PlaidApi(config); // List available statements const listResponse = await plaidClient.statementsList({ access_token: accessToken, }); // Download each statement PDF for (const account of listResponse.data.accounts) { for (const statement of account.statements) { const downloadResponse = await plaidClient.statementsDownload({ access_token: accessToken, statement_id: statement.statement_id, }); // downloadResponse.data is the PDF binary const filename = `${account.name}_${statement.month}_${statement.year}.pdf`; await fs.writeFile(filename, downloadResponse.data); } }
Important limitations
- Statements product: US only, depository accounts only (checking/savings)
- Historical data: Typically 12-24 months of statements available
- Production access: Requires Plaid approval; Bank of America specifically requires OAuth mode
- Costs: Plaid charges per-Item (connected account) fees
- Rate limits: API calls are rate-limited; implement appropriate delays
Alternatives to Plaid
| Service | Notes |
|---|---|
| Yodlee | Enterprise-focused, similar capabilities |
| MX | Data aggregation with analytics |
| Finicity | Mastercard-owned, verification focus |
| Manual export | BoA web/app allows CSV/OFX download |
Manual statement download
If API access is not feasible, Bank of America allows manual statement downloads:
- Log in to online banking
- Navigate to Statements & Documents
- Select account and date range
- Download individual PDFs
This approach does not scale but requires no developer setup.