# Expense changelog

Each entry is something a person using the app can see or do: a new featur, a fix for something that was wrong, a change to something that already worked. The same list is published as markdown at /changelog.md, so a model reading this site can see what changed and when.

Entries are typed: New for a capability that did not exist, Improved for a change to something that already worked, Fixed for a defect that was corrected. The oldest group is a summary of the nine days of building that followed the first commit on 2026-07-30.

## 2026-10-14

- **Fixed:** The map on a trip draws again: the tile service it used started answering with a placeholder reading API KEY REQUIRED, so the route was drawn over that watermark, in the mileage editor and on an exported report's map page alike.
- **Improved:** A stop takes a place name as well as a street address: type westwood UCLA center and the field fills in the address it resolved to, and keeps what you typed when nothing matched.
- **Improved:** A new mileage is filed under your fuel-and-mileage category, whatever your list calls it — Car and truck expenses on the seeded list, Fuel / Mileage on a renamed one — instead of arriving with no category at all, which is what an exact name match against a renamed list did. Trips logged by an assistant, or confirmed from Insights, get the same category.
- **Improved:** A stop left with a business name that the map does not have now resolves through Google Places when a key is configured: typing hsbc bank, Beverly Hills fills in 445 North Bedford Drive, Beverly Hills, CA instead of saying it could not find the place.
- **Fixed:** A category your list no longer has can't be filed to: naming a retired one no longer lands a trip or a receipt on it, a charity or medical drive is never booked on the business car-and-truck line, and saving an expense refuses a name the list does not have (an expense that already carries one keeps it when you save it unchanged).
- **Improved:** The reconcile page leads with the rows that need your decision and runs oldest first: what the matcher settled on its own now comes after what is waiting on you, and each section reads in date order.

## 2026-10-10

- **Fixed:** Mail sent to a connected mailbox imports again: the import could get stuck re-reading the same message until it ran out of time, on every notification, so new receipts stopped being filed with no explanation.

## 2026-10-08

- **Fixed:** A mailbox that briefly loses its connection no longer emails you to reconnect: Expense re-establishes it on its own, and a mailbox that really has stopped working emails you once instead of once per notification.

## 2026-10-05

- **Fixed:** When a mailbox provider stops accepting the sign-in stored for a connected mailbox, you now get the reconnect email, instead of the receipts quietly stopping with no explanation.

## 2026-09-29

- **Fixed:** Marking several statement rows on the reconcile page at once no longer loses the earlier choices: each decision is saved against the version it was made from, so a row you picked never quietly reverts to undecided.
- **Improved:** A warranty now takes up to 12 documents, and the editor says so instead of letting you attach files the save would refuse.
- **Fixed:** Disconnecting an assistant through the standard OAuth revocation endpoint now stops its access token too, not just the refresh token you handed it.

## 2026-09-28

- **New:** Ask Insights how to use an AI assistant with Expense and it walks you through connecting the MCP server: it asks which assistant you use when that matters and gives the steps for Claude, ChatGPT, Gemini CLI, and the rest.
- **Fixed:** Setup steps in Insights answers now render properly: file paths and commands show as code, and a pasted JSON config shows as a code block instead of a wall of backticks.
- **Fixed:** Questions that need a longer think no longer fail with "the AI service didn't answer": the safety cap on streamed answers no longer counts the model's internal reasoning, only the answer you see.

## 2026-09-27

- **Fixed:** The prose pages (support, terms, privacy) no longer split every wrapped line into its own paragraph: consecutive lines form one paragraph, and a link that wraps onto the next line now works.
- **Improved:** Opening the assistant endpoint https://expense.labnotes.org/mcp in a browser now lands you on the connect guide instead of a JSON error; assistant clients are unaffected.

## 2026-09-25

- **Improved:** The Insights answer now starts streaming the moment you ask, with no model call in front of it, and the chart is drawn right after the answer finishes rather than holding it up. The card also tells you when it is checking your books mid-answer, and stopping or re-asking mid-answer leaves the card in a clean state.

## 2026-09-24

- **Fixed:** A forwarded receipt no longer carries your own signature into the expense: the header block above the original message was already dropped, and the signature your mail client adds goes with it now.

## 2026-09-23

- **Fixed:** Confirmation emails now show the receipt image inline in every case: the image the app saved for the expense, whether the receipt arrived as an email body, a screenshot, or a PDF (which also stays attached). The original email text is no longer repeated below it.
- **Fixed:** Pressing ? now shows the G E keycap above the logo, the control that goes back to the expenses page.
- **Fixed:** A file can be dropped anywhere on the page, not only over the content area: dropping in the margins used to hand it to the browser instead.
- **Improved:** The warranty editor saves with Cmd+Enter and leaves with Escape, like the expense editors, and its Delete button asks first in the same dialog.
- **New:** The home page plays a short demo of the app filing a receipt: the drop, the fields read from the PDF, and the expense on the list.
- **New:** The new Warranties page tracks expiry dates, reads warranty terms from uploaded receipts and PDFs, and reminds you before coverage ends.
- **New:** Warranty terms prefill from a curated merchant policy when the merchant matches, and the prefilled terms stay editable.
- **Fixed:** Merchant warranty and return policy details were corrected, including the Costco return windows and Mattress Firm claims.

## 2026-09-22

- **New:** Confirmation emails show the receipt image inline, so you can check the scan without opening an attachment.

## 2026-09-20

- **New:** The Email page lets you turn off a sender for your workspace without deleting the shared rule, and restore it later.
- **New:** You are emailed when a connected mailbox needs reconnecting because its login stopped working.
- **Fixed:** Emails stranded by a crashed import are retried instead of being left behind.

## 2026-09-18

- **New:** You can connect any JMAP mail server as a receipt source, not only Gmail and FastMail.

## 2026-09-17

- **New:** Insights adds a money checkup of year-to-date findings linked to the rows behind them, and charts for totals, categories and top merchants.
- **New:** The alternatives comparison now says whether each competing app imports receipts from a mailbox, with a source for each claim.
- **New:** A new product facts page covers capture methods, Schedule C lines and pricing.
- **Fixed:** Closing or reopening a report from the Reports page now updates the report you clicked.

## 2026-09-15

- **New:** A support page at /support gives you one address to write to, and what to include.

## 2026-09-14

- **New:** Insights questions can be stopped mid-answer with a Stop button, and the ask box grows to fit questions of up to five lines.
- **New:** Settings lets you change your sign-in email, change your password and close your account.

## 2026-09-13

- **Fixed:** Email connections whose receipt catch-up fails are now flagged in Settings as needing attention.

## 2026-09-12

- **Improved:** Bank statements can be dropped anywhere on the reconcile page, not just the upload box, and it takes CSV and PDF files.
- **Improved:** Expense lists, expense details and receipt images all load faster.
- **Fixed:** Insight totals and breakdowns are summed to the cent, and a receipt captured twice is reported as a duplicate.

## 2026-09-11

- **New:** The Insights chat can log a purchase or a drive you describe: it prices the trip and files the amount and currency you confirm.
- **New:** Mileage trips now default to one way with a round trip option, and you can save named places in Settings to reuse as trip stops.
- **Fixed:** Changing your password now signs out your other sessions and revokes access for connected apps.

## 2026-09-10

- **New:** Insights understands plain time ranges such as this month or last quarter and sizes the chart and totals to them.
- **New:** Expense search accepts after: and before: dates, or since: and until:, to filter by a date range.
- **Improved:** Follow-up questions in Insights can be narrowed by date, category, report, type, or merchant.
- **Fixed:** Insights answers now know today's date, so questions about now give the right answer.

## 2026-09-09

- **Fixed:** The Insights ask box clears after each question, and Enter while an answer is in flight no longer resubmits it.

## 2026-09-08

- **New:** The Insights ask box is now a conversation: each question joins a transcript and is answered from your own totals.
- **Fixed:** Asking Insights about AI spending no longer pulls in hosting and other infrastructure.

## 2026-09-07

- **New:** A new Insights page charts your expenses over time, lists the matches in a table, and takes a filter you can type in plain English.
- **New:** Search takes bare amount comparisons and ranges, so >100, <=50 or amount:100-110 narrow the list on the home page and in Insights.
- **New:** Search knows shorthand (from:, store:, cat:, in:) and everyday words (food, gas), and completes values as you type.

## 2026-09-05

- **New:** Settings has an Emails section where you can unsubscribe, and every marketing email carries a one-click unsubscribe link.

## 2026-09-04

- **Improved:** The app, marketing pages and sign-in screens share a new palette: warm paper in light mode and green-tinted graphite in dark mode.
- **Fixed:** Receipts forwarded from a verified address or redirected inside Fastmail are now imported instead of rejected as unverified.

## 2026-09-03

- **New:** Gmail and Google Workspace can be connected as a mailbox, so Expense pulls receipts from Gmail the way it does from Fastmail.
- **Fixed:** The landing page no longer crashes in browsers that block cookies.

## 2026-09-02

- **New:** A /schedule-c-categories page explains each IRS Schedule C expense line in plain language.
- **New:** A /mileage-rates page lists the IRS standard rates for business, medical, moving, and charitable driving.
- **Fixed:** Timestamps in email review, reconcile, settings, and the email list now show your local timezone.
- **Fixed:** Forms and the home navigation fit small screens instead of overflowing.

## 2026-09-01

- **New:** A /connect page walks you through connecting an MCP client, with per-client steps and copy buttons.
- **New:** You can rotate a receipt left or right in the editor, and the rotation is saved.
- **Fixed:** The previous/next buttons in the expense editor now follow the same order as the main expense list.

## 2026-08-31

- **New:** In-page browser agents can read expenses, expense summaries, and reports from the app.
- **Fixed:** Report PDF exports no longer fail when the report name contains non-ASCII characters.

## 2026-08-30

- **New:** Connecting FastMail no longer means pasting an API token: you sign in with FastMail instead.
- **Fixed:** Receipt confirmation emails are sent again for FastMail accounts.

## 2026-08-28

- **New:** Foreign-currency receipts convert to USD at the ECB reference rate for the expense date, keeping the original amount and rate.

## 2026-08-27

- **New:** Expense search filters on report:, category:, merchant:, and description:, suggests known values, and shows an exact total.
- **Improved:** Email review scans the last 90 days of your inbox instead of the 50 most recent messages.
- **Improved:** Bank notification emails no longer land in auto-import, but charge alerts stay available in inbox review.
- **Fixed:** A receipt you import twice, by any route, no longer becomes a second expense, and a failed import retries once.

## 2026-08-26

- **New:** Bank charge alerts that an imported receipt already covers are skipped on the email review page and listed for reference.
- **Fixed:** Exporting a report as PDF no longer fails.

## 2026-08-24

- **New:** Confirmation emails include the original receipt: the body text quoted, or the image or PDF under its original filename.

## 2026-08-23

- **Fixed:** Receipts that arrive by email keep the sender's local date instead of moving to the next day.

## 2026-08-22

- **New:** A Cmd+K command palette adds keyboard navigation, expense search, new-expense shortcuts, and report PDF export.

## 2026-08-21

- **New:** Sign-up now offers a Connect FastMail button that skips the verification email, and there is a password reset flow.
- **New:** A new email review page lists receipt-like emails from a connected mailbox, so each one can be turned into an expense or ignored.
- **Improved:** Apple receipts now name the app or subscription plan in the expense.

## 2026-08-20

- **New:** PDF bills with a text layer in a connected mailbox are imported automatically instead of being skipped.
- **Improved:** Recurring billers such as Shopify, Conservice, Spectrum, and Verizon are recognized as receipts out of the box.
- **Fixed:** Date defaults and the future-date check now use your local day.
- **Fixed:** Inbox scanning no longer stops at a batch of already-seen emails, so newer bills behind them are imported.

## 2026-08-19

- **New:** Connecting a FastMail account imports its receipts automatically, moves them to Trash, and sends you a confirmation email.
- **Improved:** Expense descriptions from email receipts now include the receipt number, so you can tell which email it came from.
- **Improved:** Expenses imported from a connected mailbox are parsed locally, without sending your mail to an LLM.

## 2026-08-17

- **New:** Forwarding a receipt and getting the reply now use one address, receipts@labnotes.org, and replies are sent from the app's mailbox.
- **New:** Emailed receipts are picked up the moment they arrive instead of on a scheduled check.
- **Fixed:** A confirmation reply that fails to send is retried once, so senders don't re-forward the receipt and duplicate the expense.

## 2026-08-16

- **New:** The confirmation reply for an emailed receipt now includes the receipt image and the description read from it.

## 2026-08-15

- **New:** Expenses can be dated in the future, on the web editor and through MCP.
- **Improved:** Signing in locks for 15 minutes after five failed attempts.
- **Fixed:** An expense with only a receipt image is no longer counted as complete, and mileage expenses now need a category.

## 2026-08-14

- **New:** The expense list shows each expense's description, not just its date and distance.
- **New:** You can drop a receipt file on the expense editor to replace the image and re-read its fields.

## 2026-08-13

- **Fixed:** Excel bank statements whose date column uses real date formatting now import instead of skipping those rows.

## 2026-08-12

- **New:** Emailing or forwarding a receipt now gets a confirmation reply naming the amount and report, with the report's new count and total.

## 2026-08-11

- **New:** The Reports page lists open and closed reports with their counts and totals, and you can add, rename, close, reopen and delete them.
- **New:** Expenses in a closed report are read-only, with the editor fields disabled and the Save button hidden.

## 2026-08-10

- **New:** The app follows your system dark mode setting, including the marketing pages and the map.
- **Fixed:** The app no longer answers messages from its own inbound address, which caused an endless email reply loop.

## 2026-08-08

- **New:** Receipts arrive as a photo, a dragged file or a PDF, with the merchant, amount and category read from the image.
- **New:** Forward a receipt email to your own address and it becomes an expense, once the sender confirms a verification link.
- **New:** Accounts with signup, invite-code joining and isolated data; signing in requires confirming your email first.
- **New:** Mileage trips are mapped stop to stop, priced at the IRS rate for the drive's date and type, and drawn on a map in the report PDF.
- **New:** Reports hold the year's expenses and export as a PDF with the receipts attached or a ZIP with the images and CSV.
- **New:** Reconcile matches an uploaded card statement (CSV, Excel, QuickBooks, OFX/QFX, PDF) against the expenses you logged.
- **New:** Assistants connect over MCP to capture receipts, log mileage, read expenses and build reports.
- **New:** The expense list searches by merchant, description, category, amount or mileage address, and flags possible duplicates.
- **Improved:** The app works with a keyboard or a screen reader: landmarks, labeled sections, focus held in dialogs, announced messages.

Expense (https://expense.labnotes.org) is an expense tracker for individuals filing taxes: receipts arrive by photo, screenshot, pasted image, PDF or forwarded email and are read with OCR, categories come from the IRS Schedule C lines, mileage is priced at the IRS rate for the drive date and type, a bank statement reconciles against what was logged, a year exports as a PDF per report or a ZIP with everything, warranty documents become records grouped by what is still covered, and an assistant connects over MCP at https://expense.labnotes.org/mcp. This file lists what changed in the app, with the date of each release. Questions go to assaf@labnotes.org.

[Create a free account](https://expense.labnotes.org/login?mode=create).
