Changelog
What changed in Expense
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.
The entries are the changes a person using the app can see, not the plumbing behind them.
- FixedThe 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.
- ImprovedA 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.
- ImprovedA 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.
- ImprovedA 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.
- FixedA 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).
- ImprovedThe 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.
- FixedMail 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.
- FixedA 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.
- FixedWhen 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.
- FixedMarking 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.
- ImprovedA warranty now takes up to 12 documents, and the editor says so instead of letting you attach files the save would refuse.
- FixedDisconnecting an assistant through the standard OAuth revocation endpoint now stops its access token too, not just the refresh token you handed it.
- NewAsk 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.
- FixedSetup 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.
- FixedQuestions 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.
- FixedThe 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.
- ImprovedOpening 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.
- ImprovedThe 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.
- FixedA 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.
- FixedConfirmation 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.
- FixedPressing ? now shows the G E keycap above the logo, the control that goes back to the expenses page.
- FixedA 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.
- ImprovedThe warranty editor saves with Cmd+Enter and leaves with Escape, like the expense editors, and its Delete button asks first in the same dialog.
- NewThe 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.
- NewThe new Warranties page tracks expiry dates, reads warranty terms from uploaded receipts and PDFs, and reminds you before coverage ends.
- NewWarranty terms prefill from a curated merchant policy when the merchant matches, and the prefilled terms stay editable.
- FixedMerchant warranty and return policy details were corrected, including the Costco return windows and Mattress Firm claims.
- NewConfirmation emails show the receipt image inline, so you can check the scan without opening an attachment.
- NewThe Email page lets you turn off a sender for your workspace without deleting the shared rule, and restore it later.
- NewYou are emailed when a connected mailbox needs reconnecting because its login stopped working.
- FixedEmails stranded by a crashed import are retried instead of being left behind.
- NewYou can connect any JMAP mail server as a receipt source, not only Gmail and FastMail.
- NewInsights adds a money checkup of year-to-date findings linked to the rows behind them, and charts for totals, categories and top merchants.
- NewThe alternatives comparison now says whether each competing app imports receipts from a mailbox, with a source for each claim.
- NewA new product facts page covers capture methods, Schedule C lines and pricing.
- FixedClosing or reopening a report from the Reports page now updates the report you clicked.
- NewA support page at /support gives you one address to write to, and what to include.
- NewInsights questions can be stopped mid-answer with a Stop button, and the ask box grows to fit questions of up to five lines.
- NewSettings lets you change your sign-in email, change your password and close your account.
- FixedEmail connections whose receipt catch-up fails are now flagged in Settings as needing attention.
- ImprovedBank statements can be dropped anywhere on the reconcile page, not just the upload box, and it takes CSV and PDF files.
- ImprovedExpense lists, expense details and receipt images all load faster.
- FixedInsight totals and breakdowns are summed to the cent, and a receipt captured twice is reported as a duplicate.
- NewThe Insights chat can log a purchase or a drive you describe: it prices the trip and files the amount and currency you confirm.
- NewMileage trips now default to one way with a round trip option, and you can save named places in Settings to reuse as trip stops.
- FixedChanging your password now signs out your other sessions and revokes access for connected apps.
- NewInsights understands plain time ranges such as this month or last quarter and sizes the chart and totals to them.
- NewExpense search accepts after: and before: dates, or since: and until:, to filter by a date range.
- ImprovedFollow-up questions in Insights can be narrowed by date, category, report, type, or merchant.
- FixedInsights answers now know today's date, so questions about now give the right answer.
- FixedThe Insights ask box clears after each question, and Enter while an answer is in flight no longer resubmits it.
- NewThe Insights ask box is now a conversation: each question joins a transcript and is answered from your own totals.
- FixedAsking Insights about AI spending no longer pulls in hosting and other infrastructure.
- NewA new Insights page charts your expenses over time, lists the matches in a table, and takes a filter you can type in plain English.
- NewSearch takes bare amount comparisons and ranges, so >100, <=50 or amount:100-110 narrow the list on the home page and in Insights.
- NewSearch knows shorthand (from:, store:, cat:, in:) and everyday words (food, gas), and completes values as you type.
- NewSettings has an Emails section where you can unsubscribe, and every marketing email carries a one-click unsubscribe link.
- ImprovedThe app, marketing pages and sign-in screens share a new palette: warm paper in light mode and green-tinted graphite in dark mode.
- FixedReceipts forwarded from a verified address or redirected inside Fastmail are now imported instead of rejected as unverified.
- NewGmail and Google Workspace can be connected as a mailbox, so Expense pulls receipts from Gmail the way it does from Fastmail.
- FixedThe landing page no longer crashes in browsers that block cookies.
- NewA /schedule-c-categories page explains each IRS Schedule C expense line in plain language.
- NewA /mileage-rates page lists the IRS standard rates for business, medical, moving, and charitable driving.
- FixedTimestamps in email review, reconcile, settings, and the email list now show your local timezone.
- FixedForms and the home navigation fit small screens instead of overflowing.
- NewA /connect page walks you through connecting an MCP client, with per-client steps and copy buttons.
- NewYou can rotate a receipt left or right in the editor, and the rotation is saved.
- FixedThe previous/next buttons in the expense editor now follow the same order as the main expense list.
- NewIn-page browser agents can read expenses, expense summaries, and reports from the app.
- FixedReport PDF exports no longer fail when the report name contains non-ASCII characters.
- NewConnecting FastMail no longer means pasting an API token: you sign in with FastMail instead.
- FixedReceipt confirmation emails are sent again for FastMail accounts.
- NewForeign-currency receipts convert to USD at the ECB reference rate for the expense date, keeping the original amount and rate.
- NewExpense search filters on report:, category:, merchant:, and description:, suggests known values, and shows an exact total.
- ImprovedEmail review scans the last 90 days of your inbox instead of the 50 most recent messages.
- ImprovedBank notification emails no longer land in auto-import, but charge alerts stay available in inbox review.
- FixedA receipt you import twice, by any route, no longer becomes a second expense, and a failed import retries once.
- NewBank charge alerts that an imported receipt already covers are skipped on the email review page and listed for reference.
- FixedExporting a report as PDF no longer fails.
- NewConfirmation emails include the original receipt: the body text quoted, or the image or PDF under its original filename.
- FixedReceipts that arrive by email keep the sender's local date instead of moving to the next day.
- NewA Cmd+K command palette adds keyboard navigation, expense search, new-expense shortcuts, and report PDF export.
- NewSign-up now offers a Connect FastMail button that skips the verification email, and there is a password reset flow.
- NewA new email review page lists receipt-like emails from a connected mailbox, so each one can be turned into an expense or ignored.
- ImprovedApple receipts now name the app or subscription plan in the expense.
- NewPDF bills with a text layer in a connected mailbox are imported automatically instead of being skipped.
- ImprovedRecurring billers such as Shopify, Conservice, Spectrum, and Verizon are recognized as receipts out of the box.
- FixedDate defaults and the future-date check now use your local day.
- FixedInbox scanning no longer stops at a batch of already-seen emails, so newer bills behind them are imported.
- NewConnecting a FastMail account imports its receipts automatically, moves them to Trash, and sends you a confirmation email.
- ImprovedExpense descriptions from email receipts now include the receipt number, so you can tell which email it came from.
- ImprovedExpenses imported from a connected mailbox are parsed locally, without sending your mail to an LLM.
- NewForwarding a receipt and getting the reply now use one address, receipts@labnotes.org, and replies are sent from the app's mailbox.
- NewEmailed receipts are picked up the moment they arrive instead of on a scheduled check.
- FixedA confirmation reply that fails to send is retried once, so senders don't re-forward the receipt and duplicate the expense.
- NewThe confirmation reply for an emailed receipt now includes the receipt image and the description read from it.
- NewExpenses can be dated in the future, on the web editor and through MCP.
- ImprovedSigning in locks for 15 minutes after five failed attempts.
- FixedAn expense with only a receipt image is no longer counted as complete, and mileage expenses now need a category.
- NewThe expense list shows each expense's description, not just its date and distance.
- NewYou can drop a receipt file on the expense editor to replace the image and re-read its fields.
- FixedExcel bank statements whose date column uses real date formatting now import instead of skipping those rows.
- NewEmailing or forwarding a receipt now gets a confirmation reply naming the amount and report, with the report's new count and total.
- NewThe Reports page lists open and closed reports with their counts and totals, and you can add, rename, close, reopen and delete them.
- NewExpenses in a closed report are read-only, with the editor fields disabled and the Save button hidden.
- NewThe app follows your system dark mode setting, including the marketing pages and the map.
- FixedThe app no longer answers messages from its own inbound address, which caused an endless email reply loop.
- NewReceipts arrive as a photo, a dragged file or a PDF, with the merchant, amount and category read from the image.
- NewForward a receipt email to your own address and it becomes an expense, once the sender confirms a verification link.
- NewAccounts with signup, invite-code joining and isolated data; signing in requires confirming your email first.
- NewMileage 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.
- NewReports hold the year's expenses and export as a PDF with the receipts attached or a ZIP with the images and CSV.
- NewReconcile matches an uploaded card statement (CSV, Excel, QuickBooks, OFX/QFX, PDF) against the expenses you logged.
- NewAssistants connect over MCP to capture receipts, log mileage, read expenses and build reports.
- NewThe expense list searches by merchant, description, category, amount or mileage address, and flags possible duplicates.
- ImprovedThe app works with a keyboard or a screen reader: landmarks, labeled sections, focus held in dialogs, announced messages.
Try Expense free.
No subscription, no 25-scan monthly cap, no ads.