Quarterly report pursuant to Section 13 or 15(d)

Outstanding Loans and Leases - Nonperforming (Details)

v2.4.1.9
Outstanding Loans and Leases - Nonperforming (Details) (USD $)
In Millions, unless otherwise specified
3 Months Ended
Mar. 31, 2015
Mar. 31, 2014
Dec. 31, 2014
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Loans and leases $ 877,956us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome   $ 881,391us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 17,061us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue   19,754us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
Proceeds from sales 5,781us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment 4,508us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment  
Purchased credit impaired loans sold 586us-gaap_CertainLoansAcquiredInTransferAccountedForAsHeldToMaturityDebtSecuritiesAccretableYieldDisposalsOfLoans 454us-gaap_CertainLoansAcquiredInTransferAccountedForAsHeldToMaturityDebtSecuritiesAccretableYieldDisposalsOfLoans  
Nonperforming loans and leases 11,205us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus   11,932us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
Accruing past due 90 days or more 10,968us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing   12,654us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
Nonaccruing troubled debt restructurings excluded from nonperforming loans 86bac_NonaccruingTroubledDebtRestructuringsExcludedFromNonperformingLoans   102bac_NonaccruingTroubledDebtRestructuringsExcludedFromNonperformingLoans
Residential Mortgage      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Accruing past due 90 days or more 3,700us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
  4,100us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
Federal Housing Administration | Residential Mortgage      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Nonperforming loans and leases 6,200us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
/ us-gaap_RegulatoryAgencyAxis
= bac_FederalHousingAdministrationMember
  7,300us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
/ us-gaap_RegulatoryAgencyAxis
= bac_FederalHousingAdministrationMember
Nonperforming Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Proceeds from sales 1,000us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
730us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
 
Valuation Allowances and Reserves, Recoveries 40us-gaap_ValuationAllowancesAndReservesRecoveries
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
   
Nonperforming Financing Receivable | Junior Lien Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 657us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_JuniorLienHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
  800us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_JuniorLienHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
Chapter Seven Bankruptcy      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 2,300us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Chapter Seven Bankruptcy | Nonperforming Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 1,100us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Non-performing troubled debt with no change in repayment terms at time of discharge, current with contractual payments 660us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 354us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Nonperforming loans discharged more than twelve months prior 80.00%bac_LoansandLeasesReceivableNonperformingAmountDischargedMorethanTwelveMonthsPrior
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Nonperforming loans discharged more than twenty four months prior 60.00%bac_LoansandLeasesReceivableNonperformingAmountDischargedMorethanTwentyFourMonthsPrior
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Consumer Portfolio Segment      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 474,482us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
  488,570us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 16,557us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
  19,012us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Nonperforming loans and leases 10,209us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
  10,819us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Accruing past due 90 days or more 10,847us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
  12,433us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Consumer Real Estate | Junior Lien Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Consumer Real Estate | Core Portfolio, Residential Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 156,888us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
  162,220us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 5,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
  5,561us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Nonperforming loans and leases 2,278us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
  2,398us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Accruing past due 90 days or more 3,573us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
  3,942us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Consumer Real Estate | Core Portfolio, Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 51,029us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
  51,887us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 754us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
  744us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Nonperforming loans and leases 1,473us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
  1,496us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Accruing past due 90 days or more 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
  0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Consumer Real Estate | Legacy Assets and Servicing Portfolio, Residential Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 36,852us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
  38,825us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 8,697us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
  10,513us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Nonperforming loans and leases 4,143us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
  4,491us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Accruing past due 90 days or more 6,339us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
  7,465us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Consumer Real Estate | Legacy Assets and Servicing Portfolio, Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 27,188us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
  28,221us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 1,169us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
  1,166us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Nonperforming loans and leases 2,286us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
  2,405us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Accruing past due 90 days or more 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
  0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Credit card and other consumer | Credit Card Receivable | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 87,288us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
  91,879us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 795us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
  866us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Accruing past due 90 days or more 795us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
  866us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Credit card and other consumer | Credit Card Receivable | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 9,660us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  10,465us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 88us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  95us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Accruing past due 90 days or more 88us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  95us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Credit card and other consumer | Direct/Indirect Consumer      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 82,141us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
  80,381us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 53us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
  65us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Nonperforming loans and leases 28us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
  28us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Accruing past due 90 days or more 51us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
  64us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Credit card and other consumer | Other consumer      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 1,842us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
  1,846us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 1us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
  2us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Nonperforming loans and leases 1us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
  1us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Accruing past due 90 days or more 1us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
  1us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= bac_CreditCardandOtherConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Commercial      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Loans and leases 403,474us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
  392,821us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 504us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
  742us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Nonperforming loans and leases 996us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
  1,113us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Accruing past due 90 days or more 121us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
  221us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Commercial | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 225,081us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
  220,293us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 269us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
  318us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Nonperforming loans and leases 680us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
  701us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Accruing past due 90 days or more 22us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
  110us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Commercial | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 84,842us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  80,083us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Nonperforming loans and leases 79us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  1us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Accruing past due 90 days or more 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Commercial | Commercial Real Estate      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 49,446us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
  47,682us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 137us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
  288us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Nonperforming loans and leases 132us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
  321us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Accruing past due 90 days or more 25us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
  3us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Commercial | Commercial Real Estate | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 46,700us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= country_US
  45,200us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= country_US
Commercial | Commercial Real Estate | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 2,800us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
  2,500us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Commercial | Commercial Lease Financing      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 24,468us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
  24,866us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 14us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
  42us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Nonperforming loans and leases 16us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
  3us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Accruing past due 90 days or more 9us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
  41us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Commercial | Small Business Commercial      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 84us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
  94us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
Nonperforming loans and leases 89us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
  87us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
Accruing past due 90 days or more 65us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
  67us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
Commercial | Small Business Commercial | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 13,226us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
/ us-gaap_StatementGeographicalAxis
= country_US
  13,293us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
/ us-gaap_StatementGeographicalAxis
= country_US
Noninterest income | Nonperforming Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Gain (loss) on sale $ 35us-gaap_LoansAndLeasesReceivableGainLossOnSalesNet
/ us-gaap_IncomeStatementLocationAxis
= bac_NoninterestIncomeMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember