Finance
Importing Expenses

Importing Expenses

The Expenses list has an Import action that lets you create many expense records at once from a CSV file, instead of adding them one at a time. It is the fastest way to bring in historical spending when you move to PMSuite, or to load a batch of transactions you already keep in a spreadsheet.

Who can use it

Anyone whose role grants create permission on the Finance module can import expenses — Company Admin by default. Permission levels are set per role in Settings → Roles & Permissions, where each module action (view, create, edit, delete) can be set to None, Added, Owns, or All.

If someone cannot see the Import action, check their role first, then have them log out and back in — permission changes do not always apply to a session that is already active.

Prerequisites

Imported rows reference records that must already exist in PMSuite. Create these before you import:

  • Expense categories — see Expense Categories.
  • Employees — if rows are attributed to an employee, see Adding Employees.
  • Projects — if rows are linked to a project.
  • Bank accounts — if rows are tied to an account, see Bank Accounts.
  • Currencies — any currency used in the file must exist in Settings → Currency Settings. Exchange rates are calculated relative to your default currency.

Your data must be saved as CSV. Excel, Google Sheets and Numbers can all export to CSV.

How to Access

Go to Finance → Expenses (/account/expenses) and use the Import action on the list page.

Preparing your file

An expense record in PMSuite holds these fields:

FieldNotes
Item NameThe expense description shown in the list.
PriceThe amount.
CurrencyMust be a currency configured in Currency Settings.
Exchange RateUsed to convert to your default currency.
Purchase DateUse one unambiguous format for the whole column — YYYY-MM-DD (for example 2026-03-07) is the safest. Your company's Date Format is set in Settings → App Settings.
EmployeeMust match an existing employee.
ProjectMust match an existing project.
Expense CategoryMust match an existing category.
Purchased FromFree text — the vendor or merchant.
Bank AccountMust match an existing bank account.
DescriptionFree text.

The Bill upload field on the expense form is a file attachment, so it cannot be populated by CSV. Attach bills after the import by editing the individual records that need one.

Running the import

  1. Open Finance → Expenses and choose Import.
  2. Select your CSV file and upload it.
  3. When prompted, match each column in your file to the correct expense field.
  4. Confirm the import.
  5. Open the Expenses list and spot-check several imported rows against your source file.

Import a small test batch of five to ten rows first. Once you have confirmed the columns land where you expect, run the full file.

Effect on other features

  • Imported expenses behave exactly like manually recorded ones — see Recording Expenses.
  • They carry an approval status of Approved, Pending or Rejected, and can be actioned from the list.
  • They appear in the Expense Report (/account/expense-report) and in Income vs Expense (/account/income-expense-report). Exchange rates are calculated relative to your default currency, so multi-currency imports roll up into one reporting currency.
  • Rows linked to a project count against that project's spend.

Limitations

  • No duplicate detection. Importing the same file twice creates two sets of records. Workaround: import once, verify, and keep a note of which date ranges you have already loaded. If a batch does land twice, the extra records can be deleted from the Expenses list.
  • Referenced records are not created for you. A row naming a category, employee, project or bank account that does not exist cannot be matched. Workaround: create the missing records first, then re-import only the affected rows.
  • Receipts and bills cannot be imported. Workaround: upload the bill on each expense record afterwards, or keep receipts in your existing store and reference them in the Description column.
  • No automatic bank-feed import. Importing is a manual CSV operation. Workaround: export the statement from your bank as CSV and import it. Bank Feeds is a planned addition to PMSuite; no release date has been confirmed.

Troubleshooting

A category, employee, project or bank account is not matched. The value in your file does not correspond to an existing record. Check the exact name in PMSuite, correct the CSV, and re-import the failed rows.

Dates are not being read correctly. Convert the column to ISO YYYY-MM-DD before importing. In a spreadsheet you can generate this with =TEXT(A2,"YYYY-MM-DD") and paste the result as values.

Amounts look wrong after import. Check that the Price column contains plain numbers with no currency symbols or thousands separators, and that the Currency and Exchange Rate columns are populated for any row that is not in your default currency.

Duplicate expenses appear. The file was almost certainly imported twice, or overlaps with rows you had already entered manually. Delete the extra records from the Expenses list.

The Import action is not visible. Your role lacks create permission on the Finance module. Ask an admin to adjust it in Settings → Roles & Permissions, then log out and back in.

Related Articles