Import a spreadsheet
If your team does not run a supported CRM, you can upload a spreadsheet of your deals and get a real forecast. The upload becomes events on the same append-only event log a Salesforce or HubSpot backfill writes to, so point-in-time reconstruction works exactly the same way.
Find it under Onboarding → Import from a spreadsheet.
Before you start
- You need to be an org admin. The endpoint is org-admin-gated; other members do not see the card.
- Your workspace must have no CRM connected. If a live Salesforce or HubSpot connection exists, the import is refused. Mixing CSV-sourced and CRM-sourced events for the same deal would corrupt reconstruction. Re-uploading CSV on top of CSV is the intended path and is allowed.
File format
Export CSV (tab-separated is also accepted) with a header row. Excel users: Save As → CSV —
.xlsx is a binary format and is not parsed.
Your browser does the parsing, and the parser handles the usual awkward cases: double-quoted fields
containing commas, escaped quotes (""), newlines inside quoted fields, and both \n and \r\n
line endings. The delimiter is detected from the header line — tab if one is present, otherwise
comma.
Server-side limits: 200 columns and 50,000 rows per upload.
Mapping your columns
Pipemetry guesses a mapping from your header names and shows it as a table for you to correct. Anything it cannot place is set to Don’t import.
| Field | Notes |
|---|---|
| Opportunity ID | A stable per-deal id, so re-uploads update the same deal |
| Deal name | Used as the key when there is no ID column |
| Amount | Currency symbols and commas are fine — $1,234.50 parses |
| Close date | ISO (2026-09-30) or M/D/YYYY |
| Stage | |
| Owner / rep | |
| Forecast category | |
| Created date | Optional — defaults to the import day when unmapped |
Won / closed from stage
By default Pipemetry derives each deal’s won and closed flags from its stage value. Two
comma-separated lists control it, pre-filled with Closed Won and Closed Won, Closed Lost.
Matching is case-insensitive, and everything not listed is treated as open. Clear the checkbox
if you do not want the derivation at all.
Preview and import
The card previews your first 5 rows, using only the columns you mapped, so you can catch a mis-mapped column before writing anything. Then click Import spreadsheet. The result line tells you how many deals were parsed and how many new events were written.
Re-uploading is safe
Each event’s identity is derived from the deal, the field and a hash of the normalised value:
- Re-upload the same rows → the same identities are re-derived and nothing new is written
(
0 new events). The app says so explicitly: nothing changed since your last upload. - Re-upload with a changed value → a new event is appended. Your history accretes: the newer value wins from the upload instant onward, and the older value is still what you see if you look at an earlier as-of date.
This is why re-uploading an updated export weekly is a reasonable way to build point-in-time history without a CRM.
What you get afterwards
The imported deals feed the same forecast, waterfall, opportunity and accuracy screens a CRM connection feeds. One honest caveat: a spreadsheet snapshot carries no real change history, so your point-in-time views only become meaningful from your first upload onward — earlier days have nothing to reconstruct from.