Real Estate

Learning to Underwrite: My First Real Attempt on a Kamloops Duplex

I found a duplex listed in Kamloops's Sahali neighbourhood. The CAP rate looked decent on the surface. Then I ran a real underwrite and found three things the listing didn't mention. Numbers, mistakes, and what I learned.

May 8, 202611 min read
underwriting real estateKamloops duplexCAP ratecash flow analysisBC Interior investment

About six weeks into studying real estate investing seriously, I decided I needed to stop consuming theory and actually run the numbers on a real property. Not to buy it — I'm not at that stage yet — but to force myself to work through a full underwrite and see where my model broke down.

I found a duplex in Sahali listed at $569,000. Sahali is one of Kamloops's better established residential neighbourhoods — higher elevation, mix of older single-family homes and some duplexes, close to Royal Inland Hospital and Sahali Secondary. Solid rental demand because of the hospital workforce. It felt like a representative deal to practice on.

Here's what I did, what the listing didn't tell me, and where the numbers actually landed.

Starting Point: What the Listing Showed

The listing gave me the basics. A side-by-side duplex, built 1974, 1,800 square feet total. Two units: upper suite 3-bed/1-bath, lower suite 2-bed/1-bath. Both tenanted. Listing described it as "positive cash flow" and included a rent roll showing:

At $569,000 purchase price, the implied gross CAP rate on asking (using only gross rent, no expenses) is about 6.4%. That sounds okay. That's the number the listing leads with, implicitly. Let me show you what happens when you stop there versus when you actually run the model.

Step One: Build the Real Income Line

Gross rent of $3,050/month is not your effective gross income. You have to account for vacancy.

A 5% vacancy allowance is standard for Kamloops's current market — tight vacancy, as I mentioned, but not zero. Tenants turn over. There's always a month between leases where you're doing repairs and showing the unit. 5% of $36,600 is $1,830/year. So effective gross income drops to $34,770/year, or $2,897.50/month.

Some underwriters use 8–10% vacancy on older properties because tenant quality and turnover tend to be higher in aging stock. I used 5% to stay conservative in the direction that flatters the deal — I wanted to see the upside case, not pad the downside.

Step Two: Operating Expenses

This is where most listings mislead you, not through dishonesty, but through omission. The operating expense line on a real underwrite looks nothing like what appears in a listing description.

Here's my expense model, monthly:

Property tax: The City of Kamloops assessor data showed this property's annual tax bill at approximately $4,700/year based on the current assessment. That's $392/month. I'll call it $390.

Insurance: A landlord policy on a 1974 duplex in Kamloops — I called two insurers to get ballpark quotes. The range was $110–$145/month. I used $125.

Maintenance reserve: This is the number most people underestimate. Standard practice is to reserve 1% of property value annually for maintenance and capital expenditures. On a $569,000 property, that's $5,690/year, or $474/month. I rounded to $475. This is not money you spend every month — it's money you set aside so that when the hot water tank fails or the deck needs replacing, you're not financing it on a credit card.

Property management: I'm planning to self-manage initially. But a real underwrite should include property management even if you're not using it, because (a) your situation changes, and (b) you shouldn't buy a deal that only works if you personally do all the management. Standard property management in Kamloops runs 8–10% of gross collected rent. At 8% of $3,050 = $244/month. I included this.

Utilities: The listing noted tenants pay their own utilities. I verified this is written into the leases. I'm not carrying a utilities line. (More on why this matters later.)

Total monthly operating expenses: $390 + $125 + $475 + $244 = $1,234/month

Net Operating Income (NOI) = Effective Gross Income - Operating Expenses = $2,897.50 - $1,234 = $1,663.50/month ($19,962/year)

Real CAP rate on asking price = $19,962 / $569,000 = 3.51%

Not 6.4%. 3.51%. That gap — from headline CAP to real CAP — is the gap between listings that look like deals and deals that actually are.

Step Three: Debt Service

I modeled a 20% down payment, which is the minimum for an investment property in Canada. 20% of $569,000 = $113,800. Mortgage amount: $455,200.

Rate: I used 5.29% — that's a realistic 5-year fixed rate for an insured investment property mortgage at the time of this analysis. Amortization: 25 years.

Monthly payment at 5.29% on $455,200 over 25 years: approximately $2,740/month.

Monthly cash flow = NOI - Debt Service = $1,663.50 - $2,740 = -$1,076.50/month

That's the honest number. Negative $1,076 per month, or about $12,918/year in negative cash flow. Before any income tax treatment of expenses.

Now, negative cash flow doesn't automatically mean the deal is bad. If there's equity accumulation through mortgage paydown and appreciation, some investors accept modest negative cash flow on the thesis that the total return (appreciation + paydown + rent growth) justifies the monthly shortfall. But at -$1,076/month you're not talking about modest negative cash flow. That's $12,918/year coming out of your pocket. That's a real number.

The Three Things the Listing Didn't Mention

I would have stopped at the math above and moved on. But I kept digging because I wanted to learn what due diligence actually looks like. I found three things.

1. The roof is at end of life.

I pulled the property's permit history through the City of Kamloops open data portal. The last roofing permit was pulled in 2001 — a 25-year-old roof on a duplex that had a flat-roof section over the lower unit. Flat roofs in the BC Interior face significant thermal stress. A replacement on a property this size would run $18,000–$28,000 depending on the system. My 1% maintenance reserve would accumulate roughly $5,700/year. So a $23,000 roof replacement is a four-year reserve drain. That's not a reason to walk, but it's a reason to either negotiate a price reduction or hold back in escrow.

2. One unit is month-to-month at below-market rent.

The lower unit at $1,350/month is occupied by a tenant who has been there for six years. The listing didn't mention this explicitly — I got it by asking a specific question. Under BC's Residential Tenancy Act, that tenant is on a month-to-month arrangement (periodic tenancy), and their rent can only be increased by the provincially-allowed annual amount. The current market rate for a comparable 2-bed in Sahali is approximately $1,600–$1,650/month. The gap is $250–$300/month. At the 2025 limit of 3% annual increase, it would take roughly seven to eight years to close that gap fully. That's a $250/month revenue drag that doesn't show up anywhere in the listing's rent roll.

If I had underwritten this deal with market rents ($1,700 upper + $1,625 lower = $3,325 gross), the numbers would have looked notably different. Using market rents as the income assumption when current rents are below market is a classic beginner mistake. You own the current lease, not the hypothetical market.

3. Radiator heat means elevated utility costs for one unit.

The upper unit has a forced-air gas system. The lower unit has baseboard radiators. In the listing, both units were noted as "tenant pays utilities." But when I looked at the lease for the lower unit, I found that heat is actually included in the lower unit rent — the landlord pays for heating the lower suite. The $1,350/month rent includes heat.

Radiator heat in a 1970s duplex lower unit in Kamloops, where winter temperatures can hit -20°C for extended stretches, runs easily $200–$280/month in heating costs from October through March. Call it $150/month annualized. That's another $1,800/year in operating cost that I had excluded because I took the listing's utilities note at face value without reading the lease.

Adding these back into the model: effective monthly operating expenses are now closer to $1,384/month (adding $150 for heat), pushing monthly cash flow to about -$1,226/month.

What I'd Do Differently

The underwrite itself was the right move. The errors were in my inputs, not my model. Here's what I'd do differently on the next one:

Read the leases before running any numbers. The two issues with the lower unit — below-market rent and included utilities — were both in the lease documents. You can request leases in the disclosure process. Read them.

Pull permits before booking a showing. The City of Kamloops open data portal lets you search permit history by address. A five-minute search would have surfaced the roof issue before I spent two hours building a spreadsheet.

Use current rent, not market rent, for income projections. If the current tenant is paying $1,350, that's what the property earns. Model upside scenario separately, clearly labeled, and don't mix it into your primary underwrite.

Ask about month-to-month tenancies explicitly. This should be a standard question before any offer: "Are any existing tenancies fixed-term or month-to-month, and at what rent?"

This wasn't a deal. The numbers don't work at $569,000, and there are deferred capital costs on top of negative cash flow. But the exercise was exactly what I needed. You learn to underwrite by underwriting, not by reading about it. I found at least four things wrong with my initial approach that I won't repeat on the next one.

That's the whole point.

Apply

If this maps to a problem you're working on.

I work with $1M–$20M ARR founders whose digital investment isn't producing the return it should. Applications reviewed personally within 48 hours.

2 Diagnostic slots / month · 2–3 full engagements / quarter · 48h review