Help centre | Article

Import invoices in bulk from a CSV

For catching up a backlog, or moving a year of history in from a spreadsheet, without typing each invoice.

Free invoice template

When to use it

Bulk import exists for the two moments when entering invoices one at a time is the wrong shape of work: moving in from a spreadsheet you have kept for months or years, and catching up after a stretch where the admin slipped. For ordinary week-to-week invoicing, raising each invoice from its session is better, because the session already knows the rate, the hours and the organisation.

The columns

The header must contain these five columns, in this order:

  • organisation: the name of the organisation being billed. Required.
  • invoice_date: the date on the invoice. Required.
  • due_date: when payment is due. Optional; leave the cell empty to use your default terms.
  • description: what the invoice is for. Required.
  • amount_gbp: the total in pounds. Required.

Download the template from the import page rather than typing the header yourself, which removes the commonest cause of a rejected file.

How to write dates and amounts

Important

Write dates as YYYY-MM-DD, so 3 September 2026 is 2026-09-03, or as DD/MM/YYYY (03/09/2026; 03-09-2026 and 03.09.2026 are read the same way). A date with slashes is always read day first, the UK way: a file exported with US-style dates (month first) would be misread without an error whenever the day is 12 or under, so check the preview, or use YYYY-MM-DD, which cannot be misread.

Amounts are plain numbers in pounds: 450.00, not £450.00 and not 450,00. Do not use a thousands separator.

Checking before you commit

Paste or upload the file and Sessional shows you the parsed rows before anything is created, highlighting the exact cell in any row it cannot read. Nothing is imported until you press the import button.

Important

The button reads Import N valid invoices, and it means that: the rows that can be read are created and the rows that cannot are left out. If you import with some rows still marked, fix only those rows and import them on their own. Importing the whole corrected file again creates the valid rows a second time.

The surest route is to correct the file until the preview shows no marked rows, then import once.

Up to 200 invoices can go in one import. For more than that, split the file; each import is checked and created as one batch.

What it creates

Each row becomes a Draft invoice against the named organisation. If an organisation on the file does not exist yet, it is created for you, so you do not have to add them first. Nothing is sent: imported invoices are yours to review, and you issue or send each one when you choose. A draft whose due date has already passed asks, when you issue it, whether Sessional should chase it or you will handle it yourself. See invoicing.

Limits: invoice dates cannot be in the future or before 1 January 2000, a due date can be at most two years after its invoice date, and one invoice can be at most £99,999.99.

Tier access

Basic covers up to 2 invoices a calendar month, and imported invoices count towards that like any other. If a file would take you past the cap, the rows up to the limit are created and the rest come back marked with the reason, so you keep what fitted rather than losing the import. A large backfill needs Plus. See pricing.

Frequently asked questions

Can I import the sessions behind these invoices too?
Yes, and separately. Bulk session import is its own CSV with its own columns, covered in sessions. Imported sessions are treated as work already done.
What happens if two rows name the same new organisation?
It is created once and both invoices attach to it. You will not end up with duplicates from a single file.
Will importing an old invoice send anything to the organisation?
No. Import only creates the invoices in your account. Sending is always a separate, deliberate action.
One row is wrong. Do I lose the whole file?
No, and take care here. The preview shows you the problem cell before anything is created, so the best outcome is that you fix that row and import once. If you press Import while a row is still marked, the readable rows are created and the marked row is skipped. Afterwards import only the corrected row: sending the whole file again would create duplicates of the invoices that already went in, and on Basic each duplicate uses one of your monthly invoices.