Download the Master CSV
Start your migration with our pre-formatted template. It contains all 61 exact column headers required by the HistoriQ engine to prevent mapping errors.
HistoriQ_Master_Template.csv
61 Columns • UTF-8 Format • Ready to Use
Complete technical reference for Shopify sales history migration, security protocols, and data management.
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.
These rules are based on Shopify Admin API requirements for orderCreate. Following them helps prevent API errors, incorrect reporting, and unwanted customer notifications.
Shopify may trigger fulfillment or shipping emails if automation is enabled. Ensure notifications are disabled for historical imports to avoid sending outdated emails to customers.
For past or in-person sales, ensure the order is marked as fulfilled. Incorrect fulfillment status may result in invalid shipping workflows or pending fulfillment queues.
Always use accurate historical timestamps (processedAt) and correct transaction values to ensure Shopify analytics, taxes, and financial reports remain consistent.
Important: Some behaviors (notifications, fulfillment rules, and reporting) may vary depending on Shopify plan, apps installed, or API configuration.
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.
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.
Start your migration with our pre-formatted template. It contains all 61 exact column headers required by the HistoriQ engine to prevent mapping errors.
61 Columns • UTF-8 Format • Ready to Use
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.
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 |
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 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.
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.
Before importing, configure Shopify order behavior. These settings map directly to theOrderInput in the Admin GraphQL API.
Shopify does not support partial imports in orderCreate. Testing must be handled at the application level before mutation execution.
3 records) in your own logic layer.OrderInput payloads.Open Shopify Admin → Orders and verify the imported test records.
createdAt / processedAt align with expected import logic. Note: historical backdating may be limited depending on API usage.displayFinancialStatus and displayFulfillmentStatus match expected values (e.g. PAID, FULFILLED).Map your exact custom columns to the required CSV formats. Use the search bar below to instantly find your column.
Sales-10045YYYY-MM-DD HH:MM:SS), in either the store's timezone or UTC depending on your import tool. Accurate values here ensure that historical sales appear in the correct reporting periods and that trends over time reflect real historical activity rather than the import date.2023-11-04 14:30:00paid, pending, refunded, or partially_refunded). For historical sales imports where payment was already taken, this will almost always be paid. If you import orders that were partially refunded in your legacy system, you can use partially_refunded, but ensure that the order totals, line item amounts, and transaction records accurately reflect those refunds. This field affects financial reports and whether the order appears as outstanding or settled.paidfulfilled, partial, and unfulfilled. For most backfilled historical in-store sales where customers already left with the items, you should use fulfilled so the orders do not appear in current picking or shipping queues. This field directly influences fulfillment views and whether staff believe there is remaining work on the order.fulfilledCustomer requested email receipt.Legacy_Sales or Historical). You can also include descriptive tags like Walk-in, Retail, or location tags to simplify segmentation later.Legacy_Sales, Walk-injohn.doe@example.com68778783ad298Jane Smith123 Main StTorontoshipping_province_code, that code typically takes precedence. Providing accurate provincial/state data helps with tax history, geographic reporting, and consistent region names.ONM5V 2K7shipping_country_code. Accurate country information ensures correct regional reporting and minimizes ambiguity when reviewing legacy international orders.CAJane Smith456 Oak LaneAustinTX78701+15550123456USStandard Shipping10.00std_shipold_posApt 4B+15550123456ACME CorpNYUSPremium Cotton T-Shirt225.00TSHIRT-WHT-MED012345678910Walk-in 10% Offpercentage (for a percent-off discount) or fixed_amount (a specific currency amount off). If percentage, the discount_amount is typically a whole number percent (for example, "10" for 10%). If fixed_amount, the amount is usually a currency value (for example, "5.00" for 5 units off in store currency). Correctly setting this ensures historical discounts reproduce the original pricing.percentagediscount_type. For a percentage discount, this is usually the numeric percentage (for example, 10 for 10%). For a fixed amount discount, this is a currency amount (for example, 5.00 for a five-dollar reduction). The values should line up with your legacy calculations so that combined with prices, taxes, and quantities, the imported order totals match what customers were originally charged.101.25State Sales Tax0.055.50County Tax0.022.20sale, indicating a completed payment. In more complex setups you might see kinds like authorization, capture, or refund, but in a simple historical import you usually record only the final settled event. This is important for understanding the payment flow and distinguishing charges from adjustments.sale54.20customer (customer changed mind), inventory (out of stock), fraud, declined (payment failed), or other. Capturing this helps analyze why orders historically failed or were reversed and can guide future process improvements.customerFALSECustomer brought it back, wrong size.Leave blank to disable notificationUSPS1Z9999W99999999999https://tools.usps.com/...Main Warehousedelivered, in_transit, out_for_delivery, or failure. Mapping these correctly allows Shopify's order timeline to reflect what actually happened to each package historically and supports analysis of fulfillment performance over time.deliveredprocessed_at, this timestamp is used to backdate the fulfillment timeline in Shopify. Accurate values here give you a precise historical log of how long it took to ship or hand over orders after purchase.2023-11-06 14:30:00Encountered an issue during your test import? Check these common solutions.
Encountered an issue during your test import? Check these additional resources.
Once your import shows as Completed, use this checklist to confirm everything looks correct in Shopify.
Open Shopify Analytics → Reports and check key metrics like sales and orders. Imported data may take some time to fully reflect in historical reports depending on how the orders were created.
Search for a customer included in the import and confirm that their historical orders appear in their timeline.
Save your original import file in a secure location for backup, auditing, or compliance purposes.
Need help? Contact support and we’ll assist you as soon as possible.