Import your deals
Earnest calculates commission from your deals, which the app calls sales entries. In this guide you upload a month of closed deals from a CSV or Excel file, check that they arrived, and fix any rows Earnest refused. Allow about 15 minutes the first time.
Before you start
- Add your reps first. Every deal names a rep by email, and that person must already exist in Earnest with a start date on or before the deal. See Add your team.
- You need an admin account. Export your deals with one row per deal.
Where uploads happen
Each kind of data is uploaded on the page where it lives:
| What you're uploading | Where |
|---|---|
| Deals | Data → Sales Data → Bulk Upload |
| People | Organization → People → Bulk Upload |
| Teams | Organization → Teams → Bulk Upload |
| Bonuses and adjustments for a month | Payouts → Bulk Upload |
The Data → Imports & API page links to those pages and holds the developer API. It has no upload of its own.
Prepare your file
In the upload dialog, Download a template gives you a file with the right headers and an
example row (sales-data-template.csv, or units-template.csv in Units mode). The dialog also lists
the headers, with an example, under Expected Columns. Put these five headers in row 1 of your
sheet:
| Column | What goes in it | Example |
|---|---|---|
referenceNumber | Your unique ID for the deal, such as the CRM opportunity ID | OPP-1042 |
userEmail | The email of the rep who closed it, as it is in Earnest | dana@yourco.com |
amount | The deal value, as a plain number greater than 0 | 12500 |
currency | The three-letter currency code | USD |
bookingDate | The date the deal closed | 2026-03-04 |
If one of your plans counts units (meetings, demos) instead of revenue, the dialog shows an
Import mode: switch. In Units mode, use a quantity column in place of amount and
currency.
Your headers don't have to match exactly. Earnest ignores capitals, spaces and punctuation, and recognises common CRM names such as "Opportunity ID" and "Close Date".
Dates
The safest format is year-month-day: 2026-03-04.
Earnest reads slashed dates in US order, month first. 03/04/2026 means March 4, 2026, not
April 3. A day-first date with a day above 12, such as 15/03/2026, is refused. If your
spreadsheet uses day-first dates, convert the column to YYYY-MM-DD before you upload.
Also accepted: 2026/03/04, 3/4/26, Mar 4, 2026, 4-Mar-2026 and 4 March 2026. Refused:
15.03.2026, 20260304, Excel serial numbers, and any date before 2000 or after 2100.
In an Excel file, cells formatted as real dates are converted to YYYY-MM-DD for you, so they import
correctly whatever your computer's date setting.
CSV or Excel
Both work, up to 4 MB and 1,000 rows per file. Split a bigger file into parts. For Excel, use
.xlsx: Earnest reads the first sheet only, and row 1 must hold the headers, so delete any title rows
above them. .xls and password-protected workbooks are refused; save them as .xlsx or .csv.
Upload the file
- Go to Data → Sales Data.
- Click Bulk Upload. The Import Sales Data dialog opens.
- If you see Import mode:, choose Revenue or Units.
- Drop your file on the upload area, or click the area and choose the file.
- Check the Column Mapping. Each Earnest column has a dropdown naming the column from your file that feeds it. Change any that are wrong. While a required column is unmapped, the dialog shows "Missing required columns:" and you can't import.
- Look over the preview of the first 10 rows.
- Click Import N Entries, where N is your row count.
- Read the result, then click Done.
What happens to duplicates
The reference number is how Earnest tells deals apart.
- A reference that's already in Earnest updates that deal instead of adding a second one. The result says the row was "already in your account and updated". You can safely re-upload a corrected file.
- The same reference twice in one file: the first row imports and each repeat is refused with "Duplicate referenceNumber …".
- A reference starting with
=,+,-or@is refused, because spreadsheets treat those as formulas. Write credit memos asCM-1001, not-1001.
If you change a deal's reference in your file, Earnest sees a new deal and keeps the old one too.
Add one sale by hand
- Go to Data → Sales Data and click Add Entry.
- In Add Sales Entry, choose the Sales Rep and type a Reference.
- Enter the Amount and choose the Currency. For a rep on a unit plan, enter the Quantity instead.
- If the rep's pay is split across several plans, a Plan field appears. Choose the plan this deal counts toward.
- Set the Booking Date and click Add Entry.
Add Entry offers ten common currencies and refuses a reference that already exists. Deals have no edit button: to change one, upload it again with the same reference, or tick it, click Delete (N), and add it again.
Check it worked
- The result reads "N succeeded". If any rows failed, it adds "N failed" and lists each one as "Row N:" followed by the reason.
- On Data → Sales Data, pick the month. Each deal shows a payout badge: Pending (not in a payout yet; it's included when that month's drafts are generated), Draft or Published.
Common problems
Only the refused rows are skipped; the good rows import. Fix the refused rows and upload them again.
| Message | What to do |
|---|---|
| "User not found: …" | The email doesn't match anyone in Earnest. Correct it, or add the person first. |
| "Booking date cannot be before the rep's start date (Mar 1, 2026)." | Check the deal date. If it's right, the rep's start date is wrong; see People and teams reference. |
| "The rep holds no position on …" or "Booking date cannot be after the rep's last position ended …" | Earnest pays a deal only on a day the rep holds a position. Credit the deal to the rep who owns it now, or extend the rep's position. |
| "Amount must be a positive number, got 0" | Uploaded amounts must be above 0. Remove zero-value rows. |
Amount must be a number, got "1,200" | Remove thousands separators and currency symbols from the amount column. |
Invalid booking date: "15/03/2026" — use YYYY-MM-DD | Convert the date column to YYYY-MM-DD. |
| "Published payout exists for Mar 2026 — cannot ingest activity into finalized period." or "This order is frozen into a published payout period …" | That month's payouts are published, and published months can't be changed. Post a correction in an open month instead; see Corrections and clawbacks. |
If you had already drafted payouts for that month, they're now out of date. Regenerate them before you publish; see Run your first payout.
Go deeper
- Imports and API reference: every column, rule and message, credit splits, and the API.
- Multi-currency: how deals in other currencies are converted.
- Run your first payout: turn your deals into payouts.
- Corrections and clawbacks: fixing a month that's already published.