Managing real estate investments involves tracking numerous financial activities, including property purchases, rental income, and eventual sales. This guide illustrates how to leverage Beancount, a plain-text double-entry accounting system, to accurately model real estate transactions. By structuring appropriate accounts for assets, liabilities, income, and expenses, readers will learn to document key financial events such as down payments, mortgage servicing, rent collection, and asset appreciation. Whether you’re an experienced investor or just beginning your property journey, this article offers a clear framework for maintaining transparent and comprehensive financial records.

The Beancount example in this post can be found in: https://github.com/flyaway1217/beancount_example/blob/main/single_examples/real_estate.bean

Assumption

In this post, we will buy a house located at 123 ABC Street, XYZ City, WA, 12345 for an investing purpose. After owning it, we will hire a property management company to manage it for us, outsourcing the work like advertising, tenant screening, rent collection etc. By avoiding these tedious work, we can move our attention to next investment. A common management fee is about 10% of the rent.

We further assume that price of this property is $1.4$M USD. We will finance the property acquisition with a 20% cash down payment and secure the remaining 70% through a mortgage loan.

Transaction Process

Purchasing a home in the United States involves several key steps, like getting preapproved for a mortgage, searching for homes, making an offer, inspection, finalizing the mortgage approval and closing the deal. In this post, we will only focus on the steps related to a change in our ledger:

  • Down payment transfer
  • Closing the deal (transfer the remaining funds)
  • Monthly mortgage payment
  • Rent collection
  • Selling the property

Setting Up Accounts

The first step of logging a real estate is to define a list of accounts you will need in the process of buying/managing/selling a property:

Commodity

1
2
3
; Model the house in its own commodity
2023-01-01 commodity XYZ123
    address: "123 ABC Street, XYZ City, WA, 12345"

In the above example, we define a commodity to represent the property. Since the property actually has a fluctuating value (as well as any other investment), we do not want to directly record it using the currency. Instead, we model the property in its own commodity and use the price directive later to reflect its fluctuating value.

Asset Accounts

1
2
3
4
5
6
; Assets accounts
2023-01-01 open Assets:Investment:RealEstate:Properties:Xyz123 XYZ123
2023-01-01 open Assets:Investment:RealEstate:Escrow:Xyz123:Lender USD
2023-01-01 open Assets:Investment:RealEstate:Escrow:Xyz123:TitleCompany USD
2023-01-01 open Assets:Investment:RealEstate:Escrow:Xyz123:Management USD
2023-01-01 open Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 USD

Next, we define five Assets accounts. One of them is used to hold the property itself, three are the escrow accounts of the lender, title company and management company and one account for holding the related cash. The lender escrow account is used to pay for the property taxes and insurance (you can choose to handle them by yourself). The title company facilitates the cash transactions to protect both buyer and seller. And the management escrow account is used to pay for small repairs if necessary when renting. We will need these escrow accounts during our transactions.

Liabilities & Income

1
2
3
4
5
6
; Liabilities accounts
2023-01-01 open Liabilities:Non-current:Mortgage:Xyz123:Lender USD

; Income accounts
2023-01-01 open Income:Investments:RealEstate:Xyz123:Rental USD
2023-01-01 open Income:Investments:RealEstate:Xyz123:PnL

Next, we establish a Liabilities account to record the outstanding mortgage principal. In Beancount, Liabilities accounts typically carry negative balances, reflecting amounts owed. Since this property is intended for investment purposes, we establish an Income account to record the rental revenue it generates and another Income account to track the profit and loss of the property (capital gain).

Expenses

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
; Expenses of Xyz123
2023-01-01 open Expenses:RealEstate:Xyz123:Credits USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Advertising USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Travel USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Maintenance USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Commission USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Insurance:Progressive USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Legal USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:LocalManagementFee USD
2023-01-01 open Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:ClosingFees USD
2023-01-01 open Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:Apprasial USD
2023-01-01 open Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:Interest USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Repairs USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Supplies USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:PropertyTax USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Utility USD
2023-01-01 open Expenses:RealEstate:Xyz123:Miscellaneous:MobileSigningFee USD
2023-01-01 open Expenses:RealEstate:Xyz123:Miscellaneous:Inspection USD
2023-01-01 open Expenses:RealEstate:Xyz123:Miscellaneous:TitleAndSettlementCharges USD
2023-01-01 open Expenses:RealEstate:Xyz123:OperatingExpenses:Legal:GovernmentRecording USD

2023-01-01 open Expenses:RealEstate:Xyz123:SellingExpenses:Commission USD
2023-01-01 open Expenses:RealEstate:Xyz123:SellingExpenses:ClosingCost USD

Finally, we establish a comprehensive list of Expenses accounts. Given that this property is intended for rental purposes, we align our expense categories with those delineated in the IRS Schedule E (Form 1040) to ensure consistency and compliance. This arrangement makes it convenient for reporting tax in the future.

The last two accounts will be used when we sell the property.

Recording the Purchase

Earnest Money & Down Payment

The first financial step of buying a house is to send the earnest money to a title company:

1
2
3
2023-10-12 * "Title Company" "Earnest money to escrow"
    Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 -20,000 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:TitleCompany 20,000 USD

Then, we will conduct an inspection (as well as other steps) to ensure the property is in its good shape. Once everything is good, we transfer the remaining of down payment.

1
2
3
2023-11-13 * "Title Company" "Down payment to escrow"
    Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 -257,873.99 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:TitleCompany 257,873.99 USD

Settlement

After the settlement of a real estate transaction, you will have a buyer’s settlement statement, outlining all the transaction details. By looking at this settlement, we can log the flow of money. The following is one example from a real transaction:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2023-11-14 * "Lender" "Initlizing House"
    ; Add one property with the cost of 1.4 M US dollars
    Assets:Investment:RealEstate:Properties:Xyz123 1 XYZ123 {1,400,000.00 USD}
    ; Pay the property tax
    Expenses:RealEstate:Xyz123:OperatingExpenses:PropertyTax 600.69 USD
    ; This house uses a propane tank. We need pay for that.
    Expenses:RealEstate:Xyz123:OperatingExpenses:Utility 398.03 USD
    Expenses:RealEstate:Xyz123:OperatingExpenses:Utility 10.15 USD
    ; Closing fees collected by the lender
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:ClosingFees 23599.95 USD
    ; Usually we will inspect the house before finalize the transaction
    Expenses:RealEstate:Xyz123:Miscellaneous:Inspection 165.00 USD
    ; Expenses from the lender
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:Apprasial 1,175.00 USD
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:ClosingFees 116.00 USD
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:ClosingFees 9.90 USD
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:ClosingFees 70.00 USD
    ; Prepaid interest
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:Interest 3,491.46 USD
    ; Deposit some money into the escrow account
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender 166.50 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender 4517.16 USD
    ; Miscellaneous expenses
    Expenses:RealEstate:Xyz123:Miscellaneous:TitleAndSettlementCharges 9.38 USD
    Expenses:RealEstate:Xyz123:Miscellaneous:TitleAndSettlementCharges 1758.40 USD
    Expenses:RealEstate:Xyz123:Miscellaneous:TitleAndSettlementCharges 1396.87 USD
    Expenses:RealEstate:Xyz123:Miscellaneous:MobileSigningFee 150 USD
    Expenses:RealEstate:Xyz123:OperatingExpenses:Legal:GovernmentRecording 437.00 USD
    ; Insurance
    Expenses:RealEstate:Xyz123:OperatingExpenses:Insurance:Progressive 666.00 USD
    ; Deduct the earnest money
    Assets:Investment:RealEstate:Escrow:Xyz123:TitleCompany -20,000 USD
    ; The borrowed money
    Liabilities:Non-current:Mortgage:Xyz123:Lender -1,110,586.00 USD
    ; Credits provided by the seller
    Expenses:RealEstate:Xyz123:Credits -50,000.00 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender -277.50 USD
    ; The down payment money
    Assets:Investment:RealEstate:Escrow:Xyz123:TitleCompany -257,873.99 USD

Don’t be intimidated by the above example, it is still one simple transaction, but with many postings. All the postings are copied from the settlement statement. There are some postings can be combined, but in order to be consistent with settlement statement, I leave each item in its own posting.

Credits

Sometimes, the seller provides some credits as an incentive to make the purchase more affordable for the buyer and potentially expedites the sale. For example, in the above example, the seller provided a credit of worth 50,000 USD (line 36). These credits are used to offset the closing cost. That’s why we deduct this 50,000 USD from the Expenses accounts of the property.

Holding the Property

Tracking Mortgage Payments

Starting 2024-01-01, we have to pay the mortgage each month. For each payment, it usually consists of three compositions: principal, interests and potentially an escrow account. For these three compositions, they belong to different accounts:

  • Principal: it is a Liabilities account. Reducing the liabilities is actually increasing our asset values.
  • Interests: it is an Expenses account. This is the real expenses that we have to pay for the mortgage.
  • Escrow: it is an Asset account because these are the set-aside money for the property tax and insurance. Technically, these are still our money (our asset), we just put them aside for a special purpose. This is optional. But in order to free my mind, I let the lender handle the tax and insurance for me.

The first two payments are as following:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
2024-01-01 * "Lender" "Monthly Payment for Mortgage"
    Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 -8,388.03 USD
    Liabilities:Non-current:Mortgage:Xyz123:Lender 956.19 USD
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:Interest 6,247.05 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender 1,184.79 USD

2024-02-01 * "Lender" "Monthly Payment for Mortgage"
    Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 -8,388.03 USD
    Liabilities:Non-current:Mortgage:Xyz123:Lender 961.57 USD
    Expenses:RealEstate:Xyz123:DebtService:Lender:Mortgage:Interest 6,241.67 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender 1,184.79 USD

Note that the exact amount of principal, interests changes month by month due to amortization. To log the accurate loan payment, you will need to check your loan’s monthly statement.

Property Appreciation

As any other investment, the value or market value of the real estate property fluctuates. To properly reflects it prices, we use the price directive of Beancount:

1
2025-04-03 price XYZ123 1,476,500 USD

This directive states the on the date of 2025-04-03, the price of this Xyz123 property is $1,476,500$ USD. Usually we can get the estimated price from websites like Zillow or Redfin.

Renting

As previously indicated, this property is designated for rental purposes. Upon securing a suitable property management company, we will lease the property and commence rent collection:

2024-02-01 * "Management" "Rent Feb 2024"
    Income:Investments:RealEstate:Xyz123:Rental -10,000.00 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Management 10,000.00 USD

2024-02-01 * "Management Fee Feb 2024"
    Assets:Investment:RealEstate:Escrow:Xyz123:Management -1000.00 USD
    Expenses:RealEstate:Xyz123:OperatingExpenses:LocalManagementFee 1000.00 USD

2024-02-21 * "Xyz123: Owner Distribution Feb 2024"
    Assets:Investment:RealEstate:Escrow:Xyz123:Management -9,000.00 USD
    Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 9,000.00 USD

The above example contains three transactions:

  • The first one is the rent collection. Our rent is $10,000$ dollars per month. This is our income, so we have to use the one income account to hold all the income money. The rent usually directly goes into the escrow account of the management company.
  • The second one is the management fee. We assume the management fee is 10% of the rent. So, each month we have to pay $1,000$ towards the management company. This is an expense transaction.
  • The third one is the owner distribution. After deducting the management fee, the net rent will transfer into our own bank account.

Other Holding Expenses

When owning real estates, it’s essential to account for additional costs such as property taxes and insurance premiums. To manage these expenses efficiently, we utilize an escrow account set up by our lender. Each month, a portion of our mortgage payment is allocated to this escrow account. The lender then uses the accumulated funds to pay our property taxes and insurance premiums when they become due.

The following are the examples paying the property tax and insurance:

1
2
3
4
5
6
7
2024-04-05 * "" "Tax Disbursement"
    Expenses:RealEstate:Xyz123:OperatingExpenses:PropertyTax 4,404.27 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender -4,404.27 USD

2024-10-21 * "Progressive" "Property Insurance"
    Expenses:RealEstate:Xyz123:OperatingExpenses:Insurance:Progressive 776.00 USD
    Assets:Investment:RealEstate:Escrow:Xyz123:Lender -776.00 USD

Recording the Sale

After holding the property for a period, we have decided to sell it. Since this sale is planned for the future, the exact miscellaneous fees remain uncertain. Therefore, the following transaction is a hypothetical scenario.

Suppose we sell the property on 2025-05-01 with the price of $1.6$M dollars. Some reference data is as following:

Item Amount
Outstanding mortgage balance 1,094,012.23
Agent Commission(5%) 75,000
Other Closing fee 10,000

So, the hypothetical transaction should look like this:

1
2
3
4
5
6
7
2025-05-01 * "Sell Xyz123"
    Assets:Investment:RealEstate:Properties:Xyz123 -1 XYZ123 {} @ 1,600,000.00 USD
    Liabilities:Non-current:Mortgage:Xyz123:Lender 1,094,012.23 USD
    Expenses:RealEstate:Xyz123:SellingExpenses:Commission 75,000 USD
    Expenses:RealEstate:Xyz123:SellingExpenses:ClosingCost 10,000 USD
    Assets:Investment:RealEstate:OperatingAccounts:JointKeyBank:Xyz123 420,987.77 USD
    Income:Investments:RealEstate:Xyz123:PnL

When selling the property at the price of $1.6$M and paying necessary expenses, we end up with the $420,987.77$ dollars in our bank account. We use Income:Investments:RealEstate:Xyz123:PnL to track our capital gain on this transaction. Otherwise, the transaction will not be balanced.

Final Thoughts

Managing real estate is already a complex business. The last thing you need is a messy spreadsheet or vague accounting. By leveraging Beancount’s plain-text precision and double-entry power, you bring order, clarity, and long-term insight into every property you manage.

Whether you’re tracking one rental or scaling a portfolio, mastering this workflow helps you make smarter decisions, streamline tax season, and ultimately, maximize your investment returns.

So open your text editor, fire up Beancount, and start recording your real estate empire—one balanced transaction at a time.

References