Tracking Buy Now Pay Later (BNPL) Debt Across Multiple Services in Beancount

The rise of Buy Now Pay Later services (Affirm, Afterpay, Klarna, Apple Pay Later, PayPal Pay Later) has created a new tracking challenge for Beancount users.

The BNPL Tracking Problem

BNPL services make purchasing frictionless, but create hidden debt across multiple platforms:

  • Each service has its own payment schedule
  • No consolidated view of total obligations
  • Not typically reported to credit bureaus (“phantom debt”)
  • Easy to lose track of total monthly payment burden

Recent data:

  • BNPL market: $70B in 2025, projected $258B by 2031
  • 63% of borrowers have multiple simultaneous BNPL loans
  • 33% use multiple BNPL providers
  • 41% paid late in past year (up from 34%)

Recommended Beancount Structure

Track BNPL as liabilities with separate accounts per service:

; Create liability accounts
2026-01-01 open Liabilities:BNPL:Affirm
2026-01-01 open Liabilities:BNPL:Afterpay
2026-01-01 open Liabilities:BNPL:Klarna

; Record purchase
2026-01-15 * "Laptop via Affirm"
  Expenses:Electronics:Computer    800.00 USD
  Liabilities:BNPL:Affirm          -800.00 USD

; Record payments
2026-02-15 * "Affirm payment - laptop"
  Liabilities:BNPL:Affirm   67.00 USD
  Assets:Checking          -67.00 USD

Querying Total BNPL Debt

Use BQL to see consolidated obligations:

SELECT account, sum(position)
WHERE account ~ 'Liabilities:BNPL'
GROUP BY account

Best Practices

  1. Separate account per service - easier to track and reconcile
  2. Record full purchase immediately - shows true liability on balance sheet
  3. Track payments as liability reduction - decreases debt as paid
  4. Use metadata for payment schedules if needed
  5. Monthly reconciliation - review total BNPL exposure

Discussion Topics

  • How do you structure BNPL tracking in your ledger?
  • Metadata strategies for payment schedules?
  • Red flags for excessive BNPL usage?
  • Automation approaches for recurring payments?

This is an evolving area as BNPL adoption grows. Would love to hear community approaches.

This topic hits close to home - I just went through this exact discovery process last month.

I was tracking everything in Beancount (checking, credit cards, investments, student loans) but completely ignoring my BNPL obligations because they felt like “not real debt.”

My wake-up call: I ran a net worth calculation and realized something was off. My spending seemed reasonable, but my cash position kept shrinking. Turns out I had $3,850 in BNPL debt across 4 services that I wasn’t tracking.

The structure you outlined is exactly what I ended up using:

2026-01-10 open Liabilities:BNPL:Affirm
2026-01-10 open Liabilities:BNPL:Afterpay
2026-01-10 open Liabilities:BNPL:Klarna
2026-01-10 open Liabilities:BNPL:Apple-Pay-Later

I also added metadata to track the key details:

2025-11-15 * "Laptop purchase via Affirm"
  Expenses:Electronics:Computer    800.00 USD
  Liabilities:BNPL:Affirm          -800.00 USD
    @bnpl-payment-amount: "67"
    @bnpl-payment-frequency: "monthly"
    @bnpl-total-payments: "12"
    @bnpl-remaining: "9"
    @bnpl-end-date: "2026-08-15"

This lets me track not just the current balance, but also see when each obligation ends.

My current BQL query:

SELECT 
  account, 
  sum(position) as balance,
  any_meta("bnpl-payment-amount") as monthly_payment
WHERE account ~ 'Liabilities:BNPL'
GROUP BY account
ORDER BY balance DESC

This shows me:

  • Total balance per service
  • Monthly payment for each
  • Which service has the highest balance (priority for paydown)

The biggest lesson: Once I started tracking this in Beancount, I immediately changed my behavior. Seeing $3,850 in liabilities on my balance sheet made it REAL in a way that scattered app notifications never did.

I’m now down to $3,215 and have a rule: no new BNPL until total is under $2,000.

Question for others: Do you track the original purchase date and end date in metadata? I’m wondering if that’s useful for forecasting when obligations end.

Great timing on this topic - I’m dealing with exactly this issue for several small business clients.

Business Use Case:

One of my e-commerce clients was using BNPL for inventory purchases and equipment. He thought it was “just small payments” until I showed him the consolidated view:

  • Affirm: $2,100 (photo equipment)
  • Klarna: $1,350 (packaging supplies)
  • PayPal Pay Later: $1,800 (holiday inventory)

Total: $5,250 in business BNPL obligations

This matters for several reasons:

1. Balance Sheet Accuracy

If you’re NOT tracking BNPL as liabilities, your balance sheet is wrong. Lenders, investors, and credit applications need to see your true debt picture.

2. Cash Flow Planning

BNPL payments are cash outflows that compete with other business expenses. If you’re not tracking them, your cash flow projections are off.

3. Month-End Closing

For businesses doing proper month-end closes, BNPL needs to be reconciled just like any other liability account.

My Recommended Structure for Business:

; Separate business BNPL from personal
2026-01-01 open Liabilities:Business:BNPL:Affirm
2026-01-01 open Liabilities:Business:BNPL:Klarna

; Track the asset purchase
2025-12-10 * "Business camera via Affirm"
  Assets:Business:Equipment:Camera   2,100.00 USD
  Liabilities:Business:BNPL:Affirm  -2,100.00 USD
    @business-use: "100%"
    @depreciation: "7-year"
    
; Monthly reconciliation
2026-01-10 * "Affirm payment - camera"
  Liabilities:Business:BNPL:Affirm    175.00 USD
  Assets:Business:Checking           -175.00 USD

Monthly Reconciliation Routine:

  1. Pull bank statement
  2. Identify all BNPL payments
  3. Record each payment in Beancount
  4. Run balance query to verify remaining liability matches app
  5. Flag any discrepancies

Query for Total Business BNPL:

SELECT account, sum(position)
WHERE account ~ 'Liabilities:Business:BNPL'
GROUP BY account

Red Flags I Watch For:

  • BNPL payments > 10% of monthly revenue
  • Stacking multiple BNPL services (usually means cash flow stress)
  • Using BNPL for operating expenses (should be for capital purchases only)
  • Can’t pay off existing BNPL before starting new ones

Pro Tip: Set up a monthly reminder to reconcile BNPL accounts. Treat it like credit card reconciliation - a regular bookkeeping task, not optional.

For personal use, the structure is the same. Just swap Liabilities:Business:BNPL for Liabilities:Personal:BNPL or simply Liabilities:BNPL.

The key is: track it like real debt, because it IS real debt.

Love this discussion - BNPL tracking is one of those “modern finance” challenges that wasn’t really a thing when I started using Beancount 4 years ago.

A friend’s experience (that prompted me to think about this):

She switched to Beancount last year after using spreadsheets. Very organized person, tracks everything meticulously. But she had BNPL spread across 5 different services and wasn’t tracking any of it.

Her reasoning: “It’s automatically deducted, so I don’t need to track it.”

The problem: She had no idea her total BNPL burden was $4,100 and $640/month in payments.

When we set up her Beancount tracking, the balance sheet revelation was immediate. Seeing those liabilities listed right there made it impossible to ignore.

Start Simple Approach:

If you’re new to this, don’t overcomplicate it. Here’s the minimum viable structure:

; Just three things to start
2026-01-01 open Liabilities:BNPL:Affirm
2026-01-01 open Liabilities:BNPL:Afterpay
2026-01-01 open Liabilities:BNPL:Klarna

; Record what you bought and what you owe
2025-10-15 * "Laptop via Affirm"
  Expenses:Electronics    800.00 USD
  Liabilities:BNPL:Affirm  -800.00 USD

; Record each payment as you make it
2025-11-15 * "Affirm monthly payment"
  Liabilities:BNPL:Affirm   67.00 USD
  Assets:Checking          -67.00 USD

Don’t worry about:

  • Perfect metadata (add it later if useful)
  • Automated imports (do manual first)
  • Historical data going back years (start from today)

Do focus on:

  • Recording new BNPL purchases immediately
  • Tracking every payment
  • Monthly total check (does Beancount match the app?)

Evolution Over Time:

After you get the basics working, you can add:

  • Metadata for payment schedules
  • BQL queries for forecasting
  • Automation for recurring payments
  • Historical backfill if you want complete records

The Key Insight:

BNPL is designed to be invisible. Beancount makes it visible. That visibility changes behavior.

Once my friend could see her $4,100 total on her balance sheet, she:

  1. Stopped starting new BNPL plans
  2. Made extra payments to accelerate paydown
  3. Set a “total BNPL” threshold she won’t cross ($2,000)

She’s now down to $3,100 and dropping. Tracking works.

For Beginners:

If you’re new to Beancount and new to tracking BNPL, remember:

  • Imperfect tracking > no tracking
  • You can always refine your approach later
  • The goal is awareness, not perfection

Start with the basic structure above, record for one month, then decide if you need more sophistication.

Celebrating progress: Six months ago, she didn’t know she owed $4,100. Today she knows she owes $3,100 and it’s decreasing. That’s a win.

As a CPA, I’m seeing BNPL show up more and more in client financials, and the tracking gap is a real problem.

Tax Season Discovery:

During tax prep, I ask clients about debts and liabilities. Increasingly, the conversation goes:

Me: “Any Buy Now Pay Later services - Affirm, Afterpay, Klarna?”

Client: pause “Oh yeah, I use those. But that’s not debt, right?”

Me: “How much do you owe across all services?”

Client: “Uh… maybe $800?”

Then we check. Actual total: $3,500-5,000.

Why This Matters Professionally:

1. Cash Flow vs Tax Planning

BNPL payments are cash outflows that compete with tax savings. I’ve seen clients who:

  • Have $600/month in BNPL obligations
  • Don’t budget for quarterly estimated taxes
  • End up owing penalties because BNPL took priority

Solution: Track BNPL as fixed obligations BEFORE calculating tax savings capacity.

2. The 2026 Reporting Change

Starting in 2026, BNPL providers must report loans over $500 to credit bureaus. This means:

  • “Phantom debt” becomes visible on credit reports
  • Affects mortgage applications, credit limits
  • More critical than ever to proactively track and manage

3. Business Use Complications

For business owners using BNPL:

; Track business vs personal separately
2026-01-01 open Liabilities:Business:BNPL:Affirm

; Record business equipment purchase
2025-12-15 * "Business laptop via Affirm"
  Assets:Business:Equipment:Computer   1,200.00 USD
  Liabilities:Business:BNPL:Affirm    -1,200.00 USD
    @business-percent: "100"
    @depreciation-class: "5-year"

Why this structure matters:

  • Clear separation for Schedule C reporting
  • Tracks depreciation alongside liability
  • Metadata documents business use for audit defense

4. No Interest Deduction

Unlike traditional loans, most BNPL is 0% interest, which means:

  • No Schedule A interest deduction
  • No business interest expense deduction
  • Late fees are NOT deductible (just lost money)

The 2026 late fee cap: Now limited to $8 per missed payment, but that’s still $8 you can’t deduct.

Red Flags I Watch For:

  • Total BNPL > 10% of monthly income (cash flow stress)
  • Using BNPL for groceries (sign of financial distress - 25% of users now do this)
  • Can’t list all active BNPL from memory (tracking failure)
  • Stacking multiple providers (33% of users do this)
  • Late payments (41% paid late in past year - up from 34%)

Professional Recommendations:

For personal filers:

  1. Track BNPL as liabilities in Beancount
  2. Run monthly total query
  3. Budget for quarterly taxes AFTER accounting for BNPL
  4. Set a “maximum total BNPL” threshold

For business owners:

  1. Separate business BNPL from personal
  2. Track business-use percentage with metadata
  3. Maintain documentation for potential audit
  4. Consider depreciation timing (Section 179 vs regular)

BQL Query I Recommend:

SELECT 
  account,
  sum(position) as balance,
  count(position) as num_transactions
WHERE account ~ 'Liabilities:BNPL'
GROUP BY account
ORDER BY balance DESC

This shows:

  • Current balance per service
  • Number of transactions (activity level)
  • Which service to prioritize for payoff

Bottom Line:

BNPL isn’t inherently bad - it’s a tool. But like any financial tool, you need visibility and management.

The frictionless checkout is designed to minimize payment pain. Beancount provides the counter-balance: complete visibility of obligations.

I’m now asking ALL my clients about BNPL usage during intake. It’s become that common.

Question: For those with business BNPL, how do you track mixed-use purchases (e.g., laptop 80% business, 20% personal)? Do you split the liability or use metadata?