Menu

Guides · Google Sheets

Freelancer expense tracking in Google Sheets, without building a finance suite

Most freelancers already close the month in Google Sheets. The missing piece is not another finance app. It is a CSV whose headers do not move, so the sheet you built in January still accepts December — invoice PDFs and receipt photos included.

Why most freelancers already live in Google Sheets

The year lives in a tab you already share: with yourself, a partner, or the person who files the return. Software renewals, hosting, a client lunch, a contractor invoice. Adding QuickBooks on top of that is a later decision. The monthly pain is getting the pile into rows.

Vendor PDFs are one half of the folder. Phone photos are the other. The invoice-to-CSV guide and the receipt-to-CSV guide cover those two sources. This page is what you do after the download: a freelancer expense tracking spreadsheet that stays a spreadsheet.

A minimum viable expense sheet, with headers that don’t change

A useful sheet has one header row and one expense per line. It does not need dashboards, approval chains, or a second product named “finance.” Lock these columns, in this order: date | vendor | amount | currency | category | notes | source_file.

Anything you invent — a home-currency amount, which client it belongs to, which card paid it — goes to the right of that block. Those are your columns. The seven on the left are the import. Next month’s file must land on the same names, or the sheet you trusted stops being the sheet. That is the fixed-schema extraction argument: column consistency, not a smarter summary.

Importing a fixed CSV without breaking formulas

In Google Sheets: File → Import → Upload → pick the CSV. Put it on a tab you treat as raw, named something dull like Import. Replace that tab, or append rows under the last real expense. Do not import on top of a sheet where row 2 is a formula.

  • Keep formulas on a Ledger tab, to the right of the seven columns, or on a sheet that reads the raw tab.
  • FILTER or QUERY from Import into Ledger if you want a clean view. The raw tab stays a copy of the file.
  • If a total row sits under the data, leave it alone and append above it. A new header name is what forces you to rebuild that total.

“Invoice PDF to Google Sheets” and “PDF receipts to Google Sheets” are the same move once the CSV is stable: import, don’t retype. A chat reply that invents Merchant one month and Vendor the next is how a SUMIF dies.

Monthly tabs, or one running ledger

Two setups cover almost every freelancer. Pick one and keep the header identical either way.

  • One running ledger. Append each month. Filter the date column when you want March. Easy to see the year. Easy to sort by vendor.
  • A tab per month, same seven headers on each. Easy to send “March” without a filter. Slightly more copying of any formula row you keep at the top.

A third system — a ledger, monthly tabs, a pivot tab, and a dashboard — is the finance suite this page is trying not to build. One ledger plus a filter is enough until a bookkeeper asks for something else.

Multi-currency columns that don’t confuse totals

Amount and currency are separate on purpose. A SUM of the amount column will add US dollars to taka and call it a number. Filter or SUMIF where currency is USD, then again where it is EUR or BDT.

If you want one home-currency total, add your own column to the right of the import and fill the rate yourself. That column is not part of the ParseKit file, so a fresh import does not wipe your rates. Do not glue a currency symbol onto the amount. Sheets should see a number.

Hand the month off: share the Sheet, or export again

Two clean exits. Share the Google Sheet with view or comment access, and point at the Ledger tab. Or File → Download → Comma-separated values, and send that. Both are the same rows.

What a preparer does with the file — and why notes plus source_file cut the “which PDF was this?” thread — is the self-employed bookkeeping guide. The sheet is the handoff. A zip of camera-roll photos is not.

How ParseKit feeds the sheet

The loop is short: drop the month’s invoices and receipts, download one CSV, import it. ParseKit does not live inside Google Sheets, and it does not sync an accounting platform. It writes the seven columns so the import you did last month still fits.

Free is 3 batches a month, up to 8 files each, no card. Pro is $39/mo when a shared folder outgrows that — higher caps, same columns. Paid checkout is Lemon Squeezy, and it may still be pending, so this page does not ask you to buy Pro today.

The repeating version of this import is the monthly batch workflow: one folder, one parse, one download, then archive.

Start free, export the CSV, and import it into the sheet you already use. Pro stays $39/mo for when Lemon Squeezy checkout is open.

Start free — 3 batches, no card