Annual report pursuant to Section 13 and 15(d)

Outstanding Loans and Leases - Past Due (Details)

v2.4.1.9
Outstanding Loans and Leases - Past Due (Details) (USD $)
Dec. 31, 2014
Dec. 31, 2013
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due $ 5,918,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue $ 7,405,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
60-89 Days Past Due 2,749,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue 3,439,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
90 Days or More Past Due 19,754,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue 28,263,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
Total Past Due 30 Days or More 28,421,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue 39,107,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
Total Current or Less Than 30 Days Past Due 823,520,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue 853,819,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
Carrying value gross of valuation allowance 20,769,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality 25,265,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
Loans and leases, measured at fair value 8,681,000,000us-gaap_LoansReceivableFairValueDisclosure 10,042,000,000us-gaap_LoansReceivableFairValueDisclosure
Total Outstandings 881,391,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome 928,233,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
Percentage outstanding, 30-59 days past due 0.67%bac_FinancingReceivableRecordedInvestment30to59DaysPastDuePercentageofTotalOutstanding 0.80%bac_FinancingReceivableRecordedInvestment30to59DaysPastDuePercentageofTotalOutstanding
Percentage outstanding, 60-90 days past due 0.31%bac_FinancingReceivableRecordedInvestment60to90DaysPastDuePercentageofTotalOutstanding 0.37%bac_FinancingReceivableRecordedInvestment60to90DaysPastDuePercentageofTotalOutstanding
Percentage outstanding, Equal to Greater than 90 days past due 2.24%bac_FinancingReceivableRecordedInvestmentEqualtoGreaterthan90DaysPastDuePercentageofTotalOutstanding 3.04%bac_FinancingReceivableRecordedInvestmentEqualtoGreaterthan90DaysPastDuePercentageofTotalOutstanding
Percentage outstanding, 30 days or more past due 3.22%bac_FinancingReceivableRecordedInvestment30DaysorMorePastDuePercentageofTotalOutstanding 4.21%bac_FinancingReceivableRecordedInvestment30DaysorMorePastDuePercentageofTotalOutstanding
Percentage outstanding, current or less than 30 days past due 93.44%bac_FinancingReceivableRecordedInvestmentCurrentand1to29DaysPastDuePercentageofTotalOutstanding 91.99%bac_FinancingReceivableRecordedInvestmentCurrentand1to29DaysPastDuePercentageofTotalOutstanding
Percentage outstanding, purchase credit-impaired 2.36%bac_FinancingReceivableAcquiredwithDeterioratedCreditQualityPercentageofTotalOutstanding 2.72%bac_FinancingReceivableAcquiredwithDeterioratedCreditQualityPercentageofTotalOutstanding
Percentage outstanding, loans accounted for under the fair value option 0.98%bac_LoansReceivableFairValueDisclosurePercentageofTotalOutstanding 1.08%bac_LoansReceivableFairValueDisclosurePercentageofTotalOutstanding
Percentage outstanding, total outstanding 100.00%bac_LoansandLeasesReceivableNetofDeferredIncomePercentageofTotalOutstanding 100.00%bac_LoansandLeasesReceivableNetofDeferredIncomePercentageofTotalOutstanding
Other consumer | Non United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 3,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
5,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Federal National Mortgage Association Certificates and Obligations (FNMA) and Federal Home Loan Mortgage Corporation Certificates and Obligations (FHLMC) | Residential Mortgage    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Unpaid Principal Balance of Loans Covered by Protection Agreements 17,200,000,000bac_LongTermCreditProtectionAgreementsAmountCovered
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
/ us-gaap_InvestmentTypeAxis
= bac_FederalNationalMortgageAssociationCertificatesandObligationsFNMAandFederalHomeLoanMortgageCorporationCertificatesandObligationsFHLMCMember
28,200,000,000bac_LongTermCreditProtectionAgreementsAmountCovered
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
/ us-gaap_InvestmentTypeAxis
= bac_FederalNationalMortgageAssociationCertificatesandObligationsFNMAandFederalHomeLoanMortgageCorporationCertificatesandObligationsFHLMCMember
Pay option | Legacy Assets and Servicing Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 3,200,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_PayOptionMember
4,400,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_PayOptionMember
Dealer Financial Services Loans | Direct/Indirect Consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 37,700,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_DealerFinancialServicesLoansMember
38,500,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_DealerFinancialServicesLoansMember
Unsecured Consumed Lending Loans | Direct/Indirect Consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 1,500,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_UnsecuredConsumedLendingLoansMember
2,700,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_UnsecuredConsumedLendingLoansMember
Securities Based Lending Loans | Direct/Indirect Consumer | United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 35,800,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_SecuritiesBasedLendingLoansMember
/ us-gaap_StatementGeographicalAxis
= country_US
31,200,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_SecuritiesBasedLendingLoansMember
/ us-gaap_StatementGeographicalAxis
= country_US
Securities Based Lending Loans | Direct/Indirect Consumer | Non United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 4,000,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_SecuritiesBasedLendingLoansMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
4,700,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_SecuritiesBasedLendingLoansMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Student Loans | Direct/Indirect Consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 632,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_StudentLoansMember
4,100,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_StudentLoansMember
Other Loans | Direct/Indirect Consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 761,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_OtherLoansMember
1,000,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_ProductOrServiceAxis
= bac_OtherLoansMember
Consumer Finance Loans | Other consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 676,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_ProductOrServiceAxis
= bac_ConsumerFinanceLoansMember
1,200,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_ProductOrServiceAxis
= bac_ConsumerFinanceLoansMember
Consumer Leases | Other consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 1,000,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_ProductOrServiceAxis
= bac_ConsumerLeasesMember
606,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_ProductOrServiceAxis
= bac_ConsumerLeasesMember
Consumer Overdrafts | Other consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 162,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_ProductOrServiceAxis
= bac_ConsumerOverdraftsMember
176,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
/ us-gaap_ProductOrServiceAxis
= bac_ConsumerOverdraftsMember
Nonperforming Financing Receivable | Direct/Indirect Consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Current or Less Than 30 Days Past Due 27,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
33,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
Residential Portfolio Segment    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Carrying value gross of valuation allowance 20,769,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
25,265,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
Residential Portfolio Segment | Core Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 1,847,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
2,151,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
60-89 Days Past Due 700,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
754,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
90 Days or More Past Due 5,561,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
7,188,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Total Past Due 30 Days or More 8,108,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
10,093,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 154,112,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
167,243,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ 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]    
30-59 Days Past Due 218,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
243,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
60-89 Days Past Due 105,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
113,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
90 Days or More Past Due 744,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
693,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Total Past Due 30 Days or More 1,067,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
1,049,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 50,820,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
53,450,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ 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]    
30-59 Days Past Due 2,008,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
2,758,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
60-89 Days Past Due 1,060,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
1,412,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
90 Days or More Past Due 10,513,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
16,746,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Total Past Due 30 Days or More 13,581,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
20,916,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 25,244,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
31,142,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Carrying value gross of valuation allowance 15,152,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
18,672,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ 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]    
30-59 Days Past Due 374,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
444,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
60-89 Days Past Due 174,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
221,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
90 Days or More Past Due 1,166,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
1,292,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Total Past Due 30 Days or More 1,714,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
1,957,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 26,507,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
30,623,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Carrying value gross of valuation allowance 5,617,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
6,593,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Residential Portfolio Segment | Fully Insured Loans    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 2,100,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
2,500,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
60-89 Days Past Due 1,100,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
1,200,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
90 Days or More Past Due 11,400,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
17,000,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
Residential Portfolio Segment | Nonperforming Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 392,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
623,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
60-89 Days Past Due 332,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
410,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 3,600,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
5,900,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_InternalCreditAssessmentAxis
= us-gaap_NonperformingFinancingReceivableMember
Residential Portfolio Segment | Carrying Value | Core Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 162,220,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
177,336,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
Residential Portfolio Segment | Carrying Value | Core Portfolio, Home Equity Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 51,887,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
54,499,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
Residential Portfolio Segment | Carrying Value | Legacy Assets and Servicing Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 53,977,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
70,730,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
Residential Portfolio Segment | Carrying Value | Legacy Assets and Servicing Portfolio, Home Equity Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 33,838,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
39,173,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ResidentialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
Consumer Portfolio Segment    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 5,246,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
6,712,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
60-89 Days Past Due 2,492,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
3,159,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
90 Days or More Past Due 19,012,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
27,533,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Total Past Due 30 Days or More 26,750,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
37,404,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Total Current or Less Than 30 Days Past Due 438,974,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
467,117,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Carrying value gross of valuation allowance 20,769,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
25,265,000,000us-gaap_FinancingReceivableAcquiredWithDeterioratedCreditQuality
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Loans and leases, measured at fair value 2,077,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
2,164,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Total Outstandings 488,570,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
531,950,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Consumer Portfolio Segment | Core Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 162,220,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
177,336,000,000us-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]    
Total Outstandings 51,887,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
54,499,000,000us-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]    
Total Outstandings 38,825,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
52,058,000,000us-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]    
Total Outstandings 28,221,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
32,580,000,000us-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]    
30-59 Days Past Due 494,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
598,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
60-89 Days Past Due 341,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
422,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
90 Days or More Past Due 866,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,053,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total Past Due 30 Days or More 1,701,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
2,073,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total Current or Less Than 30 Days Past Due 90,178,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
90,265,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total Outstandings 91,879,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
92,338,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ 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]    
30-59 Days Past Due 49,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
63,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
60-89 Days Past Due 39,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
54,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
90 Days or More Past Due 95,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
131,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total Past Due 30 Days or More 183,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
248,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total Current or Less Than 30 Days Past Due 10,282,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
11,293,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total Outstandings 10,465,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
11,541,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Percentage outstanding, Equal to Greater than 90 days past due 1.00%bac_FinancingReceivableRecordedInvestmentEqualtoGreaterthan90DaysPastDuePercentageofTotalOutstanding
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
1.00%bac_FinancingReceivableRecordedInvestmentEqualtoGreaterthan90DaysPastDuePercentageofTotalOutstanding
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Percentage outstanding, current or less than 30 days past due 98.00%bac_FinancingReceivableRecordedInvestmentCurrentand1to29DaysPastDuePercentageofTotalOutstanding
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
98.00%bac_FinancingReceivableRecordedInvestmentCurrentand1to29DaysPastDuePercentageofTotalOutstanding
/ 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]    
30-59 Days Past Due 245,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
431,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
60-89 Days Past Due 71,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
175,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
90 Days or More Past Due 65,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
410,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Total Past Due 30 Days or More 381,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
1,016,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 80,000,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
81,176,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Total Outstandings 80,381,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
82,192,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Consumer Portfolio Segment | Other consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 11,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
24,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
60-89 Days Past Due 2,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
8,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
90 Days or More Past Due 2,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
20,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Total Past Due 30 Days or More 15,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
52,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Total Current or Less Than 30 Days Past Due 1,831,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
1,925,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Total Outstandings 1,846,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
1,977,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Consumer Portfolio Segment | Residential Mortgage    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Loans and leases, measured at fair value 1,900,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
2,000,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ResidentialMortgageMember
Consumer Portfolio Segment | Home equity lines of credit    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Loans and leases, measured at fair value 196,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_HomeEquityMember
147,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_HomeEquityMember
Consumer Portfolio Segment | Fully Insured Loans | Core Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 52,990,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
69,712,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioResidentialFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
Consumer Portfolio Segment | Fully Insured Loans | Core Portfolio, Home Equity Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 0us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
0us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_CorePortfolioHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
Consumer Portfolio Segment | Fully Insured Loans | Legacy Assets and Servicing Portfolio, Residential Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 11,980,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
17,535,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioResidentialFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
Consumer Portfolio Segment | Fully Insured Loans | Legacy Assets and Servicing Portfolio, Home Equity Financing Receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 0us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
0us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_LegacyAssetsandServicingPortfolioHomeEquityFinancingReceivableMember
/ us-gaap_InternalCreditAssessmentAxis
= bac_FullyInsuredLoansMember
Consumer Portfolio Segment | Carrying Value    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 486,493,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
529,786,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Consumer Portfolio Segment | Carrying Value | Credit Card Receivable | United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 91,879,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
92,338,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Consumer Portfolio Segment | Carrying Value | Credit Card Receivable | Non United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 10,465,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
11,541,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Consumer Portfolio Segment | Carrying Value | Direct/Indirect Consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 80,381,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
82,192,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Consumer Portfolio Segment | Carrying Value | Other consumer    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 1,846,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
1,977,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Consumer Portfolio Segment | Estimate of Fair Value Measurement    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 2,077,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_EstimateOfFairValueFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
2,164,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_EstimateOfFairValueFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
Commercial Portfolio Segment    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 672,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
693,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
60-89 Days Past Due 257,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
280,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
90 Days or More Past Due 742,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
730,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Total Past Due 30 Days or More 1,671,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
1,703,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Total Current or Less Than 30 Days Past Due 384,546,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
386,702,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Loans and leases, measured at fair value 6,604,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
7,878,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Total Outstandings 392,821,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
396,283,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Commercial Portfolio Segment | United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 320,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
363,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
60-89 Days Past Due 151,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
151,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
90 Days or More Past Due 318,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
309,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total Past Due 30 Days or More 789,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
823,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total Current or Less Than 30 Days Past Due 219,504,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
211,734,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Loans and leases, measured at fair value 1,900,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,500,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total Outstandings 220,293,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
212,557,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Commercial Portfolio Segment | Non United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 5,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
103,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
60-89 Days Past Due 4,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
8,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
90 Days or More Past Due   17,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total Past Due 30 Days or More 9,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
128,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total Current or Less Than 30 Days Past Due 80,074,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
89,334,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Loans and leases, measured at fair value 4,700,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
6,400,000,000us-gaap_LoansReceivableFairValueDisclosure
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total Outstandings 80,083,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
89,462,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Commercial Portfolio Segment | Commercial Real Estate    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30-59 Days Past Due 138,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
30,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
60-89 Days Past Due 16,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
29,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
90 Days or More Past Due 288,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
243,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Total Past Due 30 Days or More 442,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
302,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Total Current or Less Than 30 Days Past Due 47,240,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
47,591,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Total Outstandings 47,682,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
47,893,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ 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]    
Total Outstandings 45,200,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= country_US
46,300,000,000us-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]    
Total Outstandings 2,500,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
1,600,000,000us-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]    
30-59 Days Past Due 121,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
110,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
60-89 Days Past Due 41,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
37,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
90 Days or More Past Due 42,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
48,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Total Past Due 30 Days or More 204,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
195,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 24,662,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
25,004,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Total Outstandings 24,866,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
25,199,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ 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]    
30-59 Days Past Due 88,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
87,000,000us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
60-89 Days Past Due 45,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
55,000,000us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
90 Days or More Past Due 94,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
113,000,000us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
Total Past Due 30 Days or More 227,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
255,000,000bac_FinancingReceivableRecordedInvestment30DaysorMorePastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
Total Current or Less Than 30 Days Past Due 13,066,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
13,039,000,000bac_FinancingReceivableRecordedInvestmentCurrentand1To29DaysPastDue
/ 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]    
Total Outstandings 13,293,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
/ us-gaap_StatementGeographicalAxis
= country_US
13,294,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
/ us-gaap_StatementGeographicalAxis
= country_US
Commercial Portfolio Segment | Carrying Value    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 386,217,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
388,405,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
Commercial Portfolio Segment | Carrying Value | United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 220,293,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
212,557,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= country_US
Commercial Portfolio Segment | Carrying Value | Non United States    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 80,083,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
89,462,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Commercial Portfolio Segment | Carrying Value | Commercial Real Estate    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 47,682,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
47,893,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_RealEstateLoanMember
Commercial Portfolio Segment | Carrying Value | Commercial Lease Financing    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 24,866,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
25,199,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_FinanceLeasesFinancingReceivableMember
Commercial Portfolio Segment | Carrying Value | Small Business Commercial    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings 13,293,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
13,294,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_CarryingReportedAmountFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_SmallBusinessFinancingReceivableMember
Commercial Portfolio Segment | Estimate of Fair Value Measurement    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Outstandings $ 6,604,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_EstimateOfFairValueFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember
$ 7,878,000,000us-gaap_LoansAndLeasesReceivableNetOfDeferredIncome
/ us-gaap_FairValueByMeasurementBasisAxis
= us-gaap_EstimateOfFairValueFairValueDisclosureMember
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_CommercialPortfolioSegmentMember