← Back to articles

Bank of America API Access

Path: δΈ€ etc δΈ€/Finance/Bank of America API Access.mdUpdated: 2/3/2026

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 TypeAccess LevelUse Case
CashPro API (BoA)Commercial clients onlyBusiness treasury, corporate payments
PlaidDevelopers with approved appsPersonal & business account data
Direct screen scrapingUnreliable, against ToSNot recommended

Using Plaid to access Bank of America

Prerequisites

  1. Create a Plaid developer account at plaid.com↗
  2. Obtain API keys (client_id and secret)
  3. 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)

python
import 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)

javascript
import { 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

ServiceNotes
Yodlee↗Enterprise-focused, similar capabilities
MX↗Data aggregation with analytics
Finicity↗Mastercard-owned, verification focus
Manual exportBoA web/app allows CSV/OFX download

Manual statement download

If API access is not feasible, Bank of America allows manual statement downloads:

  1. Log in to online banking
  2. Navigate to Statements & Documents
  3. Select account and date range
  4. Download individual PDFs

This approach does not scale but requires no developer setup.

Links