Accounting for credit cards

116 views
Skip to first unread message

Yitzhak Dashevsky

unread,
Mar 17, 2026, 6:21:01 PM (11 days ago) Mar 17
to Beancount
I use my credit card on a daily basis, and at the end of the month I receive a statement. I have two problems: first, I need to record each transaction to keep track of my expenses; second, I need to record the total outstanding balance along with the payment due date. 
Do you have any ideas on how to solve these issues?

Martin Michlmayr

unread,
Mar 17, 2026, 10:21:04 PM (11 days ago) Mar 17
to bean...@googlegroups.com
* Yitzhak Dashevsky <idash...@gmail.com> [2026-03-17 14:49]:
Most banks offer some kind of transaction-level download (in CSV, QFX
or another format). You can use beangulp to import those. Various
importers exist on GitHub.

--
Martin Michlmayr
https://www.cyrius.com/

Oscar Ale

unread,
Mar 18, 2026, 3:16:29 PM (10 days ago) Mar 18
to Beancount

I'm going to assume that the two 'problems' you have is that you want to know 'how' to record credit card transactions using beancount, if not, disregard this and use the importers as Martin suggested.

This is how I manage my credit card transactions, statement reconciliation and due dates, may not be the correct way but it works for me. Credit cards are a liability and carry a negative balance.

 

1) Record opening balance (if you are not importing all of your transaction history)


2026-01-01 * "Discover" "Opening credit card balance"
   Liabilities:Discover:Credit   -1000.00 USD
   Equity:Opening                 1000.00 USD
 

2) Record/import transactions as they happen, positive for expense accounts, negative (increase debt) for liability account


2026-01-05 * "Supermarket" "Groceries"
   Expenses:Groceries             50.00 USD
   Liabilities:Discover:Credit   -50.00 USD ; Increase debt

 

2026-01-10 * "Amazon" "Supplies and clothes"
   Expenses:Clothes               40.00 USD
   Expenses:Supplies              30.00 USD
   Liabilities:Discover:Credit   -70.00 USD ; Increase debt
 

3) When you receive your statement record interest accrued and run a balance to check against your statement balance


2026-01-15 * "Discover" "Interest"
   Expenses:Interest:Discover     30.00 USD
   Liabilities:Discover:Credit   -30.00 USD ; Increase debt

 

2026-01-16 balance Liabilities:Discover:Credit -1150.00 USD
 

4) Record your credit card payment, you can add some meta data or a tag to show for which bill it was for, or the due date


2026-01-20 * "Discover" "Credit card payment for 2026-02" #discover-2026-02
   due: 2026-02-15
   Liabilities:Discover:Credit   100.00 USD ; Decrease debt
     Assets:Bank:Checking         -100.00 USD
 

If you are wanting to track your bills/due dates in a more granular way so that you don't miss a payment or you want to keep track of which payments you've already made, I have a method to do that as well, but this should suffice for basic credit card management and to check your balance.

 

"Yitzhak Dashevsky" idash...@gmail.com – March 17, 2026 5:21 PM
 

I use my credit card on a daily basis, and at the end of the month I receive a statement. I have two problems: first, I need to record each transaction to keep track of my expenses; second, I need to record the total outstanding balance along with the payment due date. 
Do you have any ideas on how to solve these issues?

 

-- 
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/beancount/8cd708ce-2d4b-469f-be7a-bc73450a5b3cn%40googlegroups.com.


 

Felipe M.

unread,
Mar 19, 2026, 12:56:47 PM (10 days ago) Mar 19
to Beancount
I do it pretty much the same way as Oscar, but with a twist. In Brazil it's common to buy things in installments and I wanted to track the total I still owe (future installments), the current credit card bill and account for the full value of the expense when the transaction took place rather than spreading it out. This is what I came up with (for purchases with installments only).

This is the transaction the registers the full value of the purchase (disregard the extra metadata, this is for a script I'm working on)
2025-11-20 * "Pedra de pizza" "Mercadolivre*Brasart" ^pedra-pizza
installments_summary: TRUE
installments_link: "pedra-pizza"
Expenses:Hobbies:Cooking 158.96 BRL
Liabilities:Felipe:BR:Nubank:Credit:Installments:BRL -158.96 BRL

This is one of the installments "moving" liability from the pool of future installments, to the current credit card bill. You can see this is installment ("parcela") 2 of 4. This means I've paid 1 already (NOV), I'm paying one now (DEC) and there are two more to come (JAN and FEB) before I'm done. 
2025-12-20 * "Mercadolivre*Brasart - Parcela 2/4" "Pedra de pizza" ^pedra-pizza
Liabilities:Felipe:BR:Nubank:Credit:CurrentMonth:BRL -39.74 BRL
date: 2025-12-20
ofx_fitid: "6940555d-bd20-4897-9594-1864584829ab"
ofx_memo: "Mercadolivre*Brasart - Parcela 2/4"
ofx_type: "STMTTRN"
Liabilities:Felipe:BR:Nubank:Credit:Installments:BRL 39.74 BRL


These are the accounts involved:
- Expense account charged for the full purchase when the transaction took place: Expenses:Hobbies:Cooking
- Temporary liability account that is initially charged with the full amount but is deducted from as pay monthly installments: Liabilities:Felipe:BR:Nubank:Credit:Installments:BRL - Liability account for the current credit card bill I'll have to pay at the end of the cycle: Liabilities:Felipe:BR:Nubank:Credit:CurrentMonth:BRL

Also not sure this is the correct way but it works for me and numbers add up.

@Oscar I'm interested in how you've set this up to make sure you don't miss payments. Could you share it?

Oscar Ale

unread,
Mar 20, 2026, 2:48:21 PM (8 days ago) Mar 20
to bean...@googlegroups.com

For bill tracking I use a separate 'Liability:Bills' account for each of my bills, this helps me see due dates and makes sure the expenses for each bill land on the month it is due, not on the day the money left my account. For example I may pay my April electricity bill in March, but the expense will show up for April. My process is as follows:

 

1) Receive statement or bill: Record bill transaction with due date as the transaction date. Flag as '!' because it is yet unpaid. Tag with '#bill' and a link for that month '^electricity-2026-04'. Increase 'Liability:Bill:Electricity' debt (money owed) and expense the bill to the appropriate expense account 'Expenses:Utilities:Electricity'

 

2026-04-10 ! "Xcel Energy" "April electricity bill" #bill ^electricity-2026-04
  Expenses:Utilities:Electricity   100.00 USD
  Liabilities:Bills:Electricity   -100.00 USD

 

2) A query will then show me any outstanding bills I may have with their due date and amount due:

 

1970-01-01 query "pending-bills" "

  SELECT date, account, sum(position) as amount, flag
  WHERE account ~ 'Liabilities:Bills' AND flag = '!'
  GROUP BY account, flag, date ORDER BY date"

 

---

 

 date                account               amount  f
----------  -----------------------------  -------  -
2026-04-10  Liabilities:Bills:Electricity  -100.00  !

 

3) Pay the bill: Make a payment to the 'bills' account, (paying money owed). Tag with '#payment', link to bill transaction '^electricity-2026-04', and change the original bill transaction flag to '*' to mark as paid.

 

2026-03-20 * "Xcel Energy" "April electricity payment" #payment ^electricity-2026-04
  Liabilities:Bills:Electricity   100.00 USD


  Assets:Bank:Checking           -100.00 USD

 

2026-04-10 * "Xcel Energy" "April electricity bill" #bill ^electricity-2026-04  ; Update original bill flag to '*'
  Expenses:Utilities:Electricity   100.00 USD
  Liabilities:Bills:Electricity   -100.00 USD

 

4) For credit card payments or loans where you pay more than what is owed you can add a pad directive to balance everything correctly and yet still keep track of the minimum payment due

 

2026-04-15 ! "Discover" "Discover April bill" #bill ^discover-2026-04
  Liabilities:Discover:Credit   50.00 USD ; Minimum payment due
  Liabilities:Bills:Discover   -50.00 USD

 

2026-03-20 * "Discover" "Discover April payment" #payment ^discover-2026-04
  Liabilities:Bills:Discover   100.00 USD ; Actual amount paid


  Assets:Bank:Checking        -100.00 USD

 

2026-04-15 pad Liabilities:Bills:Discover Liabilities:Discover:Credit  ; Pad on date of bill due, or if you paid late, on date you made the payment
2026-04-16 balance Liabilities:Bills:Discover 0.00 USD  ; Balance on day after the pad directive

 

"Felipe M." felipe....@gmail.com – March 19, 2026 11:57 AM
 

Oscar Ale

unread,
Mar 20, 2026, 11:27:51 PM (8 days ago) Mar 20
to bean...@googlegroups.com

For bill tracking I use a separate 'Liability:Bills' account for each of my bills, this helps me see due dates and makes sure the expenses for each bill land on the month it is due, not on the day the money left my account. For example I may pay my April electricity bill in March, but the expense will show up for April. My process is as follows:

 

1) Receive statement or bill: Record bill transaction with due date as the transaction date. Flag as '!' because it is yet unpaid. Tag with '#bill' and a link for that month '^electricity-2026-04'. Increase 'Liability:Bill:Electricity' debt (money owed) and expense the bill to the appropriate expense account 'Expenses:Utilities:Electricity'

 

2026-04-10 ! "Xcel Energy" "April electricity bill" #bill ^electricity-2026-04
   Expenses:Utilities:Electricity   100.00 USD
   Liabilities:Bills:Electricity   -100.00 USD

 

2) A query will then show me any outstanding bills I may have with their due date and amount due:

 

1970-01-01 query "pending-bills" "

   SELECT date, account, sum(position) as amount, flag
   WHERE account ~ 'Liabilities:Bills' AND flag = '!'
   GROUP BY account, flag, date ORDER BY date"

 

---

 

  date                account               amount  f
----------  -----------------------------  -------  -
2026-04-10  Liabilities:Bills:Electricity  -100.00  !

 

3) Pay the bill: Make a payment to the 'bills' account, (paying money owed). Tag with '#payment', link to bill transaction '^electricity-2026-04', and change the original bill transaction flag to '*' to mark as paid.

 

2026-03-20 * "Xcel Energy" "April electricity payment" #payment ^electricity-2026-04
   Liabilities:Bills:Electricity   100.00 USD

   Assets:Bank:Checking           -100.00 USD

 

2026-04-10 * "Xcel Energy" "April electricity bill" #bill ^electricity-2026-04  ; Update original bill flag to '*'


   Expenses:Utilities:Electricity   100.00 USD
   Liabilities:Bills:Electricity   -100.00 USD

 

4) For credit card payments or loans where you pay more than what is owed you can add a pad directive to balance everything correctly and yet still keep track of the minimum payment due

 

2026-04-15 ! "Discover" "Discover April bill" #bill ^discover-2026-04
   Liabilities:Discover:Credit   50.00 USD ; Minimum payment due
   Liabilities:Bills:Discover   -50.00 USD

 

2026-03-20 * "Discover" "Discover April payment" #payment ^discover-2026-04
   Liabilities:Bills:Discover   100.00 USD ; Actual amount paid

   Assets:Bank:Checking        -100.00 USD

 

2026-04-15 pad Liabilities:Bills:Discover Liabilities:Discover:Credit  ; Pad on date of bill due, or if you paid late, on date you made the payment


2026-04-16 balance Liabilities:Bills:Discover 0.00 USD  ; Balance on day after the pad directive
 

"Felipe M." felipe....@gmail.com – March 19, 2026 11:57 AM
 

I do it pretty much the same way as Oscar, but with a twist. In Brazil it's common to buy things in installments and I wanted to track the total I still owe (future installments), the current credit card bill and account for the full value of the expense when the transaction took place rather than spreading it out. This is what I came up with (for purchases with installments only).

Yitzhak Dashevsky

unread,
Mar 23, 2026, 6:40:43 AM (6 days ago) Mar 23
to Beancount
Thanks for the replies and the insights. I appreciate the discussion—thank you!

I found Oscar’s suggestion to be better suited to my needs.
Reply all
Reply to author
Forward
0 new messages