Learning Center

Migration Tutorials

Master the art of historical order formatting with our scenario-based interactive guides and templates.

Pre-requisite: These tutorials use exact column headers from the final CSV structure. If you haven't downloaded the template, please visit the Phase 1 Data Preparation guide.

Interactive Data Dictionary

The Master CSV Blueprint

Click any column to inspect

Below is the exact structural blueprint required for a successful import. Scroll horizontally to view all 61 supported headers. Select a column header to view its requirements and mapping logic.

core MappingRequired

order_number

The unique identifier for the order (e.g., TC-001). Group multiple lines by repeating this ID.

TC_Historical_Data.csv
61 Columns
Row
order_number*
processed_at*
status*
fulfillment_status*
email
shopify_customer_id
note
tags
shipping_name
shipping_address1
shipping_address2
shipping_city
shipping_province
shipping_province_code
shipping_zip
shipping_country
shipping_country_code
shipping_phone
shipping_company
billing_name
billing_address1
billing_address2
billing_city
billing_province
billing_province_code
billing_zip
billing_country
billing_country_code
billing_phone
billing_company
line_item_title*
quantity*
price*
item_sku
barcode
discount_amount
discount_type
discount_title
line_item_tax_price
tax_title
tax_rate
tax_price
tax_2_title
tax_2_rate
tax_2_price
shipping_line_title
shipping_line_price
shipping_line_code
shipping_line_source
transaction_kind
transaction_amount
cancel_reason
cancel_restock
cancel_staff_note
cancel_notify_customer
fulfillment_tracking_company
fulfillment_tracking_number
fulfillment_tracking_url
fulfillment_location
fulfillment_shipment_status
fulfillment_processed_at
1TC-001-PAIDfulfilledtc001@example.com------San Jose------------------Wireless Keyboard149.99-------0.08---------63.99----------
2TC-001-----------------------------Wireless Mouse125.00----------------------------
Template

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

Included Exact Headers

order_numberprocessed_atstatusfulfillment_statusemailshopify_customer_idnotetagsshipping_nameshipping_address1shipping_address2shipping_cityshipping_provinceshipping_province_codeshipping_zipshipping_countryshipping_country_codeshipping_phoneshipping_companybilling_namebilling_address1billing_address2billing_citybilling_provincebilling_province_codebilling_zipbilling_countrybilling_country_codebilling_phonebilling_companyline_item_titlequantitypriceitem_skubarcodediscount_amountdiscount_typediscount_titleline_item_tax_pricetax_titletax_ratetax_pricetax_2_titletax_2_ratetax_2_priceshipping_line_titleshipping_line_priceshipping_line_codeshipping_line_sourcetransaction_kindtransaction_amountcancel_reasoncancel_restockcancel_staff_notecancel_notify_customerfulfillment_tracking_companyfulfillment_tracking_numberfulfillment_tracking_urlfulfillment_locationfulfillment_shipment_statusfulfillment_processed_at
Scenario 1

How to Import Multi-Line Orders

A single customer receipt often contains multiple products. Here is exactly how to format your rows so Shopify groups them into one single Order ID.

The Solution: Duplicate the "order_number"

The order_number column groups your data. To combine multiple line items into one receipt, create a new row for each product, but keep the exact same value in the order_number column.

Correct CSV Format

order_numberprocessed_atline_item_titlepricetransaction_amount
TC-0012024-01-10 9:00Wireless Keyboard49.9963.99
TC-001Leave BlankWireless Mouse25.00Leave Blank

Notice: Global order fields like transaction_amount and processed_at are only required on the very first row of the order.


Scenario 2

Payment Statuses & Refunds

Control exactly how the order appears in Shopify's financial reports by mapping the correct status.

The status Column

Shopify accepts specific keywords. You must use strings like PAID, PARTIALLY_PAID, REFUNDED, VOIDED, PENDING, or AUTHORIZED.

order_numberstatustransaction_amount
TC-001PAID63.99
TC-006PARTIALLY_PAID50.00
TC-007REFUNDED50.00

Cancel/Refund Metadata

If importing a REFUNDED or VOIDED order, you can use the cancel columns:

  • cancel_reason: Options include `customer`, `inventory`, `fraud`, `declined`, `other`.
  • cancel_restock: MUST be FALSE. If left blank, Shopify assumes you want to take a 3-year-old product and add it back to active live inventory!

Scenario 3

Advanced Fulfillment & Tracking

Prevent historical imports from clogging up your warehouse team's shipping queue by mapping fulfillment accurately, and optionally import backdated tracking data.

1. The fulfillment_status Column

Most legacy POS migrations should default to fulfilled because the customer already walked out of the store.

fulfilled

The order is complete. It will immediately be archived and removed from your open orders queue.

partial

Some items were handed to the customer, but the rest still needs to be shipped.

unfulfilled

The historical order still needs to be packed and shipped by your warehouse.


2. Historical Tracking Data

If your old system contains tracking numbers, you can import them directly into the Shopify order timeline. Use the following columns:

  • fulfillment_tracking_company: Specifies the carrier (e.g. USPS, FedEx).
  • fulfillment_tracking_number: The tracking hash. You can separate multiple with a semicolon ;
  • fulfillment_tracking_url: Optional direct link to the carrier's tracing page.
  • fulfillment_shipment_status: A valid status string (e.g. delivered, in_transit).
  • fulfillment_processed_at: To strictly define exactly *when* the delivery event happened.

3PL Location Restrictions

You can strictly bind the fulfillment record to a specific Shopify Location using the fulfillment_location column.However, passing the name of a 3PL location (such as Amazon FBA Shipwire) will cause the importer to automatically skip the fulfillment.This is a strict fail-safe to prevent your warehouse from accidentally shipping out three-year-old legacy orders to customers!


Scenario 4

SKU & Barcode Product Mapping

How does Shopify know *which* product the customer bought? You link historical data to your live Shopify products using SKUs.

line_item_titleitem_skubarcode
Wireless KeyboardSKU-KBD-00112345678

If the SKU exists in Shopify:

The system will automatically link the historical line item to the actual live product in your store. The product image will appear on the historical order.

If the SKU does NOT exist:

(e.g., A discontinued product). The system will elegantly fallback and create a "Custom Line Item" using the text provided in the line_item_title column.


Scenario 5

Discounts & Free Orders

Shopify's financial API is strict. If you processed a discount, the math must equate perfectly.

Do not leave the price columns blank. Blank columns are interpreted as errors. You must declare the exact discount types and amounts.

Using the Discount Columns

If the item had a retail price, but you gave a discount, fill out the following columns:

pricediscount_titlediscount_typediscount_amount
299.00Agency Discountpercentage10.00
199.00VIP Loyalfixed_amount20.00
  • discount_type accepts exactly two strings: percentage or fixed_amount.
  • If percentage, amount is the % number (e.g., 10 for 10%). If fixed, amount is the dollar value.

Scenario 6

Handling Offline Taxes

Do not rely on Shopify to recalculate old taxes; force Shopify to accept your exact historical tax numbers.

To force manual tax entries, use these specific columns. If a single product has multiple taxes (e.g. HST and GST), use the `tax_2` columns.

line_item_tax_pricetax_titletax_ratetax_price
4.00Sales Tax0.084.00
  • line_item_tax_price: The sum of taxes just for this specific row item.
  • tax_rate: Must be a decimal (8% = 0.08).
  • tax_price: The total amount collected for this tax on the entire order.


Scenario 8

Shipping Lines

Did the customer pay for shipping? Pass that data cleanly into Shopify's native shipping cost fields.

Populate these columns on the first row of the order to register shipping costs.

shipping_line_titleshipping_line_priceshipping_line_codeshipping_line_source
Express Shipping25.00EXP1fedex_ground

Scenario 9

Addresses, Notes & Tags

Retain the physical context of historical orders to ensure geographic reporting works in Shopify Analytics.

Billing & Shipping Addresses

Use the `shipping_*` and `billing_*` columns. Provide standard values for `shipping_name`, `shipping_address1`, `shipping_city`, `shipping_province_code` (e.g., CA or ON), `shipping_zip`, and `shipping_country_code` (e.g., US or CA).

Tags & Notes

  • tags: Separate multiple tags with commas (e.g., `import,legacy_pos,test`). This is vital for bulk-deletion if you make a mistake.
  • note: Any internal staff notes or customer instructions recorded at checkout.

Still Need Assistance?

Need help? Contact support and we’ll assist you as soon as possible.