Short-Term Rental Accounting: Airbnb Income, Platform Fees, and Self-Employment Tax

I started hosting on Airbnb last year and quickly discovered that tracking short-term rental income is way more complex than traditional long-term rentals. Between platform fees, occupancy taxes, the 1099-K confusion, and the Schedule E vs C debate, there’s a lot to get right.

Here’s my complete Beancount setup for tracking Airbnb income properly.

The 1099-K Trap: Understanding What Airbnb Reports

This is the most important thing to understand: Airbnb reports GROSS amounts on your 1099-K. This includes:

  • The nightly rate
  • Cleaning fees (if you charge them)
  • Airbnb service fees (that YOU pay!)
  • Occupancy taxes collected

If you just report the 1099-K amount as income and don’t deduct the fees, you’ll massively overpay on taxes.

; What Airbnb 1099-K reports vs what you actually received
2025-12-31 custom "1099k-reconciliation" "annual"
  ; 1099-K Box 1a (Gross Amount)
  gross-reported-by-airbnb: 45000.00

  ; Breakdown of that gross
  actual-rental-income: 42000.00
  cleaning-fees-received: 3600.00    ; 12 stays * $300
  airbnb-host-service-fees: -1350.00  ; 3% of bookings
  airbnb-taxes-collected: 0           ; Remitted separately in my area

  ; What you deposited to bank
  net-received: 44250.00              ; Matches bank deposits

  ; IMPORTANT: Report 45000 as gross, then deduct 1350 as expense
  ; Don't just report 44250 or IRS will flag mismatch!

My Account Structure

; === SHORT-TERM RENTAL ACCOUNTS ===
; Property: 789 Lake View Dr

; === INCOME ===
2025-01-01 open Income:Rental:STR:789LakeView:Nightly        USD
2025-01-01 open Income:Rental:STR:789LakeView:CleaningFees   USD

; === PLATFORM FEES (crucial to track separately!) ===
2025-01-01 open Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb     USD
2025-01-01 open Expenses:Rental:STR:789LakeView:PlatformFees:VRBO       USD
2025-01-01 open Expenses:Rental:STR:789LakeView:PlatformFees:Direct     USD

; === OPERATING EXPENSES ===
2025-01-01 open Expenses:Rental:STR:789LakeView:Cleaning           USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Supplies           USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Utilities          USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Insurance          USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Repairs            USD
2025-01-01 open Expenses:Rental:STR:789LakeView:MortgageInterest   USD
2025-01-01 open Expenses:Rental:STR:789LakeView:PropertyTax        USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Depreciation       USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Linens             USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Photography        USD

; === OCCUPANCY TAX ===
2025-01-01 open Liabilities:OccupancyTax:789LakeView              USD

; === PROPERTY ASSET ===
2025-01-01 open Assets:RealEstate:789LakeView:Building            USD
2025-01-01 open Assets:RealEstate:789LakeView:Land                USD
2025-01-01 open Assets:RealEstate:789LakeView:AccumDepr           USD
2025-01-01 open Assets:RealEstate:789LakeView:Furnishings         USD
2025-01-01 open Assets:RealEstate:789LakeView:Furnishings:AccumDepr  USD

Recording a Single Booking

Here’s how I record each Airbnb payout:

; Guest: Johnson family, Feb 10-15 (5 nights)
; Listing rate: $200/night
; Cleaning fee: $150

2025-02-18 * "Airbnb" "Payout - Johnson booking Feb 10-15"
  Assets:Bank:STR:Checking                           1,107.00 USD

  ; Income components
  Income:Rental:STR:789LakeView:Nightly            -1,000.00 USD
  Income:Rental:STR:789LakeView:CleaningFees         -150.00 USD

  ; Airbnb host service fee (deducted from payout)
  Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb   34.50 USD

  ; Occupancy tax (Airbnb collected and will remit)
  ; Note: This doesn't affect your payout if Airbnb remits
  ; But track it if YOU must remit

    guest: "Johnson"
    checkin: 2025-02-10
    checkout: 2025-02-15
    nights: 5
    gross-booking: 1150.00
    airbnb-fee-rate: 3%
    net-payout: 1107.00

When YOU Collect Occupancy Tax

In some jurisdictions, Airbnb doesn’t remit occupancy tax. You collect it and must pay it yourself:

; Guest pays you the tax, you hold as liability
2025-03-20 * "Airbnb" "Payout - Smith booking (includes occupancy tax)"
  Assets:Bank:STR:Checking                           1,250.00 USD
  Income:Rental:STR:789LakeView:Nightly            -1,000.00 USD
  Income:Rental:STR:789LakeView:CleaningFees         -150.00 USD
  Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb   34.50 USD
  Liabilities:OccupancyTax:789LakeView               -134.50 USD  ; 12% of $1150
    note: "Guest paid tax, I must remit quarterly"

; Quarterly remittance
2025-04-15 * "County Tax Authority" "Q1 occupancy tax remittance"
  Liabilities:OccupancyTax:789LakeView                403.50 USD
  Assets:Bank:STR:Checking                           -403.50 USD
    period: "Q1 2025"

Multi-Platform Tracking

I list on both Airbnb and VRBO. Each has different fee structures:

; Airbnb: 3% host fee
2025-04-10 * "Airbnb" "Payout - Martinez booking"
  Assets:Bank:STR:Checking                             870.00 USD
  Income:Rental:STR:789LakeView:Nightly               -750.00 USD
  Income:Rental:STR:789LakeView:CleaningFees          -150.00 USD
  Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb    27.00 USD

; VRBO: 5% host fee
2025-04-15 * "VRBO" "Payout - Williams booking"
  Assets:Bank:STR:Checking                             855.00 USD
  Income:Rental:STR:789LakeView:Nightly               -750.00 USD
  Income:Rental:STR:789LakeView:CleaningFees          -150.00 USD
  Expenses:Rental:STR:789LakeView:PlatformFees:VRBO      45.00 USD

; Direct booking (no platform fee, but I process payment)
2025-04-20 * "Stripe" "Direct booking - repeat guest Thompson"
  Assets:Bank:STR:Checking                             871.00 USD
  Income:Rental:STR:789LakeView:Nightly               -750.00 USD
  Income:Rental:STR:789LakeView:CleaningFees          -150.00 USD
  Expenses:Rental:STR:789LakeView:PlatformFees:Direct    26.10 USD  ; Stripe 2.9%

Cleaning Expenses vs Cleaning Fee Income

Don’t confuse guest-paid cleaning fees with what you pay your cleaner:

; You charge guest $150 cleaning fee
; You pay cleaner $120 per turnover
; Net: $30 profit per booking (taxable)

2025-02-15 * "Airbnb" "Payout includes cleaning fee"
  Assets:Bank:STR:Checking                             xxx USD
  Income:Rental:STR:789LakeView:CleaningFees         -150.00 USD
  ; ... other postings

2025-02-16 * "Maria's Cleaning" "Turnover clean - Johnson checkout"
  Expenses:Rental:STR:789LakeView:Cleaning            120.00 USD
  Assets:Bank:STR:Checking                           -120.00 USD
    booking: "Johnson Feb 10-15"

Year-End Query for 1099-K Reconciliation

This is the most important query - makes sure you can reconcile to your 1099-K:

; Total gross income (should match 1099-K Box 1a)
SELECT
  year,
  SUM(CASE WHEN account ~ "Income:Rental:STR" THEN -position ELSE 0 END) as gross_income,
  SUM(CASE WHEN account ~ "PlatformFees" THEN position ELSE 0 END) as platform_fees,
  SUM(CASE WHEN account ~ "Income:Rental:STR" THEN -position ELSE 0 END) -
  SUM(CASE WHEN account ~ "PlatformFees" THEN position ELSE 0 END) as net_after_fees
WHERE
  (account ~ "Income:Rental:STR" OR account ~ "PlatformFees")
  AND account ~ "789LakeView"
GROUP BY year

Schedule E vs Schedule C: Track Your Services

The key question is: do you provide “substantial services”? Track what you offer:

2025-01-01 custom "str-services-provided" "789LakeView"
  ; Basic landlord services (Schedule E)
  heat-and-utilities: TRUE
  cleaning-between-guests: TRUE
  linens-provided: TRUE
  wifi-internet: TRUE
  parking: TRUE

  ; Substantial services that might trigger Schedule C
  daily-housekeeping: FALSE        ; Key trigger!
  meals-provided: FALSE            ; Key trigger!
  concierge-services: FALSE
  guided-tours: FALSE
  laundry-service-during-stay: FALSE

  ; My conclusion
  schedule: "E"
  reason: "No substantial services - cleaning only between guests"
  self-employment-tax: FALSE

Questions I’m still figuring out:

  1. How do you handle partial refunds when Airbnb keeps their fee?
  2. Anyone tracking co-host payouts in Beancount?
  3. Best practices for tracking furnishings depreciation (5 or 7 years)?

The 1099-K reconciliation is the key - if your books don’t match what Airbnb reports, expect IRS questions.

Frank, this is great! Let me expand on the Schedule E vs Schedule C question since I get this from STR clients all the time.

The “Substantial Services” Test in Detail

The IRS doesn’t care about the length of your rentals. They care about whether you’re running a hospitality business (Schedule C) or a rental activity (Schedule E).

2025-01-01 custom "substantial-services-test" "IRS-guidance"
  ; ===========================================
  ; SCHEDULE E SERVICES (Normal landlord stuff)
  ; ===========================================
  ; These do NOT trigger Schedule C:
  basic-service-1: "Heat, light, and water"
  basic-service-2: "Cleaning between guests"
  basic-service-3: "Fresh linens for each guest"
  basic-service-4: "Collecting trash"
  basic-service-5: "Repairing/replacing appliances"
  basic-service-6: "Providing wifi and cable"
  basic-service-7: "Stocking consumables (coffee, soap)"

  ; ===========================================
  ; SCHEDULE C SERVICES (Hotel-like services)
  ; ===========================================
  ; These DO trigger Schedule C and self-employment tax:
  substantial-1: "Daily maid service DURING the stay"
  substantial-2: "Providing meals"
  substantial-3: "Concierge/personal services"
  substantial-4: "In-person check-in with property tour"
  substantial-5: "Laundry service during stay"
  substantial-6: "On-call maintenance person"

  ; The key word is DURING the stay
  ; Cleaning BETWEEN guests = Schedule E
  ; Cleaning DURING guest stay = Schedule C

The Tax Math: Why It Matters

Let’s compare the tax impact:

2025-12-31 custom "schedule-comparison" "tax-impact"
  net-rental-income: 25000.00

  ; SCHEDULE E
  schedule-e-income-tax: 6000.00     ; 24% bracket
  schedule-e-se-tax: 0               ; No self-employment tax!
  schedule-e-niit: 0                 ; Under NIIT threshold
  schedule-e-total-tax: 6000.00

  ; SCHEDULE C (if substantial services)
  schedule-c-income-tax: 6000.00     ; Same 24% bracket
  schedule-c-se-tax: 3532.50         ; 15.3% * 92.35% * 25000
  schedule-c-total-tax: 9532.50

  ; DIFFERENCE
  extra-tax-if-schedule-c: 3532.50   ; That's a lot!

Documenting Your Services for Audit Protection

Here’s how I tell clients to document their setup:

; Create annual documentation
2025-01-01 custom "str-operations-documentation" "789LakeView"
  ; CLEANING PROTOCOL
  cleaning-frequency: "Between guests only"
  cleaning-provider: "Maria's Cleaning Service"
  cleaning-evidence: "Invoices dated on checkout days"

  ; GUEST INTERACTION
  check-in-method: "Smart lock with code"
  check-out-method: "Self checkout, guest leaves key"
  on-site-contact: "None - remote host"
  guest-communication: "App messaging only"

  ; AMENITIES STOCKED
  consumables: "Coffee, tea, basic toiletries"
  linens: "Clean set for each booking"
  towels: "Fresh towels per guest, not daily"

  ; WHAT WE DON'T PROVIDE
  no-meals: TRUE
  no-daily-cleaning: TRUE
  no-concierge: TRUE
  no-guided-tours: TRUE

  ; CONCLUSION
  determination: "Schedule E rental activity"
  basis: "No substantial services beyond standard landlord duties"
  documentation-saved: "Operations manual, cleaner invoices, guest communications"

The QBI Deduction Opportunity

Even on Schedule E, you can potentially claim the 20% Qualified Business Income deduction:

2025-12-31 custom "qbi-calculation" "STR"
  ; Net rental income
  rental-income: 42000.00
  rental-expenses: 17000.00
  net-rental-income: 25000.00

  ; QBI deduction (if you qualify)
  qbi-deduction-rate: 20%
  potential-qbi-deduction: 5000.00  ; 20% * 25000

  ; Requirements for STR to qualify
  safe-harbor-met: TRUE
  hours-requirement: "250+ hours of rental services"
  separate-books: TRUE
  documentation: "Time log maintained"

Handling Partial Refunds

Frank asked about this. Here’s how to handle when Airbnb keeps their fee on a refund:

; Original booking: $1,000 + $150 cleaning = $1,150 gross
; Airbnb fee: $34.50
; Guest paid, you received $1,115.50

; Guest cancels after 1 night, gets partial refund
; Airbnb refunds $800 to guest (keeps $350 for 1 night + cleaning)
; But Airbnb keeps their FULL service fee!

2025-03-15 * "Airbnb" "Partial refund - Chen booking canceled"
  ; Reverse the income you're not earning
  Income:Rental:STR:789LakeView:Nightly                800.00 USD
  ; But Airbnb keeps full fee (non-refundable)
  ; No reversal of platform fee!
  Assets:Bank:STR:Checking                            -800.00 USD
    original-booking: "Chen Mar 10-15"
    refund-reason: "Guest illness"
    nights-stayed: 1
    nights-refunded: 4
    note: "Airbnb fee not refunded to host"

; Net result:
; Income: $200 (1 night) + $150 (cleaning) = $350
; Expense: $34.50 (full Airbnb fee)
; This is correct - you only report income for services rendered

Co-Host Payout Tracking

If you use a co-host, their payment shows in your 1099-K gross but isn’t your income:

2025-01-01 open Expenses:Rental:STR:789LakeView:CoHostFees  USD

; Booking with co-host split (co-host gets 20%)
2025-04-10 * "Airbnb" "Payout - booking with co-host split"
  Assets:Bank:STR:Checking                             870.00 USD  ; Your 80%
  Expenses:Rental:STR:789LakeView:CoHostFees           217.50 USD  ; Co-host 20%
  Income:Rental:STR:789LakeView:Nightly            -1,000.00 USD
  Income:Rental:STR:789LakeView:CleaningFees         -150.00 USD
  Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb   62.50 USD  ; Fee on full amount
    gross-booking: 1150.00
    co-host-percentage: 20%
    note: "1099-K will show full $1150, deduct co-host fee"

The co-host gets their own 1099-K for their share. You report the full gross and deduct the co-host payment as an expense. This keeps everyone’s numbers aligned with what Airbnb reports.

Former IRS auditor here. STR returns are getting increased scrutiny because of the 1099-K mismatch issues Frank mentioned. Here’s what you need to know to stay compliant.

The 1099-K Threshold Change is a Big Deal

Starting 2026, Airbnb will issue a 1099-K for anyone receiving $600 or more. Previously it was $20,000 AND 200 transactions. This catches many more casual hosts.

2025-01-01 custom "1099k-thresholds" "history"
  ; OLD RULES (through 2024 for most)
  threshold-amount-old: 20000.00
  threshold-transactions-old: 200
  requirement-old: "Both must be met"

  ; NEW RULES (phased in)
  year-2025: "$5,000 OR 200 transactions"
  year-2026-forward: "$600 (no transaction minimum)"

  ; Impact for casual hosts
  example: "Weekend cabin rented 10x at $400 = $4,000"
  2024-1099k: "No 1099-K issued"
  2026-1099k: "1099-K issued for $4,000"

IRS Matching: Why Accuracy Matters

The IRS computer matches your return against 1099-Ks. Here’s what triggers problems:

2025-01-01 custom "irs-matching-rules" "STR"
  ; AUTOMATIC MISMATCH FLAGS
  flag-1: "Schedule E/C income less than 1099-K gross"
  flag-2: "No Schedule E/C filed when 1099-K received"
  flag-3: "1099-K not reported at all"

  ; THE RIGHT WAY TO REPORT
  step-1: "Report GROSS from 1099-K Box 1a on Schedule E Line 3"
  step-2: "Deduct Airbnb fees on Schedule E Line 8 (Other expenses)"
  step-3: "Your net matches what you actually received"

  ; If using Schedule C
  schedule-c-line-1: "Gross receipts from 1099-K"
  schedule-c-line-8: "Other expenses (includes platform fees)"

Mixed-Use Property: The 14-Day Rule

If you also use the property personally, there’s a special rule:

2025-12-31 custom "14-day-rule" "vacation-home"
  ; IRS RULE
  ; If you rent fewer than 15 days, income is TAX-FREE
  ; But you can't deduct rental expenses either

  ; My beach house example
  total-days-available: 365
  days-rented: 45
  days-personal-use: 30
  days-vacant: 290

  ; Test 1: Rented 15+ days?
  rental-days: 45
  threshold: 15
  subject-to-tax: TRUE  ; Yes, income is taxable

  ; Test 2: Personal use test
  personal-use-days: 30
  ten-percent-rental: 4.5  ; 10% of 45
  greater-of: 14           ; Greater of 14 or 4.5
  personal-use-exceeds: TRUE  ; 30 > 14

  ; RESULT: Mixed-use property
  ; Must allocate expenses between rental and personal
  rental-allocation: "45 / 75 = 60%"  ; 45 rental / (45 rental + 30 personal)
  personal-allocation: "30 / 75 = 40%"

Expense Allocation for Mixed Use

When you use the property yourself AND rent it:

; Total expenses for the year
2025-12-31 custom "expense-allocation" "mixed-use-STR"
  mortgage-interest-total: 12000.00
  property-tax-total: 6000.00
  utilities-total: 3600.00
  insurance-total: 1800.00
  repairs-total: 2400.00

  ; Allocation (60% rental per above)
  rental-percentage: 60%

  ; Schedule E deductions
  mortgage-interest-schedule-e: 7200.00   ; 12000 * 60%
  property-tax-schedule-e: 3600.00        ; 6000 * 60%
  utilities-schedule-e: 2160.00           ; 3600 * 60%
  insurance-schedule-e: 1080.00           ; 1800 * 60%
  repairs-schedule-e: 1440.00             ; 2400 * 60%

  ; Personal portion (may go on Schedule A)
  mortgage-interest-schedule-a: 4800.00   ; 12000 * 40%
  property-tax-schedule-a: 2400.00        ; 6000 * 40%
  ; Other personal expenses: not deductible

2025-12-31 * "Allocation" "Mortgage interest - rental portion"
  Expenses:Rental:STR:789LakeView:MortgageInterest    7200.00 USD
  Expenses:Housing:Personal:789LakeView:MortgageInterest  4800.00 USD
  Expenses:Prepaid:MortgageInterest:789LakeView     -12000.00 USD
    note: "60/40 split per rental vs personal days"

Depreciation for STR Properties

You can only depreciate the rental-use portion:

2025-01-01 custom "str-depreciation" "789LakeView"
  ; Building basis
  purchase-price: 400000.00
  land-allocation: 20%
  building-basis: 320000.00

  ; Rental use allocation
  rental-use-percentage: 60%  ; Based on days
  depreciable-basis: 192000.00  ; 320000 * 60%

  ; Annual depreciation
  useful-life: 27.5
  annual-depreciation: 6981.82  ; 192000 / 27.5

  ; Note: Must recalculate each year based on actual use!

2025-12-31 * "Depreciation" "STR building - rental portion only"
  Expenses:Rental:STR:789LakeView:Depreciation      6981.82 USD
  Assets:RealEstate:789LakeView:AccumDepr          -6981.82 USD
    basis: 192000.00
    method: "Straight-line"
    recovery-period: "27.5 years"
    rental-use-percent: 60%

Furnishings Depreciation: 5 vs 7 Years

Frank asked about this. The answer depends on the item:

2025-01-01 custom "furnishing-depreciation" "IRS-rules"
  ; 5-YEAR PROPERTY (MACRS)
  five-year-items:
    - "Computers and peripherals"
    - "Office equipment"
    - "Appliances (washer, dryer, fridge)"

  ; 7-YEAR PROPERTY (MACRS)
  seven-year-items:
    - "Furniture (beds, sofas, tables)"
    - "Fixtures"
    - "Most other personal property"

  ; Example entries
2025-03-01 * "Furniture Store" "New living room set for STR"
  Assets:RealEstate:789LakeView:Furnishings         3500.00 USD
  Assets:Bank:STR:Checking                         -3500.00 USD
    items: "Sofa, coffee table, chairs"
    depreciation-life: "7 years"
    placed-in-service: 2025-03-01

; First year depreciation (7-year property, half-year convention)
2025-12-31 * "Depreciation" "Furnishings depreciation"
  Expenses:Rental:STR:789LakeView:Depreciation       500.00 USD
  Assets:RealEstate:789LakeView:Furnishings:AccumDepr  -500.00 USD
    asset: "Living room furniture"
    basis: 3500.00
    year-1-rate: 14.29%  ; 7-year MACRS

Audit Red Flags for STR

Based on my IRS experience, here’s what draws attention:

2025-01-01 custom "audit-red-flags" "STR"
  ; HIGH RISK PATTERNS
  red-flag-1: "Large discrepancy between 1099-K and reported income"
  red-flag-2: "Switching between Schedule C and E year to year"
  red-flag-3: "Claiming business use but no rental income"
  red-flag-4: "Excessive repairs vs property value"
  red-flag-5: "Missing occupancy tax remittance records"

  ; WHAT AUDITORS REQUEST
  documentation-1: "Platform payout reports (Airbnb, VRBO)"
  documentation-2: "Bank statements matching deposits"
  documentation-3: "Cleaning receipts matching turnovers"
  documentation-4: "Guest list with dates stayed"
  documentation-5: "Personal use calendar/log"
  documentation-6: "Occupancy tax payment receipts"

Keep your Beancount ledger reconciled to your bank statements and platform reports. That’s your best audit defense.

As a CPA who works with several STR clients, I want to add some practical bookkeeping workflows that make tax time easier.

Monthly Reconciliation Workflow

The biggest mistake I see is hosts waiting until tax time to reconcile. Do this monthly:

; Monthly checklist
2025-02-28 custom "monthly-reconciliation" "February"
  ; Step 1: Download platform reports
  airbnb-payout-report: "Downloaded"
  vrbo-payout-report: "Downloaded"

  ; Step 2: Verify bank deposits match
  total-platform-payouts: 4250.00
  total-bank-deposits: 4250.00
  variance: 0

  ; Step 3: Verify expense receipts
  cleaning-invoices-received: 6
  cleaning-turnovers-recorded: 6
  supplies-receipts-filed: TRUE

  ; Step 4: Record any occupancy tax liability
  tax-collected: 450.00
  tax-remitted: 0  ; Quarterly

  status: "Complete"

The Platform Report to Beancount Pipeline

Here’s my recommended process for importing data:

; I recommend exporting Airbnb's CSV and converting to Beancount
; Each payout becomes one transaction

; Airbnb payout report shows:
; Payout date | Confirmation | Guest | Nightly | Cleaning | Service Fee | Net

; Convert to Beancount entry:
2025-02-20 * "Airbnb" "Payout #ABC123 - Guest Johnson"
  Assets:Bank:STR:Checking                           1107.00 USD
  Income:Rental:STR:789LakeView:Nightly            -1000.00 USD
  Income:Rental:STR:789LakeView:CleaningFees        -150.00 USD
  Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb  43.00 USD
    confirmation: "ABC123"
    guest: "Johnson"
    checkin: 2025-02-15
    checkout: 2025-02-20

Tracking Supplies and Consumables

These small expenses add up. Track them properly:

; Monthly supply run
2025-02-05 * "Costco" "STR supplies restock"
  Expenses:Rental:STR:789LakeView:Supplies           245.00 USD
  Assets:Bank:STR:Checking                          -245.00 USD
    items: "Toiletries, coffee, cleaning supplies, paper goods"

; Keep detailed receipt
2025-02-05 custom "supply-receipt" "Costco"
  toilet-paper: 35.00
  paper-towels: 28.00
  dish-soap: 12.00
  laundry-pods: 24.00
  coffee-keurig: 45.00
  shampoo-conditioner: 32.00
  hand-soap: 18.00
  trash-bags: 22.00
  all-purpose-cleaner: 15.00
  sponges: 14.00
  total: 245.00

Linens: Expense vs Asset

Small linen purchases are expenses; large purchases might be assets:

; Regular replacement linens (expense immediately)
2025-03-10 * "Amazon" "Replacement towels"
  Expenses:Rental:STR:789LakeView:Linens             89.00 USD
  Assets:Bank:STR:Checking                          -89.00 USD
    note: "Replacing worn towels - de minimis"

; Large initial linen purchase (consider capitalizing)
2025-01-15 * "Bed Bath Beyond" "Complete linen set for new STR"
  Assets:RealEstate:789LakeView:Furnishings        1200.00 USD
  Assets:Bank:STR:Checking                        -1200.00 USD
    items: "4 sheet sets, 8 towel sets, 4 duvets, pillows"
    depreciation-life: "5 years"  ; Or expense under de minimis safe harbor

; De minimis safe harbor: Can expense items under $2,500 each
2025-01-15 custom "de-minimis-election" "2025"
  election: "De minimis safe harbor under Reg 1.263(a)-1(f)"
  threshold: 2500.00
  applied-to: "Initial linen purchase $1,200"
  result: "Expensed in full rather than capitalized"

Cleaning Cost Tracking Per Turnover

Track cleaning costs per booking to analyze profitability:

; Track each turnover
2025-02-15 * "Maria's Cleaning" "Turnover clean - Johnson checkout"
  Expenses:Rental:STR:789LakeView:Cleaning          120.00 USD
  Assets:Bank:STR:Checking                         -120.00 USD
    booking: "Johnson Feb 10-15"
    cleaning-fee-charged: 150.00
    profit: 30.00

2025-02-22 * "Maria's Cleaning" "Turnover clean - Smith checkout"
  Expenses:Rental:STR:789LakeView:Cleaning          120.00 USD
  Assets:Bank:STR:Checking                         -120.00 USD
    booking: "Smith Feb 17-22"
    cleaning-fee-charged: 150.00
    profit: 30.00

; Query: Cleaning profit summary
SELECT
  SUM(NUMBER(meta("cleaning-fee-charged"))) as fees_collected,
  SUM(position) as cleaning_paid,
  SUM(NUMBER(meta("profit"))) as cleaning_profit
WHERE
  account = "Expenses:Rental:STR:789LakeView:Cleaning"
  AND year = 2025

Year-End Tax Package

Here’s my template for compiling STR tax information:

2025-12-31 custom "tax-package" "789LakeView-STR"
  ; INCOME RECONCILIATION
  1099k-gross-received: 45000.00
  beancount-gross-income: 45000.00
  variance: 0
  reconciled: TRUE

  ; SCHEDULE E LINE ITEMS
  line-3-rents-received: 45000.00
  line-5-advertising: 0
  line-6-auto-travel: 450.00
  line-7-cleaning-maintenance: 3840.00  ; Cleaning + repairs
  line-8-commissions: 0
  line-9-insurance: 1800.00
  line-10-legal-professional: 0
  line-11-management-fees: 0
  line-12-mortgage-interest: 9600.00
  line-13-other-interest: 0
  line-14-repairs: 1200.00
  line-15-supplies: 2400.00
  line-16-taxes: 4800.00
  line-17-utilities: 2880.00
  line-18-depreciation: 8727.00
  line-19-other: 1350.00  ; Platform fees!

  ; TOTALS
  total-expenses: 37047.00
  net-rental-income: 7953.00

Query: Schedule E Line Item Summary

Use this query to generate your tax numbers:

SELECT
  LEAF(account) as category,
  SUM(position) as amount
WHERE
  account ~ "Expenses:Rental:STR:789LakeView"
  AND year = 2025
GROUP BY category
ORDER BY amount DESC

The key is consistency. Record every transaction the same way, reconcile monthly, and tax time becomes a simple query rather than a scramble through receipts.

This discussion has been incredibly helpful! Let me pull together a complete template and add a few things I’ve learned running my STR for the past year.

Complete Short-Term Rental Beancount Template

; =============================================
; SHORT-TERM RENTAL TEMPLATE
; Replace "789LakeView" with your property ID
; =============================================

option "operating_currency" "USD"

; === CONFIGURATION ===
2025-01-01 custom "str-config" "789LakeView"
  property-address: "789 Lake View Dr, Lake Tahoe CA"
  platforms: "Airbnb, VRBO, Direct"
  average-nightly-rate: 250.00
  cleaning-fee: 150.00
  occupancy-tax-rate: 12%
  airbnb-fee-rate: 3%
  vrbo-fee-rate: 5%
  rental-use-percentage: 100%  ; Or less if mixed use

; === INCOME ACCOUNTS ===
2025-01-01 open Income:Rental:STR:789LakeView:Nightly        USD
2025-01-01 open Income:Rental:STR:789LakeView:CleaningFees   USD
2025-01-01 open Income:Rental:STR:789LakeView:Other          USD

; === PLATFORM FEE ACCOUNTS ===
2025-01-01 open Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb   USD
2025-01-01 open Expenses:Rental:STR:789LakeView:PlatformFees:VRBO     USD
2025-01-01 open Expenses:Rental:STR:789LakeView:PlatformFees:Stripe   USD

; === OPERATING EXPENSES ===
2025-01-01 open Expenses:Rental:STR:789LakeView:Cleaning         USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Supplies         USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Linens           USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Utilities        USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Insurance        USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Repairs          USD
2025-01-01 open Expenses:Rental:STR:789LakeView:MortgageInterest USD
2025-01-01 open Expenses:Rental:STR:789LakeView:PropertyTax      USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Depreciation     USD
2025-01-01 open Expenses:Rental:STR:789LakeView:CoHostFees       USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Photography      USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Advertising      USD
2025-01-01 open Expenses:Rental:STR:789LakeView:SmartHome        USD
2025-01-01 open Expenses:Rental:STR:789LakeView:Travel           USD

; === OCCUPANCY TAX ===
2025-01-01 open Liabilities:OccupancyTax:789LakeView            USD

; === PROPERTY ASSETS ===
2025-01-01 open Assets:RealEstate:789LakeView:Land              USD
2025-01-01 open Assets:RealEstate:789LakeView:Building          USD
2025-01-01 open Assets:RealEstate:789LakeView:Building:AccumDepr USD
2025-01-01 open Assets:RealEstate:789LakeView:Furnishings       USD
2025-01-01 open Assets:RealEstate:789LakeView:Furnishings:AccumDepr USD

; === BANK ACCOUNT ===
2025-01-01 open Assets:Bank:STR:Checking                        USD

Booking Entry Template

; === AIRBNB BOOKING TEMPLATE ===
; YYYY-MM-DD * "Airbnb" "Payout #CONF - Guest NAME"
;   Assets:Bank:STR:Checking                           NET USD
;   Income:Rental:STR:789LakeView:Nightly            -NIGHTLY USD
;   Income:Rental:STR:789LakeView:CleaningFees       -CLEANING USD
;   Expenses:Rental:STR:789LakeView:PlatformFees:Airbnb  FEE USD
;     confirmation: "CONF"
;     guest: "NAME"
;     checkin: YYYY-MM-DD
;     checkout: YYYY-MM-DD
;     nights: N
;     gross-booking: GROSS
;     airbnb-fee: FEE

; === VRBO BOOKING TEMPLATE ===
; Same format, different fee account

Key Queries for STR Management

Query 1: 1099-K Reconciliation

; Must match 1099-K Box 1a
SELECT
  year,
  SUM(CASE WHEN account ~ "Income:Rental:STR" THEN -position ELSE 0 END) as gross_reported
WHERE
  account ~ "Income:Rental:STR:789LakeView"
GROUP BY year

Query 2: Net Operating Income

SELECT
  year,
  SUM(CASE WHEN account ~ "Income" THEN -position ELSE 0 END) as income,
  SUM(CASE WHEN account ~ "Expenses" AND NOT account ~ "Depreciation" THEN position ELSE 0 END) as cash_expenses,
  SUM(CASE WHEN account ~ "Depreciation" THEN position ELSE 0 END) as depreciation,
  SUM(CASE WHEN account ~ "Income" THEN -position ELSE 0 END) -
  SUM(CASE WHEN account ~ "Expenses" THEN position ELSE 0 END) as net_income
WHERE
  account ~ "789LakeView"
GROUP BY year

Query 3: Occupancy and Revenue Stats

SELECT
  month,
  COUNT(DISTINCT meta("confirmation")) as bookings,
  SUM(NUMBER(meta("nights"))) as nights_rented,
  SUM(-position) as revenue
WHERE
  account = "Income:Rental:STR:789LakeView:Nightly"
  AND year = 2025
GROUP BY month
ORDER BY month

Query 4: Platform Fee Comparison

SELECT
  LEAF(account) as platform,
  SUM(position) as fees_paid,
  COUNT(*) as transactions
WHERE
  account ~ "PlatformFees"
  AND year = 2025
GROUP BY platform
ORDER BY fees_paid DESC

Key Takeaways

Item Treatment Notes
1099-K gross Report on Schedule E Line 3 Match Airbnb’s reported amount
Platform fees Deduct on Line 19 (Other) Don’t forget - big savings!
Cleaning fee income Taxable income Report separately from nightly
Cleaning expenses Deductible Track per turnover
Occupancy taxes you remit Not income, not expense Liability account only
Furnishings 5-7 year depreciation Or de minimis if < $2,500
Building 27.5 year depreciation Residential rental property
Schedule E vs C E unless substantial services No SE tax on Schedule E

My Year-End Checklist

2025-12-31 custom "year-end-checklist" "STR"
  ; INCOME VERIFICATION
  task-1: "Download all platform payout reports"
  task-2: "Verify gross income matches 1099-K"
  task-3: "Reconcile bank deposits to payouts"

  ; EXPENSE VERIFICATION
  task-4: "Compile cleaning invoices"
  task-5: "Total supply receipts"
  task-6: "Calculate depreciation"
  task-7: "Verify platform fees match reports"

  ; TAX PREPARATION
  task-8: "Determine rental use percentage"
  task-9: "Allocate expenses if mixed use"
  task-10: "Verify occupancy tax remittance records"
  task-11: "Prepare Schedule E worksheet"

  ; DOCUMENTATION
  task-12: "Archive guest calendar/log"
  task-13: "Save platform annual summaries"
  task-14: "File all receipts by category"

Final Thought

The most important thing I’ve learned: keep a dedicated bank account for your STR. It makes reconciliation trivial - every deposit should match a payout report, every withdrawal should have a receipt. If your STR bank account reconciles to your Beancount ledger, and your income matches Airbnb’s 1099-K, you’re audit-proof.

Thanks everyone for the great discussion! This community is the best resource for STR accounting questions.