Annual report pursuant to Section 13 and 15(d)

Outstanding Loans and Leases - Nonperforming (Details)

v2.4.1.9
Outstanding Loans and Leases - Nonperforming (Details) (USD $)
In Millions, unless otherwise specified
12 Months Ended
Dec. 31, 2014
Dec. 31, 2013
Dec. 31, 2012
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Loans and leases $ 881,391us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome $ 928,233us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome  
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 19,754us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue 28,263us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue  
Proceeds from sales 28,765us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment 12,331us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment 1,837us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment
Nonperforming loans and leases 11,932us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus 17,149us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus  
Accruing past due 90 days or more 12,654us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing 18,759us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing  
Nonaccruing troubled debt restructurings excluded from nonperforming loans 102bac_NonaccruingTroubledDebtRestructuringsExcludedFromNonperformingLoans 260bac_NonaccruingTroubledDebtRestructuringsExcludedFromNonperformingLoans  
Other consumer | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 3us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
5us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Residential Mortgage      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Accruing past due 90 days or more 4,100us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
4,000us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
 
Nonperforming Financing Receivable | Junior Lien Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 800us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_JuniorLienHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
1,200us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_JuniorLienHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
 
Chapter Seven Bankruptcy | Nonperforming Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Loans and leases 1,400us-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 901us-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 395us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Nonperforming loans discharged more than twelve months prior (greater than) 80.00%bac_LoansandLeasesReceivableNonperformingAmountDischargedMorethanTwelveMonthsPrior
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Nonperforming loans discharged more than twenty four months prior (greater than) 60.00%bac_LoansandLeasesReceivableNonperformingAmountDischargedMorethanTwentyFourMonthsPrior
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
/ bac_LoanRestructuringModificationNameAxis
= bac_ChapterSevenBankruptcyMember
   
Federal Housing Administration | Residential Mortgage      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Nonperforming loans and leases 7,300us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
/ us-gaap_RegulatoryAgencyAxis
= bac_FederalHousingAdministrationMember
13,000us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
/ us-gaap_RegulatoryAgencyAxis
= bac_FederalHousingAdministrationMember
 
Residential Portfolio Segment | 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    
Residential Portfolio Segment | Core Portfolio, Residential Financing Receivable      
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 5,561us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
7,188us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
 
Nonperforming loans and leases 2,398us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
3,316us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
 
Accruing past due 90 days or more 3,942us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
5,137us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
 
Residential Portfolio Segment | Core Portfolio, Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Non-performing troubled debt with no change in repayment terms at time of discharge, 90 days or more past due 744us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
693us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
 
Nonperforming loans and leases 1,496us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
1,431us-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
 
Residential Portfolio Segment | Legacy Assets and Servicing Portfolio, Residential Financing Receivable      
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 10,513us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
16,746us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
 
Nonperforming loans and leases 4,491us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
8,396us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
 
Accruing past due 90 days or more 7,465us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
11,824us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
 
Residential Portfolio Segment | Legacy Assets and Servicing Portfolio, Home Equity Financing Receivable      
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 1,166us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
1,292us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
 
Nonperforming loans and leases 2,405us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
2,644us-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
 
Residential Portfolio Segment | Residential Mortgage      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Consumer Portfolio Segment      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 488,570us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
531,950us-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 19,012us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
27,533us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
 
Nonperforming loans and leases 10,819us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
15,840us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
 
Accruing past due 90 days or more 12,433us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
18,555us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
 
Consumer Portfolio Segment | Core Portfolio, Residential Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 162,220us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
177,336us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
 
Consumer Portfolio Segment | Core Portfolio, Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 51,887us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
54,499us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
 
Consumer Portfolio Segment | Legacy Assets and Servicing Portfolio, Residential Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 38,825us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
52,058us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
 
Consumer Portfolio Segment | Legacy Assets and Servicing Portfolio, Home Equity Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 28,221us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
32,580us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
 
Consumer Portfolio Segment | Credit Card Receivable | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 91,879us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
92,338us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ 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 866us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,053us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Accruing past due 90 days or more 866us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,053us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Consumer Portfolio Segment | Credit Card Receivable | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 10,465us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
11,541us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ 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 95us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
131us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Accruing past due 90 days or more 95us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
131us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Consumer Portfolio Segment | Direct/Indirect Consumer      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 80,381us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
82,192us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ 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 65us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
410us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Nonperforming loans and leases 28us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
35us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Accruing past due 90 days or more 64us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
408us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Consumer Portfolio Segment | Other consumer      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 1,846us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
1,977us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ 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 2us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
20us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Nonperforming loans and leases 1us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
18us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Accruing past due 90 days or more 1us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
2us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Consumer Portfolio Segment | Nonperforming Financing Receivable      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Proceeds from sales 4,800us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
2,000us-gaap_ProceedsFromSaleOfLoansAndLeasesHeldForInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
 
Gain (loss) on the sale of loans and leases receivable 247us-gaap_LoansAndLeasesReceivableGainLossOnSalesNet
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
58us-gaap_LoansAndLeasesReceivableGainLossOnSalesNet
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
 
Commercial Portfolio Segment      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Threshold period past due for nonperforming status of financing receivables 90 days    
Loans and leases 392,821us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
396,283us-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 742us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
730us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
 
Nonperforming loans and leases 1,113us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
1,309us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
 
Accruing past due 90 days or more 221us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
204us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
 
Commercial Portfolio Segment | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 220,293us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
212,557us-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 318us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
309us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Nonperforming loans and leases 701us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
819us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Accruing past due 90 days or more 110us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
47us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Commercial Portfolio Segment | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 80,083us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
89,462us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ 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   17us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Nonperforming loans and leases 1us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
64us-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
17us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Commercial Portfolio Segment | Commercial Real Estate      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 47,682us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
47,893us-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 288us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
243us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
 
Nonperforming loans and leases 321us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
322us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
 
Accruing past due 90 days or more 3us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
21us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
 
Commercial Portfolio Segment | Commercial Real Estate | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 45,200us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= country_US
46,300us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Commercial Portfolio Segment | Commercial Real Estate | Non United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 2,500us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
1,600us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Commercial Portfolio Segment | Commercial Lease Financing      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases 24,866us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
25,199us-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 42us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
48us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
 
Nonperforming loans and leases 3us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
16us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
 
Accruing past due 90 days or more 41us-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 Portfolio Segment | 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 94us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
113us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
 
Nonperforming loans and leases 87us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
88us-gaap_FinancingReceivableRecordedInvestmentNonaccrualStatus
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
 
Accruing past due 90 days or more 67us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
78us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
 
Commercial Portfolio Segment | Small Business Commercial | United States      
Financing Receivable, Recorded Investment, Past Due [Line Items]      
Loans and leases $ 13,293us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
/ us-gaap_StatementGeographicalAxis
= country_US
$ 13,294us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
/ us-gaap_StatementGeographicalAxis
= country_US