SOP: Historical Sales Data Migration to Shopify
Follow this structured guide to securely migrate historical sales data into Shopify while preserving financial accuracy, customer records, and transaction integrity — without triggering unintended notifications.
This documentation outlines the process for migrating historical sales transactions into Shopify for reporting continuity and operational transparency. It is designed for system administrators and data teams handling large-scale data imports.
Golden Rules for Sales History Imports
1 Disable Automated Order Notifications
You do not want past customers receiving "Your order has shipped" emails for things they bought months ago. Follow Phase 3 below perfectly.
2 Mark as Fulfilled
In-person sales mean the customer already took the item. Make sure fulfillment status is set to `fulfilled` to prevent clogging your active shipping queue.
3 Preserve Financial & Reporting Accuracy
Use exact past dates (Processed At) and accurate transaction amounts so your historical Shopify sales reports perfectly match your accounting.
How to Prepare Your CSV Data File
Before importing, you must format your legacy POS data to match Shopify's strict requirements. Follow these detailed steps to build a perfectly compliant CSV file.
1Download the Template
The easiest way to start is by downloading our pre-formatted CSV template. It contains all the exact column headers you need. Open this in Excel or Google Sheets.
2Grouping Multiple Line Items (The Name Column)
This is the most common point of failure. In your CSV, each row represents a single line item (a single product), not the entire order.
To tell the system that multiple products belong to the exact same order, you must give them the exact same order number in the Name column.
Example
If Order #1001 had a T-Shirt and a Hat, your CSV will have two rows. Both rows must say #1001 in the Name column.
| Name | Line: Title | Line: Price |
|---|---|---|
| #1001 | Cotton T-Shirt | 25.00 |
| #1001 | Baseball Hat | 15.00 |
| #1002 | Running Shoes | 120.00 |
3Timestamps & Transaction Math
Historical orders are only useful if they appear on the correct dates in your Shopify Analytics. Ensure the Processed At column is filled out using the strict format: YYYY-MM-DD HH:MM:SS.
Shopify's Strict Math Requirement
Shopify will reject your order if the math does not perfectly equal the Transaction: Amount. For every order (grouped by Name), the system calculates:
Note: You only need to put the Transaction: Amount on the first row of an order. You can leave it blank for the subsequent rows of that same order.
4Exporting as CSV
Once your data is mapped, you must save the file in a format the system can read. If you are using Excel, go to File > Save As and select CSV UTF-8 (Comma delimited) (*.csv).
Why UTF-8? Standard CSVs can break special characters (like accents in customer names: René). UTF-8 preserves all global characters safely.
Import Historical Sales Data
- Log in to your Shopify Admin.
- Click on Apps and open Helios HistoriQ.
- Locate the Import section at the top of the dashboard.
- Click Add File and select your updated CSV file. Under the file name, it should recognize the data as Orders. (If it says "Unrecognized", check your header spelling!)
Import Configuration & Automation Controls
Before you click "Import", you must configure the settings so Shopify doesn't treat these like new web orders.
Test the Import Configuration
Never import thousands of rows without testing your options first.
- Scroll to the bottom of the Options.
- Find "Import only first X items".
- Type
3into the box. - Click Import.
- Wait for the green "Completed" bar.
Validate Imported Records
Open Shopify > Orders and check the 3 newly imported test records:
- Date & Time: Does it exactly match the old Historical Sales date, or does it incorrectly say "Today"?
- Status: Are the orders marked as Paid & Fulfilled?
- Financial Math: Does the Subtotal + Tax - Discount precisely equal the Total?
Execute Full Migration
If the 3 test orders look perfect, you are ready for the main event.
- Upload the exact same file again.
- Clear the "Import only first X items" box so it is completely empty.
- Double-check that email Options are still turned OFF.
- Click Import and let it run!
Depending on rows, this takes 10 mins to a few hours. You can close your browser; the server handles the rest. Download the "Import Results" file at the end to check for any errors (explained in the far right column of that result file).
Complete Data Dictionary
Map your exact custom columns to the required CSV formats. Use the search bar below to instantly find your column.
1. Order Identity & Timestamps
The primary identifier for the order in Shopify. For Historical Sales, use your old receipt/transaction numbers so they don't overlap web orders.
Sales-10045CRITICAL: Exact date/time the sale occurred. Uses this to accurately backdate the sale in Shopify analytics. (YYYY-MM-DD HH:MM:SS)
2023-11-04 14:30:00Dictates the payment state. Since these are Historical Sales, almost all records should be marked as paid.
paidTells Shopify if items have been given to customer. Use fulfilled to prevent order showing in shipping queue.
fulfilledA text field for internal staff memos. Import cashier notes here.
Customer requested email receipt.Searchable keywords. Comma-separated. Highly recommended to add a Historical Sales tag to easily filter old orders later.
Legacy_Sales, Walk-in2. Customer Profile
Contact email of the buyer. Shopify links past orders to customer profiles automatically with this.
john.doe@example.comIf you already migrated customers and know the Shopify ID, use it. Otherwise, leave blank and rely on email.
68778783ad2983. Locations (Billing/Shipping)
Full name. Shopify splits First/Last automatically.
Jane SmithPrimary street address.
123 Main StDestination city.
TorontoState/Province code (2 letters).
ONPostal code.
M5V 2K7Country ISO Code (2 letters).
CABilling full name.
Jane SmithBilling street address.
456 Oak LaneBilling city.
AustinBilling State/Province code.
TXBilling Postal code.
78701Billing Country ISO Code.
US4. Cart / Products
Exact name of product purchased. This appears on historical receipts.
Premium Cotton T-ShirtNumber of units bought for this specific line item.
2Base price for ONE single unit (before taxes/discounts).
25.00Stock Keeping Unit. Relied upon heavily to connect legacy sales to live Shopify inventory.
TSHIRT-WHT-MEDScanned UPC/EAN at register.
0123456789105. Discounts Applied
Name of the promo or manual override cashier applied.
Walk-in 10% OffCalculation type. Use "percentage" or "fixed_amount".
percentageValue of discount. If type is percentage, enter 10. If fixed, enter dollar amount.
106. Taxes
Exact amount of tax applied to THIS single row item.
1.25Name of primary tax applied.
State Sales TaxPercentage rate formatted as decimal (5% = 0.05).
0.05Total currency amount charged for this tax on entire order.
5.50Secondary tax name (if applicable).
County TaxSecondary tax decimal rate.
0.02Secondary tax total currency amount.
2.207. Payment Transaction
Money movement. Use "sale" for Historical Sales migrations.
saleActual amount handed to cashier. Must perfectly match order total (Items+Tax-Discount).
54.208. Returns & Voids
Reason order was voided. Accepts: customer, inventory, fraud, declined, other.
customerWas item put back on shelf? TRUE or FALSE.
FALSEInternal cashier reason for return.
Customer brought it back, wrong size.Important: Leave blank to prevent sending unnecessary cancellation emails to past customers.
Leave blank to disable notificationTroubleshooting & Common Errors
Encountered an issue during your test import? Check these common solutions.
Post-Migration Checklist
Once your final import shows as 100% Completed, run through these final steps.
1. Verify Analytics
Open Shopify Analytics > Reports. Filter by a past month to ensure your historical revenue has populated correctly.
2. Check Customers
Search for a customer who was included in the import. Confirm that the historical order appears on their timeline.
3. Archive Files
Store your original CSV file securely in an encrypted drive for compliance and backup purposes.