Skip to content

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.

FieldNotes
Opportunity IDA stable per-deal id, so re-uploads update the same deal
Deal nameUsed as the key when there is no ID column
AmountCurrency symbols and commas are fine — $1,234.50 parses
Close dateISO (2026-09-30) or M/D/YYYY
Stage
Owner / rep
Forecast category
Created dateOptional — 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.