Bulk receipt download
Every time you log a parts-and-bills entry or a service-history row, you can attach the original receipt PDF or photo. At tax time, year-end, or when handing the books to an accountant, you don't want to click each one individually. The bulk download wraps everything into a single zip with a CSV manifest so you (or your accountant) can pivot, file, and forget.
Where the button lives
From the top nav click Settings, then open Account. Scroll to the Download receipts card near the bottom.

What you get
Click Download zip and your browser saves a file named garagehq-receipts-YYYY-MM-DD.zip (the date is today's, not the receipts').
Open the zip and you'll see:
garagehq-receipts-2026-04-29.zip
āāā manifest.csv
āāā AB19XYZ/
ā āāā 2026-04-15_fuel_charging_42_shell-receipt.pdf
ā āāā 2026-03-01_insurance_31_admiral-renewal.pdf
ā āāā 2026-02-12_service_18_full-service-invoice.pdf
āāā CD20PQR/
āāā 2026-03-22_repair_57_brake-pad-job.jpg
- One folder per vehicle, named after the registration with spaces and odd characters stripped (so
AB19 XYZbecomesAB19XYZ). - One file per receipt, named
<date>_<category>_<id>_<original-filename>. The id is the row id from the database; useful when two receipts on the same day for the same category would otherwise collide. - manifest.csv at the root with one row per receipt.
The manifest
manifest.csv is the index. Open it in Excel, Numbers, or feed it into Xero / QuickBooks / FreeAgent. Columns:
| Column | What it is |
|---|---|
vehicle_reg | The vehicle's registration |
vehicle_make | DVLA-reported make (e.g. FORD) |
vehicle_model | The model recorded against the vehicle |
kind | expense or service_history |
date | The expense or service date (not the upload time) |
category | fuel_charging, insurance, mot, tax, parts, repair, service, or other |
vendor_or_description | For expenses: the vendor (Shell, Halfords). For service: the description. |
amount_pence | Amount in pence (so £45.67 reads as 4567). Service rows are converted from pounds. |
currency | Always GBP today |
doc_id | Internal id of the document row, useful for support queries |
doc_filename | The original filename you uploaded |
zip_path | Where the file lives inside this zip (e.g. AB19XYZ/2026-04-15_fuel_charging_42_shell-receipt.pdf) |
notes | Free-text notes you typed against the row |
CSV is line-ending-correct for Windows + Mac (CRLF), so opening it in Excel won't merge rows.
Date filters
The two date inputs scope the download to a fiscal year, quarter, or any window:
- From: ignore receipts dated before this. Inclusive.
- To: ignore receipts dated after this. Inclusive.
Leave both blank to get everything you've ever uploaded.
The filter applies to the expense or service date (when the cost was actually incurred), not when you uploaded the receipt. That's what an accountant cares about and matches what HMRC reads off your books.
A few useful presets:
- UK tax year (6 April ā 5 April): from
2025-04-06to2026-04-05. - Calendar year:
2026-01-01to2026-12-31. - Q1 2026:
2026-01-01to2026-03-31.
Empty period
If no receipts match (e.g. you set a date range outside your data), you'll see "No receipts found for the selected period." inline. The button stays clickable so you can adjust dates and try again.
Limits and gotchas
- Per-user, not per-org. The zip contains every receipt you uploaded. Teammates' receipts in the same org don't bundle in. This is deliberate so accounting handovers don't accidentally include someone else's expenses.
- No password protection. The zip is plain. Don't email it. Use a shared drive (OneDrive, Google Drive, Dropbox) or your accountant's portal.
- Compression is off. PDFs and JPEGs are already compressed; re-compressing them just burns CPU. The zip is barely bigger than the sum of its files, but won't shrink on disk.
- Soft cap of ~600 receipts per download today. The Worker that builds the zip has a 128MB memory budget; at a typical 200KB per receipt that's the headroom. Bigger libraries hit a 500 error, which we'll switch to a streaming writer to fix. If you hit it, narrow the date range and run two halves.
- No org-wide export yet. A future "give me every receipt across the whole organisation" endpoint is on the roadmap for accountants serving multi-driver fleets. Today, each member runs their own export and the accountant concatenates manifests.
What if a receipt is missing
Two possible causes:
- You uploaded it but the underlying file is gone. Rare, but if R2 lost the object (e.g. a deletion went through that shouldn't have), the manifest row appears but the file doesn't. Email hello@garagehq.uk with the
doc_idfrom the manifest. - You're scoped to a date the receipt isn't in. Re-check the From/To dates. The filter looks at the expense or service date, not when the file was uploaded.
What next?
- Tracking vehicle costs for the upload side: how to log a parts-and-bills entry with a receipt attached.
- Service history and mileage for service entries that can also carry receipts.
- Receipts and invoices for your Stripe billing receipts (subscription, one-off history checks).