Connecting a CSV export
Last updated: September 22, 2026
Stackpack can build your vendor list and spend history from a CSV export of vendor transactions when your accounting system is not one we connect to directly, or when you prefer not to connect it. You upload one file, Stackpack reads it, and you upload a new file whenever you want to refresh the data.
For what Stackpack keeps from your accounting system, and what it does not, see What Stackpack stores from your accounting system.
How it works
There is no login or authorization. A CSV profile in Stackpack holds one file at a time, and you can create more than one profile (for example one per entity or per source system). Uploading a file validates its columns, stores it, and starts a sync. Uploading again to the same profile replaces the previous file and recomputes spend from the new one.
Requirements
A CSV file with a header row using the column names listed below. Column headers must match exactly. Extra columns are ignored, and missing columns are treated as blank.
One row per transaction line (a bill split across three accounts is three rows).
Every row needs a Date, a Vendor Name, and an Amount. Rows without a valid date or a vendor name are skipped.
Caveats
Stackpack currently operates in USD. The Currency column is accepted but not used; amounts are summed as-is. Multi-currency support is on our roadmap.
The file is static. Stackpack checks it daily, but new transactions appear only when you upload an updated export.
Stackpack can populate Departments from the file in two ways, each enabled by a switch on your account: import the Department columns directly, or use the Class columns to populate Departments. Either or both can be turned on; ask your Stackpack contact to enable them.
Connecting
During onboarding
On the "Sync with CSV data" step, click Upload a CSV.
Choose your file. Stackpack validates the columns, stores the file, and starts the first sync.
From Company Settings
Go to Company Settings → Integrations → CSV and click Connect (or Add CSV if a profile already exists).
Name the CSV source and click Create. This is how the profile appears in Stackpack.
Click Upload your first CSV and choose your file.
On the profile you can Download CSV Template for a sample file, hover the help icon to see the expected columns, download the file currently on record, Upload an updated CSV to replace it, and Remove your CSV data to delete the profile and its file.
Sync schedule and window
A sync runs immediately after every upload and recomputes spend from the new file.
After that, Stackpack re-reads the stored file once a day.
Stackpack retains spend for the current calendar year plus the two prior calendar years. (During January through March, one additional prior year is retained so year-over-year comparisons remain available.) Rows dated outside that window are ignored.
File format
Download the template from the CSV profile in Company Settings, or build the file with these columns. Order does not matter.
Column | Required | How it is used |
|---|---|---|
ID | Recommended | Your identifier for the transaction line. Use a stable, unique value per row. |
Date | Yes | Transaction date. Rows with a missing or unreadable date are skipped. |
Type | No | Accepted for your reference; every row is recorded as an Expense. |
Vendor ID | Recommended | Your identifier for the vendor. When blank, Vendor Name is used as the ID. |
Vendor Name | Yes | Vendor display name. Rows without one are skipped. Keep names consistent so a vendor's spend is not split. |
Class ID, Class Name | No | Class. When Class ID is blank, Class Name is used as the ID. |
Department ID, Department Name | No | Department. When Department ID is blank, Department Name is used as the ID. |
Account ID, Account Name | Recommended | GL account. When Account ID is blank, Account Name is used as the ID. Used for account reporting and the excluded GL account list. |
Account Category | No | Accepted but not currently used. |
Location ID, Location Name | No | Location. |
Amount | Yes | Line amount. Positive is spend; negative is a credit or refund and reduces spend. An empty cell is treated as 0. |
Currency | No | Accepted but not currently used (see the USD caveat). |
Memo | No | Accepted but not currently used. |
Is Accrual | No |
|
Accepted date formats. ISO 2024-10-10; 2024/10/10; US 10/10/2024, 10-10-2024, and 10/10/24; Oct 10, 2024; 10-Oct-2024; 10 Oct 2024; and full timestamps such as 2024-10-10 13:45:00 or ISO 8601. Ambiguous numeric dates are read as month/day/year; day/month/year is used only when the month/day reading is impossible (for example 13/02/2024).
Accepted amount formats. Plain numbers, currency symbols before or after the number, thousands separators, parentheses for negatives such as (24.50), and both 1,234.56 and 1.234,56 conventions. A value that cannot be read as a number rejects the whole file at upload.
What Stackpack reads from the file
Every row that passes validation becomes one Stackpack entry. A row is skipped when any of the following is true:
Its Date is missing or unreadable.
Its Vendor Name is blank.
Its Date falls outside the retention window.
Its account is on the profile's excluded GL account list, if your Stackpack administrator has configured one. The list is matched against Account ID (or Account Name when the ID is blank) and Account Name.
There are no other exclusions. Unlike the direct accounting integrations, Stackpack does not filter by account classification, payment status, or transaction type. The file is taken as the statement of vendor spend, so include only the rows you want counted.
Fields captured per row
Field | CSV source |
|---|---|
Transaction ID | ID |
Date | Date |
Amount | Amount, with the sign as written |
Currency | Not populated |
Type | Always Expense |
Accrual | Is Accrual |
Memo | Not populated |
Account category | Not populated |
Account ID and name | Account ID (or Account Name when blank) and Account Name |
Class ID and name | Class ID (or Class Name when blank) and Class Name |
Department ID and name | Department ID (or Department Name when blank) and Department Name |
Location ID and name | Location ID and Location Name |
Vendor ID and name | Vendor ID (or Vendor Name when blank) and Vendor Name |
How rows become vendor spend
Stackpack groups rows by vendor, matching on Vendor ID, or on Vendor Name when Vendor ID is blank. Within each vendor, rows are grouped by the calendar month of their Date. Each vendor then carries a monthly spend time series, one bucket per month, with:
Monthly spend field | Derived from |
|---|---|
Year and month | The Date's calendar month |
Amount | Sum of Amount across rows where Is Accrual is blank or |
Transaction count | Number of those rows in the month |
Accrual amount | Sum of Amount across rows where Is Accrual is |
Alongside the time series, each vendor records the accounts and locations its rows posted to (each with a row count), the earliest month with spend in the retained window, and the most recent month with spend. When the Department or Class switch is enabled, the vendor also records the Departments or Classes it posted to, and Stackpack keeps a per-department monthly spend series keyed on the Department Name, falling back to the Class Name when Department Name is blank.
Spend views in Stackpack use Amount by default. If accrual-based spend is enabled for your company, vendors that have accrual rows show Amount + Accrual amount, and vendors without any accrual rows continue to show Amount.
Because each upload replaces the file, spend is recomputed from the new file on every upload. Monthly buckets older than the retention window are dropped.
Frequently asked questions
Q: What does the CSV integration involve, and what information does Stackpack pull from it?
You export vendor transactions from your accounting system as a CSV with the columns above and upload it to Stackpack. Stackpack reads one entry per row: date, vendor, amount, and optionally the account, class, department, and location it posted to, plus an accrual flag. There is no connection to your accounting system; Stackpack only ever sees the file you upload.
Q: Which specific data points or fields are required for the integration?
Date, Vendor Name, and Amount. Rows missing a readable Date or a Vendor Name are skipped. ID, Vendor ID, and Account ID/Name are strongly recommended so vendors and accounts stay stable across uploads. Everything else is optional.
Q: Are there any data or configuration prerequisites we should validate before starting the trial?
The export covers the current year and the two prior years, and includes only rows you want counted as vendor spend (Stackpack does not filter out unpaid bills, asset purchases, or transfers).
Column headers match the template exactly.
Vendor names are consistent across rows, or Vendor IDs are supplied.
Credits and refunds are negative amounts.
Dates are in one consistent format, ideally ISO
YYYY-MM-DD.Amounts are in USD.
If you want Departments in Stackpack, the Department (or Class) columns are populated and you have asked Stackpack to enable the matching switch.
Q: How do I add new transactions?
Export a fresh file that covers the full period you want in Stackpack and upload it with Upload an updated CSV. The new file replaces the old one, so include historical rows as well as new ones.
Q: Can I upload more than one file?
Each CSV profile holds one file at a time. Combine the exports into a single file before uploading. If the same vendor appears in more than one profile, use the same Vendor ID in each so its spend is combined.
Q: How do I record a refund or vendor credit?
Enter the row with a negative Amount, or wrap it in parentheses. It reduces that vendor's spend in the month of its Date.
Q: How do I include accruals or journal entries?
Set Is Accrual to true on those rows. They are kept separate from billed spend and shown only when accrual-based spend is enabled for your company.
Q: Why was my upload rejected?
The most common causes are a header row that does not match the expected column names, and an Amount cell that cannot be read as a number (for example text in the Amount column). The error message lists the expected headers. Unreadable dates do not reject the file; those rows are skipped.
An example CSV template can be downloaded from the CSV integration panel in the UI after clicking "Connect".
Q: Why is a vendor's spend different from the accounting system I exported from?
Check for rows skipped for a missing date or vendor name, rows dated outside the retention window, vendor names that vary between rows, and accounts on your excluded GL account list. Also confirm the export itself only contains vendor spend, since Stackpack applies no accounting-based filtering to CSV data.