ExpenseBot

How do I produce an IRS-compliant mileage log for an audit?

The IRS and CRA require a contemporaneous mileage log to support a vehicle deduction (standard mileage OR actual expense). Without one, the entire deduction can be disallowed in an audit — that's tens of thousands of dollars at risk for a full-time rideshare driver. ExpenseBot's Audit-Ready Mileage Log report assembles every trip in your tracker into a printable spreadsheet that…

The IRS and CRA require a contemporaneous mileage log to support a vehicle deduction (standard mileage OR actual expense). Without one, the entire deduction can be disallowed in an audit — that's tens of thousands of dollars at risk for a full-time rideshare driver. ExpenseBot's Audit-Ready Mileage Log report assembles every trip in your tracker into a printable spreadsheet that meets the IRS Pub 463 / CRA IT-521R format.

What the report includes

SectionContent
Driver blockName + vehicle (year/make/model)
Odometer blockYear-start (Jan 1) + year-end (Dec 31) readings + total miles driven for all uses
Business-use %Calculated automatically from (business miles ÷ total miles driven) once both odometer reads are provided
Year summaryTotal trips, business miles/km, months covered, platforms detected
Trip log detailEvery business trip from your mileage tracker — date, business purpose, notes/route, distance
Driver declarationPrint, sign & date — the audit-acceptable certification statement

What counts as "contemporaneous" vs "reconstructed"

A log is contemporaneous when each trip is recorded at or near the time it was driven. Manual trip entries you make in ExpenseBot (or via the Add Expense flow) are contemporaneous because we timestamp them at entry.

A log is reconstructed when it's assembled after the fact from external records — for example, importing a year of Uber trip CSVs in April for the previous tax year. Both IRS and CRA accept reconstructed logs when they're backed by source documents (the platform CSV counts), but they're weaker than contemporaneous logs and more frequently challenged in audits.

This report labels every row as one of two sources in the Source column:

  • "Manual entry (contemporaneous)" — entered through ExpenseBot's mileage tracker
  • "Reconstructed from Uber export (87 trips, imported 2026-05-20)" — pulled from a platform CSV import; row is highlighted in pale amber so the auditor sees the provenance at a glance

Rule of thumb: when most rows are reconstructed, keep the original Uber/Lyft/DoorDash CSV download alongside this log. The CSV has per-trip start/end addresses that the monthly rollup row doesn't — and that's what an auditor will ask for next.

US vs Canada requirements

IRS (Pub 463 + 26 CFR §1.274-5) — Must include for each business trip:

  • Date
  • Business destination (starting/ending point)
  • Business purpose ("Rideshare driving" suffices as a recurring purpose)
  • Miles driven

Plus annually:

  • Starting + ending odometer reads on Jan 1 and Dec 31
  • Total miles split into business / commuting / personal (per §1.274-5)

Important: the Cohan rule does not apply to vehicle expenses — §274(d) imposes strict substantiation. Estimates are not accepted; per-trip records must be contemporaneous (Pub 463 caps "near the time of the trip" at weekly).

CRA (IT-521R + Motor Vehicle Records guidance) — Must include for each business trip:

  • Date
  • Starting point and destination
  • Trip purpose
  • Kilometres driven

Plus annually:

  • Odometer Jan 1 + Dec 31
  • Total km split into business vs. personal/commuting
  • Business-use % (used on T2125 Chart A to apportion vehicle expenses)

CRA-only simplification — the 3-month sample rule: keep a full 12-month log once as a "base year", then in later years keep only a continuous 3-month sample. If your business-use % from those same 3 months is within ±10 percentage points of the base year, you can apply the base-year % to the whole year. The IRS has no equivalent shortcut.

Retention: IRS expects 3 years from the filing date (6 if you under-reported by >25%). CRA expects 6 years from the end of the tax year.

How to use the report

  1. Open My Reports → Summaries → Audit-Ready Mileage Log
  2. Enter the tax year, your driver name, vehicle description, and odometer reads
  3. Click Preview to verify the trip count + total miles look right
  4. Click Generate log — opens the spreadsheet in a new tab
  5. File → Download → PDF to get a printable copy
  6. Sign & date the declaration row at the bottom
  7. Keep the signed copy with your tax records for the audit retention period:
    • IRS: 3 years from the filed return (longer if you under-reported by >25%)
    • CRA: 6 years from the end of the tax year

How the data gets into the log

The report pulls every row in your main expense sheet whose description starts with "Mileage:" — both the single-trip rows (from manual entry or Add Expense) and the monthly summary rows (from Uber/Lyft/DoorDash CSV imports). It detects both formats automatically — see import Uber CSV mileage and the in-app mileage tracker.

If a trip is missing from the log:

  • Check your main expense sheet for a row matching the date with description starting "Mileage:"
  • If absent, add it manually via the mileage tracker, or re-import the source CSV
  • Re-run the report — newer trips appear automatically (no need to delete the previous log)

Rideshare-specific gotcha: P1 / P2 / P3 miles

Uber and Lyft 1099-K summaries only count P3 miles (passenger in the car). But three other mileage buckets are also deductible if logged:

  • P1 — App on, waiting for a ping (no passenger, no dispatch)
  • P2 — Dispatched, driving to pick up the passenger
  • P3 — Passenger in the vehicle (this is what the platform 1099 reports)
  • Other business miles — driving to gas, car wash, vehicle inspection, supplies

For a typical Uber driver, P1 + P2 add 30-40% additional deductible miles on top of the platform-reported P3 total. If the trip log in this report was assembled from a platform CSV import, it only contains P3 miles and you're under-reporting. To capture P1/P2/other miles, track them manually in the mileage tab (or use a dedicated tracker like Gridwise that records all four buckets via GPS).

The report includes a callout noting this gap for any year where platform-imported rows are present.

Why not a true PDF?

V1 outputs a Google Sheet that prints to PDF. This is intentional:

  • The auditor cares about content (date, purpose, distance, odometer), not the file format
  • A spreadsheet lets you correct mistakes before printing (e.g. fix a wrong destination)
  • You can re-sort, filter, or add notes before signing
  • Google Sheets' built-in File → Download → PDF produces a clean printable copy

If you want a custom PDF with your branding, that's on the roadmap for v2.

Related ExpenseBot guides

Share:

Try ExpenseBot Free

AI extracts every receipt into a Google Sheet you own. Gmail scan, mileage, tax reports, profit-by-client. No credit card needed.

No credit card required · Setup in 30 seconds