Updating Services in Bulk via CSV

When you need to assign services to dozens of clients — or update prices and frequencies across your book — doing it one client at a time is slow. Sodium's CSV import lets you export your current service assignments as a spreadsheet, make changes, and import them back in one go.

The short version

You can export a CSV file showing the current details of your services for every client — prices, frequencies, billing settings, stages, and dates. Make your changes in Excel (or Google Sheets), then re-upload the file to add or change services for multiple clients at once.

When to use CSV import

The CSV import is designed for bulk operations. Common scenarios:

  • Onboarding a new practice — assign services to all your clients at once instead of editing each client individually.
  • Annual price reviews — export your current prices, update them in a spreadsheet, and import the new rates.
  • Changing billing frequencies — switch a batch of clients from monthly to quarterly (or vice versa) in one pass.

For one or two clients, editing services directly on the client page is quicker. The CSV route pays off when you're touching ten or more.

Download your template

Start by exporting your current service assignments as a CSV. This gives you a file pre-populated with your clients and their existing services — ready to edit.

Go to Clients in the top menu, then click Import. At the bottom of the page you'll see the Import Client Services section — click the CSV icon to open the service import page. From there, click Download Template. The export gives you a row for every service currently assigned to each client, with the existing price, frequency, billing settings, and stage already filled in.

To assign a service a client doesn't have yet, add a new row for that client and service — there's no need to start from a blank file.

Understand the CSV format

The CSV has one row per client service. A client with three services takes up three rows — same client name and code on each, one service per line. Here's what each column means:

ColumnExamplePurpose
Client NameAcme LtdClient display name
Client CodeACME01Unique client code (used for matching)
Service CodeBOOKIdentifies the service on this row (see below)
Service NameBookkeepingThe service being assigned or updated
Price150.00Price for this service on this client
FrequencyMonthlyBilling frequency
Start Date01/04/2026When the service starts for this client
End Date(blank)Optional end date
Auto InvoiceYesWhether this service is auto-invoiced via client billing
Next Billing Date01/05/2026Date the next auto-invoice is due
Service StageIn ProgressOptional — the stage that powers your Kanban boards, if you use them

For an existing service, leave the Service Code as it came out of the export so your changes land on the right one. To add a new service, put the service's own code (from your Services list) and Sodium creates the assignment.

The Auto Invoice and Next Billing Date columns control client billing. Set Auto Invoice to Yes to have the service invoiced automatically, and set the Next Billing Date to control when the first auto-invoice goes out.

Fill in the data

Open the exported CSV in Excel or Google Sheets and make your changes. You can:

  • Assign a new service — add a new row with the client's name and code, the service name, a price, a frequency, and a start date. Put the service's own code (from your Services list) in the Service Code column — Sodium creates the assignment for you.
  • Change a price — update the Price value on the service's row.
  • Change a frequency — update the Frequency column. Accepted values: Monthly, Quarterly, Annually, or One Off.
  • Set the service stage (optional) — if you use Kanban boards, update the Service Stage column to move a service to a different stage. It must match one of your stage names exactly. Leave it blank if you don't use stages.
  • Turn auto-invoicing on or off — set the Auto Invoice column to Yes or No, and use the Next Billing Date column to set when the first auto-invoice is due.
  • Set start/end dates — use DD/MM/YYYY format.

When updating an existing service, keep its Service Code as it came out of the export so the change lands on the right service. You can delete rows for clients you don't need to touch to keep the file manageable.

If a row has a price that matches the service's default price in Sodium, the import treats it as using the default rather than a custom override.

Upload and preview

Back on the same page you downloaded the template from, upload your edited CSV. You can drag and drop the file or click to browse.

Before anything is saved, Sodium shows you a full preview of what will change:

  • Creates — new service assignments that don't exist yet.
  • Updates — existing assignments where the price, frequency, or dates have changed. For price changes, you'll see the current price struck through next to the new one.
  • Unchanged — rows where nothing is different. These are skipped.

You also choose how Sodium matches clients in the CSV to clients in the system — by Client Name or Client Code. Matching by code is more reliable if you have clients with similar names.

If any clients in the CSV can't be matched, they're listed separately so you can check for typos.

Confirm the import

Once you're happy with the preview, click Confirm Import. The import runs in the background — you'll see a progress bar showing how many clients have been processed.

You can navigate away while it runs, but it won't take long at all. Come back to the import page to check progress or see the results.

When the import finishes:

  • New service assignments are created on the matching clients.
  • Updated assignments have their prices, frequencies, and dates changed.
  • If you have recurring tasks linked to services, Sodium optionally generates any outstanding tasks for newly assigned services.
  • Any rows that failed (e.g. invalid data) are collected into an error CSV you can download, fix, and re-import.

Troubleshooting

  • Service not recognised — the value in the Service Name column doesn't match a service in Sodium. Check for typos or extra spaces, and re-download the template to see the exact service names.
  • New service created instead of updating — if the Service Code doesn't match the client's existing service, Sodium treats the row as a brand-new service. To update, keep the Service Code exactly as it came out of the export; only use the service's own code when you genuinely mean to add a new one.
  • Client not matched — the client name or code in the CSV doesn't match a client in Sodium. Try switching the match-by option (Name vs Code), or check for differences in spelling or punctuation.
  • Invalid frequency — use one of: Monthly, Quarterly, Annually, Annual, or One Off. The values are case-insensitive.
  • Invalid service stage — the value in the Service Stage column must match one of your existing stage names. Check for typos, and re-download the template to see the current stage names if you're unsure.
  • Failed rows after import — download the error CSV from the results screen. It contains just the rows that failed with error details. Fix them and re-import only that file.
  • Prices showing as overrides — if you enter a price that differs from the service's default price, Sodium treats it as a custom override for that client. If you intended to use the default, enter the exact default price or leave the column blank.

Need help with a large import? Get in touch and we'll help you get everything set up.