Complete theory — from problem identification to final implementation · A to Z
Your finance team wants to import historical payment records, including past purchases and amounts paid by both current and former customers. The goal is to structure this data in HubSpot in a way that maintains clarity and usability.
Most finance teams store payment data in a flat Excel or CSV file where everything — customer name, email, order ID, amount, and payment status — sits in one single sheet. While this works for basic record-keeping, it creates serious limitations:
A flat CSV has no concept of "this order belongs to this customer." Every row is isolated. There is no link between a customer and their purchases.
If Rahul made 3 purchases, his email appears 3 times in the file. There is no single "Rahul" record — just repeated rows. Impossible to see his total spend at a glance.
A flat file cannot distinguish between a customer who still buys from you (Current Customer) and one who stopped (Former Customer). Finance team has no visibility into customer status.
To find a customer's total purchase amount, someone must manually filter and sum rows in Excel. Time-consuming and error-prone at scale.
HubSpot is a CRM (Customer Relationship Management) platform. Unlike a flat spreadsheet, HubSpot stores data as related objects. A Customer (Contact) and their Purchases (Deals) are stored separately but linked together automatically.
HubSpot uses two core objects for this use case:
These two objects are linked via Email — the unique identifier that tells HubSpot which deal belongs to which contact.
The data must be split into two separate CSV files before importing. This separation is what enables HubSpot to build proper relationships.
Contains only customer identity. Each customer appears only once.
| Column | Example | Purpose |
|---|---|---|
| First Name | Rahul | Customer's first name |
| Last Name | Sharma | Customer's last name |
| rahul@gmail.com | Unique ID — used for linking | |
| Customer Type | Current Customer | Active vs Inactive customer |
| Lifecycle Stage | Customer | HubSpot's built-in stage |
Contains all payment records. Each row = one purchase. A customer can have multiple rows.
| Column | Example | Purpose |
|---|---|---|
| Deal Name | ORD001 | Unique order identifier |
| Associated Contact Email | rahul@gmail.com | ⭐ Links deal to contact automatically |
| Close Date | 2023-01-10 | Date of purchase |
| Amount | 5000 | Purchase amount |
| Payment Status | Paid / Pending | Track payment completion |
| Payment Method | UPI / Card | How payment was made |
| Pipeline | Sales Pipeline | Required by HubSpot for deals |
| Deal Stage | Closed Won | Required by HubSpot for deals |
The most critical part is the column named Associated Contact Email in the deals CSV. This is a special HubSpot keyword that tells the system to automatically link each deal to the matching contact.
During import, this column must be mapped as Contact properties → Email, while all other deal columns are mapped as Deal properties.
CRM → Contacts → Actions → Import → Select "Contacts only." This creates all customer records in HubSpot before any deals are added.
CRM → Deals → Actions → Import → When asked what to import, select BOTH Contacts and Deals. Upload deals.csv as a Single File.
Set "Associated Contact Email" → Contact properties → Email. Set all other columns → Deal properties.
Open any Contact profile. On the right side, the Deals section shows all linked purchases and total revenue — automatically calculated by HubSpot.
| CSV Column | Import As | HubSpot Property |
|---|---|---|
| Deal Name | Deal properties | Deal Name |
| Associated Contact Email | Contact properties ⭐ | |
| Close Date | Deal properties | Close Date |
| Amount | Deal properties | Amount |
| Payment Status | Deal properties | Payment Status |
| Payment Method | Deal properties | Payment Method |
| Pipeline | Deal properties | Pipeline |
| Deal Stage | Deal properties | Deal Stage |
After successful import, the finance team opens any contact profile and sees complete payment history — all in one place, zero manual calculations.
1. Current vs Former customers clearly identified via Customer Type property.
2. All orders per customer linked and visible in one profile.
3. Total purchase amount calculated automatically by HubSpot.
4. Pending payments instantly visible — no manual filtering needed.
5. Finance team has full clarity and usability from a single screen.
To structure historical payment data in HubSpot with clarity and usability, split the data into two files — contacts.csv for customer identity (with Current/Former status) and deals.csv for payment records — then import both together using the "Associated Contact Email" column so HubSpot automatically links every purchase to the correct customer, enabling the finance team to see total spend, payment status, and complete order history in a single contact profile — with no manual calculations required.