appscript.dev
Blog Drive Sheets Gmail

How I automated my year-end accounting prep

Pulling Northwind's year together for tax season — receipts, invoices, expenses, in one folder.

By Awadesh Madhogaria · Published Oct 24, 2025

Every January, the same dread arrived at Northwind: tax season. A year of receipts, invoices, and card charges scattered across Gmail, Drive, and Stripe, all needing to be gathered, named, and handed to the accountant.

It was never hard work. It was just a week of slow, fiddly assembly — searching Gmail for every receipt attachment and downloading it one by one, reconciling those against the Stripe export to catch anything missing, renaming files so the accountant could actually tell them apart, then dropping everything into a folder and writing the handover email. None of it required judgement. It required patience, a clear afternoon, and a tolerance for repetitive clicking.

The real cost was bigger than the hours. It always landed in the busiest part of the year, mistakes were easy — a missed receipt meant a missed deduction — and the accountant’s first reply was usually “can you re-send these, properly named?” So I turned that week into a button I press in December.

What runs in December

The key realisation was that the data already existed — in the Invoices sheet, the Expenses sheet, and Gmail. Nothing needed gathering. It needed assembling. So I wrote a script that runs in December and does exactly that:

  1. Pull all invoices from the Invoices sheet → PDFs in year-end/invoices/.
  2. Pull all expenses from the Expenses sheet → PDFs in year-end/expenses/.
  3. Build categorised totals into a Summary Doc the accountant can read in two minutes.
  4. Email the accountant with a link to the folder.

Every PDF is named with date, client, and amount, so the folder is sorted and searchable before the accountant even opens it. The week I used to spend pulling receipts from Gmail attachments and reconciling against Stripe exports is the thing I was really buying back — the script does the same job in a few minutes, and it never gets bored halfway through and misses a row.

What still needs me

One part stays human: the accountant’s questions. The script can’t predict those. Every year there is a charge that needs explaining or a category that needs a human decision. What the script does is get the accountant to that conversation faster — it just can’t have the conversation for me.

The payoff is worth being plain about. A week of January admin became a script that runs while I do something else. The handover folder is consistent, named, and complete every year, and the accountant stops asking for re-sends, which speeds up the whole return. If you want the pieces I built it from, I cover auto-forwarding receipts to your accountant and syncing invoices to QuickBooks or Xero separately.

The takeaway

Year-end prep felt like a project because it arrived once a year. It was really just assembly of data I already had — and assembly is always a script you have not written yet.