Sample Files
Here are sample spreadsheets you can use to test the order import functionality:
Sample spreadsheet with basic columns: Orders_Sample.xlsx
Orders with discounts (fixed amount and percentage): Orders_Sample_Discount.csv
Set payment terms for new orders: Orders_Sample_Payment_Terms.xlsx
Mark existing orders as paid: Orders_Sample_Mark_As_Paid.csv
Cancel existing orders: Orders_Sample_Cancel.csv
Link orders to B2B company locations: Orders_Sample_B2B_Company_Linking.csv
Add tracking numbers to existing orders: Orders_Sample_Add_Tracking.csv
Customer Notifications
Order imports don't email your customers by default. Four columns control customer emails, and each one defaults to FALSE:
Send Receipt: order confirmation email
Cancel: Send Receipt: cancellation notification
Fulfillment: Send Receipt: shipping confirmation
Refund: Send Receipt: refund notification
When a column contains TRUE, Shopify emails the customer for every row that has that value. Files exported from Altera always contain FALSE in these columns. If your file contains TRUE in any of them, the file analysis shows the warning ALYS038 with the affected column and the number of rows. Review it before you start the import, especially when you migrate historical orders.
Shop app notifications
If the Shop sales channel is installed and set up on your store, customers who use the Shop app can still get an order notification in the app when you import orders, even when Send Receipt is FALSE. Altera can't turn these notifications off because Shopify sends them outside of the order import.
Before a large order migration on a store with the Shop channel, contact Shopify support and ask them to pause Shop app order notifications for your store while you import. Allow about 3 business days for the request, and test with 1 or 2 orders first.
Imports also trigger staff notifications and can trigger other apps that watch for new orders. See How to disable staff email notifications for new orders.
General
ID
Description | Example Value |
Shopify order identifier |
|
If present, the ID will be used to identify existing orders for updates.
When creating new orders, the ID is used to group multiple rows together into a single order. The value does not need to be an existing Shopify order ID. You can use any arbitrary value (e.g. 1, 2, 3) to indicate which rows belong to the same order. Each unique ID value will become a separate order.
Name
Description | Example Value |
Order name/number |
|
The order name is used as a key to identify existing orders during import. Order names should be unique. If left empty, Shopify will generate the next sequential order number automatically. When importing new orders, you can leave this blank or use any value you like. Either the ID or Name column should have a value so that multi-row orders can be grouped correctly.
When matching existing orders, the leading # is optional. A value of 1001 will match Shopify's #1001. Matching is also case-insensitive and ignores surrounding whitespace, so order numbers exported from other systems can be imported without rewriting them. Only one leading # is normalized - ##1001 is treated as a different value.
Confirmation Number
Description | Example Value |
Order confirmation code - Export only |
|
The randomly generated confirmation code that Shopify shows to the customer on the order status page and in the order confirmation email. This field is export only and cannot be set during import. To filter an export by confirmation number, use the Confirmation number export filter.
Command
Description | Example Value |
Action to perform |
|
NEW: Create a new order. If an order with the same
IDorNamealready exists, the rows fail with ORD085UPDATE: Update existing order (will skip if order doesn't exist)
MERGE: Update existing order or create if not found
REPLACE: Delete and recreate the entire order with only data from the file
DELETE: Remove the order from the store
IGNORE: Skip this order during import
A blank Command is MERGE. Matrixify treats a blank order Command as NEW, so a file that creates orders in Matrixify without a Command column updates orders with the same Name in Altera. When such an order is found by Name only, its customer is not the customer in the file, and none of the file's Line Item rows matches a line item of the order, the order fails with ORD084 instead of being updated. Set Command to UPDATE or MERGE to update it anyway, or use NEW to make every reused name fail.
Send Receipt
Description | Example Value |
Send confirmation: TRUE, FALSE |
|
TRUE: Send order confirmation email to customer
FALSE: Do not send confirmation email (default)
Shopify emails the customer for every row where this column is TRUE. The file analysis warns you with ALYS038 when the file contains any TRUE value. See Customer notifications before you import historical orders.
Inventory Behaviour
Description | Example Value |
Inventory claim behavior |
|
The behavior to use when updating inventory:
bypass: Do not claim inventory (default)
decrement_ignoring_policy: Ignore the product's inventory policy and claim all amounts no matter what
decrement_obeying_policy: Obey the product's inventory policy
Shopify uses the inventory behaviour only when it creates an order. On a row that updates an existing order (UPDATE, or MERGE for an order that exists), the value is ignored with a warning (ORD074). A line item that you add to an existing order, or a higher Line: Quantity, always takes the units from stock.
Phone
Description | Example Value |
Contact phone number |
|
Phone number must include country code and be valid for the respective country. Can be different from the customer's phone number. Shopify limits how many times a day the contact email or phone of an order can be changed. Shopify has strict validation for phone numbers - see DAT001 error code for details.
Description | Example Value |
Contact email address |
Contact email for the order. Can be different from the customer's email address. Must be a valid email format. Shopify limits how many times a day the contact email or phone of an order can be changed.
Note
Description | Example Value |
Internal order notes |
|
Internal notes about the order that are visible in Shopify Admin but not to customers.
Tags
Description | Example Value |
Order tags |
|
Comma-separated list of tags for filtering and organization purposes.
Tags Command
Description | Example Value |
Tag action |
|
MERGE: Add tags to existing tags (default)
DELETE: Remove the specified tags
REPLACE: Replace all existing tags with specified tags
Created At
Description | Example Value |
Order creation time - Export only |
|
The timestamp when the order was created. This field is export-only and cannot be imported. ISO-formatted timestamps are also supported.
Updated At
Description | Example Value |
Last modification time - Export only |
|
The timestamp when the order was last modified. This field is export-only and cannot be imported. ISO-formatted timestamps are also supported.
Processed At
Description | Example Value |
Order processing time |
|
The date and time when the order was processed. This appears in Shopify Admin and analytics reports. ISO-formatted timestamps are also supported. If no timezone is specified, your shop's timezone will be used.
Closed At
Description | Example Value |
Order closed/archived time |
|
The timestamp when the order was closed (archived). Empty if the order is not archived. ISO-formatted timestamps are also supported.
When importing a new order with a Closed At value, the order is created already archived with the date from the file preserved. This is useful for historical order migrations. Shopify does not reliably archive orders created through the API. For example, cancelled orders stay unarchived, while fully refunded orders can be archived automatically. Include a Closed At value (for example, the cancellation or refund date) to make sure imported orders show as archived. Importing an order with both Closed At and cancellation columns works as expected, and the cancellation step does not unarchive the order.
When updating an existing open order, a Closed At value archives the order. Shopify only lets an existing order be archived at the time of the request, so the archive date is set to the import time instead of the value from the file (see ORD033). To preserve an exact historical archive date, include Closed At in the import that creates the order.
Cancelled At
Description | Example Value |
Order cancellation time |
|
The timestamp when the order was cancelled. Empty if the order is not cancelled. ISO-formatted timestamps are also supported.
When importing a new order with a Cancelled At value, the order is created and then immediately cancelled. Only Cancelled At cancels a new order: a Cancel: Reason without a date doesn't (see Importing Orders as Cancelled). When updating an existing order, a Cancelled At value cancels the order too, with the reason other if Cancel: Reason is blank. An order that is already cancelled isn't changed. Shopify does not allow setting a historical cancellation date, so the order's cancellation time will be the time of the import, not the value from the file. See Cancelling Orders for details.
Cancel: Reason
Description | Example Value |
Cancellation reason |
|
The reason for cancelling the order. On an existing order (UPDATE or MERGE), a reason alone cancels the order, the same as a Cancelled At value. On a new order, the reason alone doesn't cancel it: set Cancelled At too (ORD087). See Cancelling Orders for details and a full example.
Supported values (case-insensitive):
customer: The customer requested cancellation
declined: Payment was declined
fraud: The order was fraudulent
inventory: Insufficient inventory
staff: Staff made an error
other: Other reason (default if unrecognized value is provided)
Cancel: Refund
Description | Example Value |
Refund to original payment: TRUE, FALSE |
|
Whether to refund the customer to their original payment method when cancelling an order. Only used when Cancel: Reason or Cancelled At cancels the order.
TRUE: Refund to original payment method
FALSE: Do not issue a refund (default)
Cancel: Send Receipt
Description | Example Value |
Send notification: TRUE, FALSE |
|
Whether to send a cancellation notification email to the customer. Only used when Cancel: Reason or Cancelled At cancels the order.
TRUE: Send cancellation notification
FALSE: Do not send notification (default)
A TRUE value triggers the ALYS038 warning during file analysis. See Customer notifications.
Cancel: Restock
Description | Example Value |
Restock inventory: TRUE, FALSE |
|
Whether to restock inventory when cancelling an order. Only used when Cancel: Reason or Cancelled At cancels the order.
TRUE: Restock inventory items
FALSE: Do not restock inventory (default when the cell is blank or the column isn't in the file)
Exports write FALSE on orders that aren't cancelled, so importing an exported file with a new Cancelled At date doesn't restock anything unless you change it. On orders that are already cancelled, the Cancel: option columns are blank.
Cancel: Note
Description | Example Value |
Staff note on cancelling |
|
A note for your staff about why the order was cancelled. Only used when Cancel: Reason or Cancelled At cancels the order: the note is saved with the cancellation. Customers don't see it.
On export, this column shows the staff note of cancelled orders. It's blank for other orders.
Currency
Description | Example Value |
Currency the customer paid in (ISO 4217) |
|
The order currency: the currency the customer saw and paid in at checkout. Every amount column in the file (for example Price: Total, Line: Price, Tax 1: Price, and Transaction: Amount) is in this currency.
When importing, a blank Currency is the same as the Shop Currency.
Shop Currency
Description | Example Value |
Currency the order is recorded in |
|
The store currency the order is recorded in. It's usually your store's currency, but orders created while your store used another currency keep that original currency. Each amount column has a twin that ends with (Shop Currency), for example Price: Total (Shop Currency), with the same amount in this currency (see Shop currency amounts).
When importing, a blank or missing Shop Currency is your store's currency.
When you move orders to a store with a different currency, keep the Shop Currency column and the (Shop Currency) columns from the export. The orders then keep the shop currency they had on the old store. For a file without those columns, add a Shop Currency column with the same value as Currency, or remove the Currency column to import the amounts in your store's currency.
If Currency and Shop Currency are different, the order is a multi-currency order. Each amount you import then needs both columns, for example Line: Price and Line: Price (Shop Currency). The app doesn't convert between currencies, so an order with an amount in only one currency isn't created (ORD043). If both currencies are the same, only the amount columns are needed.
Source
Description | Example Value |
Order source/channel |
|
The channel where the order originated. When importing, you can set any custom value except Shopify's own channel values (web, pos, iphone, android, shopify_draft_order, checkout_one, checkout_next). Shopify doesn't allow apps to set these protected values, so the app skips them with a warning and imports the order without a source. Avoid the value subscription_contract, which can trigger subscription notification emails to customers.
Shopify stores this value in the order's back-end source_name field, which is visible through the API and in exports. The Channel shown in the Shopify admin is assigned by Shopify to the app that created the order, so imported orders always show "Altera" as the channel no matter what value you set here. To group imported orders in the admin, use the Tags field instead, and filter the order list by tag.
Shopify only allows this value to be set when an order is created, so it can't be changed on existing orders.
Payment Status
Description | Example Value |
Payment status |
|
pending: Payments are pending (may fail)
authorized: Payments have been authorized
partially_paid: Order has been partially paid
paid: Payments have been paid
partially_refunded: Payments have been partially refunded
refunded: Payments have been refunded
voided: Payments have been voided
When you create an order (NEW or REPLACE), the payment status sets only the label of the order. It adds no transaction, and it doesn't change the amount that is still to be paid.
If Payment: Status is blank, Shopify works out the status from the order's transactions. An order that has no transactions is created as pending, also when its total is 0. An order whose transactions all failed, or that has an authorization that was voided, gets no payment status from Shopify.
You can't change the payment status of an existing order with UPDATE or MERGE. To mark an existing order as paid, import a successful sale transaction for it with UPDATE (see Marking Orders as Paid).
Order Fulfillment Status
Description | Example Value |
Order fulfillment status |
|
fulfilled: Every line item has been fulfilled
partially_fulfilled: At least one line item has been fulfilled
unfulfilled: No line items have been fulfilled
restocked: Every line item has been restocked and order cancelled
fulfillment_not_required: No line item requires fulfillment
Exports can also show the other statuses Shopify reports, such as
in_progress,on_hold,scheduled, andrequest_declined
On import, this sets the fulfillment status of the whole order, and Shopify creates a single fulfillment covering every line item. Only fulfilled, partially_fulfilled (or partial), and restocked are accepted; any other value is ignored.
This column is read-only when you update an existing order with UPDATE or MERGE: the app ignores it and shows warning ORD098. To fulfill an existing order, use MERGE and set Fulfillment: Status to success.
The column name is Order Fulfillment Status. A column named Fulfillment Status (without Order) is read as Fulfillment: Status, a different field that belongs to a Fulfillment Line row, so a value like unfulfilled in it fails the order.
To fulfill only some of an order's items, leave this blank and use Line: Fulfillment Status on each line item row instead. That creates a separate fulfillment per line item.
Price: Total Discount
Description | Example Value |
Total order discount in order currency |
|
The total discount applied to the order in the order currency. The same amount in the shop currency is in Price: Total Discount (Shop Currency).
Price: Total Shipping
Description | Example Value |
Total shipping price in order currency |
|
The total shipping price for the order in the order currency. The same amount in the shop currency is in Price: Total Shipping (Shop Currency). This field is informational and export-only - it is not used when importing orders. Shopify's order creation API has no field for a total shipping amount, so shipping charges can only be added by including a row with Line: Type set to Shipping Line, with the shipping amount in Line: Price, or with the Shipping Line columns on a Line Item row. If an order is imported with a non-zero Price: Total Shipping but no shipping line, the order is created without any shipping charge and a warning is added to the import result.
Tax 1–100
Description | Example Value |
Order-level tax lines: Title, Rate, Price, and more |
|
An order can have up to 100 order-level tax lines. Each tax line has five columns, from Tax 1: Title to Tax 100: Channel Liable:
Tax N: Title: The name of the tax, for example
VATTax N: Rate: The rate as a decimal, for example
0.21for 21%Tax N: Price: The tax amount in the order currency
Tax N: Price (Shop Currency): The tax amount in the shop currency. It is required when
Currencydiffers fromShop Currency(see Shop currency amounts)Tax N: Channel Liable:
TRUEwhen the sales channel remits the tax. See Line: Tax 1–3 Channel Liable
The app reads the order-level tax columns from the first row of the order. Shopify divides the order-level tax between the taxable line items.
When a Line Item row of the order has a tax (Line: Tax N columns), the order-level Tax N columns are not imported, so that the tax isn't added twice. A tax on a shipping line (a Shipping Line row with Line: Tax N columns, or the Shipping Line columns) doesn't stop the order-level tax from being imported.
An export includes Tax 1 to Tax 3. When the orders in the export have more tax lines, the export adds Tax 4 and up after Tax 3, up to 100. The export finds the number of tax lines from the newest and the oldest orders. An order with more tax lines than the export has columns gets the warning ORD072.
Customer Information
Customer: ID
Description | Example Value |
Customer identifier |
|
Shopify-generated customer ID. Accepts both numeric IDs (e.g., 987654) and Shopify GIDs (e.g., gid://shopify/Customer/987654). If specified, the order will be linked directly to that existing customer.
When importing orders, customers are resolved in the following priority order:
Customer: ID - Links to an existing customer by ID
Customer: Email - Finds an existing customer by email, or lets Shopify create one
Customer: Phone - Finds an existing customer by phone number
If none of the above are provided, a new customer is created from the name and address fields
When you update an existing order (Command set to UPDATE or MERGE), the same columns set or switch the order's customer:
The customer is found by
Customer: ID, thenCustomer: Email, thenCustomer: PhoneIf
Customer: IDandCustomer: Emailbelong to different customers, the ID wins and you get the ORD053 warning. An order import can't change a customer's emailIf no customer has the
Customer: Email, a new customer is created (ORD054)If the order already has that customer, nothing changes
When the customer changes, the order email becomes the new customer's email. If the row has an
Emailvalue, the order gets that email instead. A blankEmailcell doesn't clear the order email
To remove the customer from an existing order, include the Customer: ID column and leave it blank, with no Customer: Email or Customer: Phone value on the row. The order keeps its email. If the file has no Customer: ID column, a blank Customer: Email doesn't remove the customer.
Customer: Email
Description | Example Value |
Customer email |
Customer's email address. Used to find existing customers or create new ones if no customer ID is provided.
On an update of an existing order, a Customer: Email sets or switches the order's customer. If no customer has this email, a new customer is created. See Customer: ID for the details.
Customer: Phone
Description | Example Value |
Customer phone |
|
Customer's phone number with country code. Used as fallback to find existing customers if email is empty. When importing orders without a customer email, the app will automatically search for existing customers using this phone number to maintain customer relationships. On an update of an existing order with no Customer: ID or Customer: Email, the customer with this phone number becomes the order's customer (see Customer: ID). Shopify has strict validation for phone numbers - see DAT001 error code for details.
Customer: First Name
Description | Example Value |
Customer first name |
|
The customer's first name. This field is optional, if you only have one name you should place it in the Customer: Last Name field instead.
Customer: Last Name
Description | Example Value |
Customer last name |
|
The customer's last name. This field is required when creating a customer.
Customer: Note
Description | Example Value |
Customer notes |
|
Notes about the customer visible in Shopify Admin.
Customer: State
Description | Example Value |
Customer status |
|
disabled: Customer is disabled (default until invited)
invited: Customer has been emailed an account invite
enabled: Customer accepted invite and created account
declined: Customer declined the email invite
Customer: Tax Exempt
Description | Example Value |
Tax exempt: TRUE, FALSE |
|
TRUE: Customer is exempt from taxes
FALSE: Customer is subject to normal tax rules
Customer: Tax ID
Description | Example Value |
Customer's tax or VAT number - Export only |
|
The tax ID (such as an EU VAT number) that the customer entered at checkout. The value is stored on the customer record in Shopify, so it is the same for all of the customer's orders. This field is export only and is ignored during import.
Browser: IP
Description | Example Value |
IP address of the customer at purchase - Export only |
|
The IP address recorded by Shopify when the customer placed the order. Useful for fraud detection and geographic analysis. This field is export only and cannot be set during import.
Browser: Landing Page, Referrer, and UTM
Description | Example Value |
Customer's last visit before the order - Export only |
|
These columns describe the customer's last visit to your online store before they placed the order, from Shopify's customer journey:
Browser: Landing Page: The first page of the visit
Browser: Referrer: The page that sent the customer to your store
Browser: Referrer Domain: The domain of
Browser: Referrer, for examplewww.google.comBrowser: UTM Source, UTM Medium, UTM Campaign, UTM Term, UTM Content: The UTM parameters of the visit
They're blank for orders that didn't come through the online store, such as imported, draft, and POS orders.
Addresses
Billing: First Name
Description | Example Value |
Billing address first name |
|
First name for the billing address. This field is optional, if you only have one name you should place it in the Billing: Last Name field instead.
Billing: Last Name
Description | Example Value |
Billing address last name |
|
Last name for the billing address. This field is required when creating a billing address.
Billing: Company
Description | Example Value |
Billing company name |
|
Company name for billing address, if applicable.
Billing: Phone
Description | Example Value |
Billing phone number |
|
Phone number for billing address with country code. Shopify has strict validation for phone numbers - see DAT001 error code for details.
Billing: Address 1
Description | Example Value |
Billing street address |
|
First line of billing address. Required for billing address creation.
Billing: Address 2
Description | Example Value |
Billing address line 2 |
|
Second line of billing address (optional).
Billing: City
Description | Example Value |
Billing city |
|
City for billing address. Required for billing address creation.
Billing: Province
Description | Example Value |
Billing province |
|
Province/state name for billing address. Must match Shopify's geographic classifier.
Billing: Province Code
Description | Example Value |
Billing province code |
|
Two-character province/state code. See the complete list of codes.
Billing: Country
Description | Example Value |
Billing country |
|
Country name for billing address. If no country code is provided, Altera will attempt to convert the country name to a code automatically (e.g., "USA", "U.S.A.", "United States", "UK", "Great Britain" are all recognized). If both country and country code are provided, the country code takes precedence. See the complete list of codes.
Billing: Country Code
Description | Example Value |
Billing country code |
|
Two-character country code for billing address (e.g., US, CA, GB). This field takes precedence over the country name field. If not provided, Altera will attempt to convert the country name to a code. See the complete list of codes.
Billing: Zip
Description | Example Value |
Billing zip code |
|
Postal/zip code for billing address.
If your zip code starts with zeros (like 01234), Excel may strip the leading zeros. To prevent this, start the zip code with a single quote: '01234. The quote will be automatically removed during import.
Shipping: First Name
Description | Example Value |
Shipping address first name |
|
First name for the shipping address. This field is optional, if you only have one name you should place it in the Shipping: Last Name field instead.
Shipping: Last Name
Description | Example Value |
Shipping address last name |
|
Last name for the shipping address. This field is required when creating a shipping address.
Shipping: Company
Description | Example Value |
Shipping company name |
|
Company name for shipping address, if applicable.
Shipping: Phone
Description | Example Value |
Shipping phone number |
|
Phone number for shipping address with country code. Shopify has strict validation for phone numbers - see DAT001 error code for details.
Shipping: Address 1
Description | Example Value |
Shipping street address |
|
First line of shipping address.
Shipping: Address 2
Description | Example Value |
Shipping address line 2 |
|
Second line of shipping address (optional).
Shipping: City
Description | Example Value |
Shipping city |
|
City for shipping address.
Shipping: Province
Description | Example Value |
Shipping province |
|
Province/state name for shipping address.
Shipping: Province Code
Description | Example Value |
Shipping province code |
|
Two-character province/state code. See the complete list of codes.
Shipping: Country
Description | Example Value |
Shipping country |
|
Country name for shipping address. If no country code is provided, Altera will attempt to convert the country name to a code automatically (e.g., "USA", "U.S.A.", "United States", "UK", "Great Britain" are all recognized). If both country and country code are provided, the country code takes precedence. See the complete list of codes.
Shipping: Country Code
Description | Example Value |
Shipping country code |
|
Two-character country code for shipping address (e.g., US, CA, GB). This field takes precedence over the country name field. If not provided, Altera will attempt to convert the country name to a code. See the complete list of codes.
Shipping: Zip
Description | Example Value |
Shipping zip code |
|
Postal/zip code for shipping address.
If your zip code starts with zeros (like 01234), Excel may strip the leading zeros. To prevent this, start the zip code with a single quote: '01234. The quote will be automatically removed during import.
Line Items
Product and Variant Matching
When importing line items, the app will attempt to match products and variants using the following fields in order of priority:
For Products:
Line: Product ID (primary)
Line: Product Handle (if ID not found)
Line: SKU (if ID and Handle not found)
For Variants:
Line: Variant ID (primary)
Line: SKU (if Variant ID not found)
You only need to provide one of these identifiers per product/variant. The app will automatically fall back to alternative matching methods if the primary identifier is not found.
Line: Type
Description | Example Value |
Line item type |
|
For exports, "Line Item" lines will be shown first, then the remaining lines will be shown in chronological order.
When importing, a new order needs at least one Line Item row. Without the Line: Type column no row is a Line Item row, so new orders fail with ORD077. To only update existing orders, you can leave the column out.
If the column is in the sheet, every row needs a value. A blank cell or an unknown value fails the whole order with ORD003; the other orders in the file are imported. Case, extra spaces, and a - or _ between the words don't matter (line item and Line-Item are read as Line Item), but LineItem is unknown.
Possible values:
Line Item: Order line item containing product, quantity and price information
Discount: Order-level discount
Shipping Line: Shipping cost
Transaction: Payment transaction (see Transactions for an alternative inline format)
Refund Line: Refunded line item
Refund Shipping: Refunded shipping
Fulfillment Line: Fulfilled line item. Each fulfillment can contain one or more fulfillment lines, grouped by
Fulfillment: ID. See Fulfillment Line Matching for how fulfillment lines are associated with their corresponding line items.Ignore: Custom line for formulas (ignored by app)
How Line: columns vary by type
Several Line: columns are reused by non-Line-Item rows and carry different meanings depending on Line: Type:
Line: column |
|
|
|
|
|
|
Line: ID | Line item ID | blank | Shipping line ID | Line item ID | Line item ID | blank |
Line: Title | Product title |
| Shipping method name (e.g. | Line item title | Line item title | blank |
Line: Name | Product + variant name | Discount code or automatic-discount name | Shipping carrier | Line item name | Line item name | blank |
Line: Variant Title | Variant title |
| Shipping | Variant title | Variant title | blank |
Line: Price | Unit price | Percentage rate (% discount only) | Shipping price | Unit price | Unit price | blank |
Line: Quantity | Ordered qty | blank | blank | Original line qty | Negative fulfilled qty | blank |
Line: Discount | Line item discount (negative) | Total order discount, first row only (negative) | blank | Line item discount | Line item discount | blank |
Line: Total | Line total | Same as Line: Discount on first row | Shipping price | Line total | Negated line total | blank |
Line: Tax columns | Line item tax | blank | Shipping tax | Line item tax | Line item tax | blank |
Line: Product / Variant / SKU / Vendor / Grams / Properties etc. | Populated | blank | blank | Populated | Populated | blank |
Refund Line and Fulfillment Line rows reuse the original line item's product, variant, and tax data and add their own Refunds: or Fulfillments: columns. Fulfillment Line rows have negative Line: Quantity and Line: Total to represent the items leaving inventory. Transaction rows leave all Line: columns blank - all data lives in the Transaction: columns.
Tip: To export the Shopify Shipping Method, include line items in your export and look at the Line: Title column on rows where Line: Type is Shipping Line. The carrier code is in Line: Name and the price is in Line: Price.
Line: Command
Description | Example Value |
Line item action |
|
Controls what action to perform on the line item when updating an existing order. This field is only used when the main Command field is set to UPDATE or MERGE. Values are case-insensitive.
DEFAULT: Keep the existing line item. A higher
Line: Quantityincreases its quantity (see Line: Quantity). A line item that isn't on the order is added, with a warning (ORD080)MERGE: Add this line item to the existing order, unless it's already on the order
DELETE: Remove the existing line item from the order
A blank value is the same as DEFAULT. Any other value fails the whole order with ORD056, so a typo doesn't leave the order unchanged without a message.
On an existing order, the app adds a row's line item to the order with Shopify's Order Edit API when the line item isn't on the order yet: a product (by Line: SKU, Line: Variant ID, or Line: Product Handle) or a custom line item without a product link (with Line: Title and Line: Price). This is the same for MERGE, DEFAULT, and a blank value. A DEFAULT or blank row that is added gets a warning that names the line item (ORD080). A line item that is added needs Line: Quantity, and a custom line item also Line: Price; otherwise the whole order fails and isn't changed (ORD081, ORD082).
A row doesn't add a line item that is already on the order, so importing the same file again doesn't duplicate it. The line item is found by Line: ID, then by Line: Title (not case-sensitive, and the price isn't compared), and then by Line: Variant ID and Line: SKU. A title that is on the order wins over the SKU. A row without Line: Title for another variant of a product on the order is added. For a line item that is already on the order, the row works like DEFAULT: a higher Line: Quantity increases it. A changed Line: Title doesn't rename a line item: with its Line: ID, the row changes nothing, and without it, the row adds a new line item.
When you set Line: Command to DELETE, the app removes the line item with the row's Line: ID. Without a Line: ID, the line item is found by Line: Variant ID and then Line: SKU. A Line: ID that isn't on the order changes nothing. You can delete the only line item of an order. The deleted line item stays on the order with a current quantity of 0. When the import creates a new order, a DELETE row is skipped and its line item isn't created.
A DELETE never restocks the removed units. Shopify records them as not restocked, so the stock is written off: the committed and on hand quantities go down, and the available quantity doesn't change. Orders created with the Inventory Behaviour bypass took no stock, so a DELETE doesn't change their inventory. Refund: Restock, Refund: Restock Type, and Refund: Restock Location on a DELETE row are ignored with a warning (ORD073). To give the units back to stock, use a Refund Line row with Refund: Restock set to TRUE instead (see Refunds).
Only unfulfilled units can be removed. On a partly fulfilled line item, a DELETE removes the unfulfilled units, and the fulfilled units stay on the order. A line item with only fulfilled units can't be deleted (ORD075): the row fails, and the order isn't changed. To take back fulfilled units, use a Refund Line row.
Important Notes:
All the line item changes for one order are saved as one order edit, together with the other columns of the row. You get one ORD050 message, for example
Order Edit: added [1] Line Items, updated [0], deleted [1].The app automatically handles archived orders by unarchiving, editing, then re-archiving
An order recorded in another currency than your store's (for example from before a currency change) can't be edited (ORD017)
On an order in two currencies (
Currencydiffers fromShop Currency), you can remove line items, increase quantities, and add products at Shopify's price in both currencies. A custom line item can't be added (ORD057), because Shopify would set its shop currency amount with its own exchange rateShopify can only edit unfulfilled line items. A DELETE of a fulfilled line item fails with ORD075. If Shopify refuses the edit, the row fails with Shopify's message, for example
The order cannot be edited., orCould not save the order edit.for a higher quantity on a fulfilled line item. Nothing on the order changesSee Adding Line Items to Orders for detailed examples
Line: ID
Description | Example Value |
Line item identifier |
|
Unique identifier for the line item. Generated by Shopify for existing items, can be any unique number for new orders.
For Fulfillment Line and Refund Line rows, the Line: ID should match the Line: ID of the line item being fulfilled or refunded. This allows the app to precisely associate fulfillments and refunds with the correct line items. If Line: ID is not provided, the app falls back to matching by other fields. Fulfillment lines match on SKU, title, and variant title, with the price to choose between line items that are otherwise the same (see Fulfillment Line Matching). Refund lines match on Line: Variant ID first and then on Line: SKU, so when several line items on the same order share a SKU, set Line: ID to say which one was refunded.
For Shipping Line rows, this is the Shopify shipping line ID. For Discount and Transaction rows, this column is blank.
Line: Product ID
Description | Example Value |
Product identifier |
|
Shopify product ID for the line item. If not found, the app will try to match by handle or SKU.
Line: Product Handle
Description | Example Value |
Product handle |
|
Used as secondary method to identify products when Product ID is not available.
Line: Title
Description | Example Value |
Line item title or discount type |
|
For regular line items, this is the title of the order line item. Can be set independently of the linked product title.
For shipping lines (when Line: Type is "Shipping Line"), this is the shipping method name as shown to the customer at checkout (e.g. Standard Shipping, Express Delivery). This is the equivalent of the Shipping Method column in Shopify's built-in order export.
For discount line items (when Line: Type is "Discount"), this field specifies the discount type:
fixed_amount: Fixed dollar/currency amount off. The discount value comes from the Line: Discount field.
percentage: Percentage off discount. The percentage rate comes from the Line: Price field.
shipping: Free shipping. The whole shipping of the order is discounted, whatever the Line: Discount value is, because Shopify can't import a partial shipping discount. Line: Discount can be blank.
A blank or other value is imported as fixed_amount. Shopify allows only one discount per order, so several Discount rows are imported as one discount. Rows with a Line: Discount amount become one fixed_amount discount of the summed amounts, and percentage rows without an amount become one percentage discount of the summed percentages. The code lists the Line: Name values, sorted. A shipping row together with a row of another type fails the order (ORD097), and a fixed_amount row without an amount next to another row fails it too (ORD095). One layout is accepted for older Altera exports: when only the first Discount row has an amount and the other rows are blank, the first row's amount is the order discount (ORD099).
Line: Variant ID
Description | Example Value |
Product variant ID |
|
Shopify variant ID for the line item. If not found, the app will try to match by SKU.
Line: Variant Title
Description | Example Value |
Product variant title |
|
The title of the product variant included in the line item.
For shipping lines (Line: Type is "Shipping Line"), this field contains the shipping line source (e.g. shopify). An import sets the source of the shipping line from this column.
For discount lines (Line: Type is "Discount"), this field is set to automatic when the discount was applied automatically at checkout. It is blank for manually entered discount codes.
Line: SKU
Description | Example Value |
Product SKU |
|
The SKU of the product variant. Used to identify products when ID and handle are not available.
Line: Quantity
Description | Example Value |
Item quantity |
|
The quantity of the line item purchased.
When you update an existing order, a Line: Quantity that is higher than the line item's quantity increases it. The row needs a Line: ID, or a Line: Title, Line: Variant ID, or Line: SKU that matches one line item of the order (see Line: Command). A row that matches no line item adds a new one. A lower quantity doesn't change the line item and gives the ORD051 warning: to reduce a quantity, add a Refund Line row instead (see Refunds). The same quantity changes nothing, so you can import an export of the order again.
For Fulfillment Line rows, this value is negative to represent the quantity leaving inventory through that fulfillment. Discount, Shipping Line, and Transaction rows leave this column blank.
Line: Price
Description | Example Value |
Unit price |
|
The price of one line item unit.
For shipping lines (Line: Type is "Shipping Line"), this field contains the shipping price.
When importing percentage discounts (Line: Type is "Discount" and Line: Title is "percentage"), put the percentage rate in this field (e.g., 15 for 15% off).
Line: Discount
Description | Example Value |
Line item discount |
|
Discount amount applied to the line item. Always a negative value (e.g., -5.00). The Shopify API does not support setting per-line-item discounts when creating orders.
On Discount rows, this column holds the total order-level discount and is only populated on the first Discount row of the order - additional Discount rows leave it blank to avoid double-counting.
When importing, if line items have Line: Discount values but no explicit Discount row is present, the discount amounts will be automatically summed and applied as an order-level fixed discount. This prevents discount data from being lost during store-to-store migrations (e.g., when orders have automatic discounts or script-based discounts that don't have a discount code).
If a Discount row with an amount is present in the spreadsheet, Line: Discount values on line items are ignored because the Discount row already captures the total discount amount for the order. Rolling up both would double-count the discount.
A Discount row with a code in Line: Name and no amount (blank or 0) only names the discount: the Line: Discount values of the line items are summed and applied under that code. Migration files from Magento use this form.
Line: Total
Description | Example Value |
Line item total - Export only |
|
Calculated as (Quantity × Price) + Discount. Imports ignore it on Line Item rows.
For Shipping Line rows, this is the shipping price. An import takes the shipping price from Line: Price, or from Line: Total when the row has no Line: Price. For Fulfillment Line rows, this is the negated original line total to mirror the negative Line: Quantity. On the first Discount row, it carries the total order-level discount (matching Line: Discount).
Line: Grams
Description | Example Value |
Item weight |
|
Weight per line item in grams.
Line: Requires Shipping
Description | Example Value |
Requires shipping: TRUE, FALSE |
|
TRUE: Line item requires shipping
FALSE: Line item does not require shipping (e.g., digital products)
Line: Vendor
Description | Example Value |
Product vendor |
|
Vendor name of the product purchased.
Line: Name
Description | Example Value |
Line item name |
|
The full name of the line item, including variant details. This is typically the product title combined with variant options.
For shipping lines (Line: Type is "Shipping Line"), this field contains the shipping carrier code from Shopify (e.g. Standard, Express).
For discount lines (Line: Type is "Discount"), this field contains the discount code or automatic discount name (e.g., BIENVENUE20 or FINHIVER15).
Line: Discount Allocation
Description | Example Value |
Discount allocation information - Export only |
|
Information about how discounts are allocated to this specific line item in the shop's base currency. This field is export-only and cannot be imported.
Line: Discount per Item
Description | Example Value |
Discount per unit item - Export only |
|
The line item discount divided by the line item quantity, giving the per-unit discount amount. This is the per-unit version of Line: Discount and is also negative. This field is export-only and cannot be imported.
Line: Properties
Description | Example Value |
Custom line item properties |
|
Custom properties or attributes associated with the line item. Write each property on its own line as a key: value pair, with a single colon separating the key from the value. Use a real line break to separate each pair (in a spreadsheet cell, press Alt+Enter or Option+Enter to add a line break). When viewing the spreadsheet in Excel you may need to expand the row height to see the full value.
Each line must contain exactly one colon. If a key or value needs to include a literal colon (for example a URL), escape it as \: - for example link: https\://example.com. A line with more than one unescaped colon is rejected with error DAT020. A common cause is a source file that writes a literal \n (backslash + n) as text instead of a real line break, which leaves two pairs on one line.
Line: Gift Card
Description | Example Value |
Gift card: TRUE, FALSE |
|
TRUE: Line item is a gift card
FALSE: Line item is a regular product
Line: Force Gift Card
Description | Example Value |
Force gift card: TRUE, FALSE |
|
TRUE: Force this line item to be treated as a gift card regardless of product type
FALSE: Use the product's default gift card setting
Line: Taxable
Description | Example Value |
Taxable: TRUE, FALSE |
|
TRUE: Line item is subject to tax
FALSE: Line item is tax-exempt
Line: Tax Total
Description | Example Value |
Total tax amount |
|
The total amount of tax applied to this line item across all tax rates.
Line: Tax 1 Title
Description | Example Value |
First tax name |
|
The name or title of the first tax applied to this line item.
Line: Tax 1 Rate
Description | Example Value |
First tax rate |
|
The rate (as a decimal) of the first tax applied to this line item. Example: 0.08 = 8%.
Line: Tax 1 Price
Description | Example Value |
First tax amount |
|
The monetary amount of the first tax applied to this line item. If left empty but a tax rate is provided, the app will automatically calculate the tax amount using either the line item price or the linked variant's price.
Line: Tax 2 Title
Description | Example Value |
Second tax name |
|
The name or title of the second tax applied to this line item.
Line: Tax 2 Rate
Description | Example Value |
Second tax rate |
|
The rate (as a decimal) of the second tax applied to this line item. Example: 0.02 = 2%.
Line: Tax 2 Price
Description | Example Value |
Second tax amount |
|
The monetary amount of the second tax applied to this line item. If left empty but a tax rate is provided, the app will automatically calculate the tax amount using either the line item price or the linked variant's price.
Line: Tax 3 Title
Description | Example Value |
Third tax name |
|
The name or title of the third tax applied to this line item.
Line: Tax 3 Rate
Description | Example Value |
Third tax rate |
|
The rate (as a decimal) of the third tax applied to this line item. Example: 0.01 = 1%.
Line: Tax 3 Price
Description | Example Value |
Third tax amount |
|
The monetary amount of the third tax applied to this line item. If left empty but a tax rate is provided, the app will automatically calculate the tax amount using either the line item price or the linked variant's price.
Line: Tax 4–100 Title / Rate / Price
Up to 100 tax lines are supported per line item. Use the same column naming pattern with higher numbers: Line: Tax 4 Title, Line: Tax 4 Rate, Line: Tax 4 Price, Line: Tax 4 Price (Shop Currency), Line: Tax 4 Channel Liable, Line: Tax 5 Title, and so on up to Line: Tax 100 Channel Liable. Line: Tax N Price is in the order currency and Line: Tax N Price (Shop Currency) in the shop currency, as for tax lines 1 to 3.
Line: Fulfillable Quantity
Description | Example Value |
Quantity available for fulfillment |
|
The quantity of this line item that can still be fulfilled. This is typically the ordered quantity minus any already fulfilled quantity.
Line: Fulfillment Service
Description | Example Value |
Fulfillment service name |
|
The name of the fulfillment service responsible for fulfilling this line item. Common values include manual, amazon, shipwire, etc.
Line: Fulfillment Status
Description | Example Value |
Line item fulfillment status |
|
fulfilled: Line item has been fulfilled
partial: Line item has been partially fulfilled
unfulfilled: Line item has not been fulfilled
(empty): No fulfillment status set
Line: Pre Tax Price
Description | Example Value |
Line total after discounts, before tax - Export only |
|
The line item total after all discounts (including the order-level discount allocated to the line) and before tax, in the order currency. If the order's prices include tax, the tax is taken out. Line: Pre Tax Price (Shop Currency) has the same amount in the shop currency.
Line: Current Quantity
Description | Example Value |
Quantity left after edits - Export only |
|
The quantity of the line item after order edits and refunds that removed items. A line removed with Line: Command set to DELETE stays in the export with 0 here, and Line: Quantity keeps the original quantity.
Line: Refundable Quantity
Description | Example Value |
Quantity that can still be refunded - Export only |
|
The quantity of the line item that can still be refunded.
Line: Tax 1–3 Channel Liable
Description | Example Value |
Sales channel remits the tax: TRUE, FALSE |
|
Whether the sales channel that submitted the tax line (for example TikTok, Amazon, or Etsy) collects and remits the tax. The order-level tax lines have the same column: Tax 1: Channel Liable to Tax 3: Channel Liable (and Tax 4 and up when an order has more tax lines).
TRUE: The sales channel is liable for the tax
FALSE: The store is liable for the tax. Use this unless you know otherwise
(empty): Unknown
Shop currency amounts
Every amount column is in the order currency (the Currency column), the currency the customer paid in. Each one has a twin column that ends with (Shop Currency) with the same amount in the Shop Currency, the currency the order is recorded in. For a store that sells in one currency, both columns have the same value.
The twin columns are:
Price: Total Line Items (Shop Currency),Price: Current Subtotal (Shop Currency),Price: Subtotal (Shop Currency)Tax 1: Price (Shop Currency)toTax 3: Price (Shop Currency)(andTax 4and up when an order has more tax lines),Tax: Total (Shop Currency)Price: Total Discount (Shop Currency),Price: Current Total Shipping (Shop Currency),Price: Total Shipping (Shop Currency)Price: Current Total Duties (Shop Currency),Price: Total Duties (Shop Currency),Price: Current Total Fees (Shop Currency),Price: Total Fees (Shop Currency)Price: Total Refund (Shop Currency),Price: Total Outstanding (Shop Currency),Price: Current Total (Shop Currency),Price: Total (Shop Currency)Line: Price (Shop Currency),Line: Discount (Shop Currency),Line: Discount Allocation (Shop Currency),Line: Discount per Item (Shop Currency),Line: Total (Shop Currency)Line: Tax Total (Shop Currency),Line: Tax 1 Price (Shop Currency)toLine: Tax 3 Price (Shop Currency)(andLine: Tax 4and up when a line has more tax lines),Line: Pre Tax Price (Shop Currency)Shipping Line: Price (Shop Currency)andShipping Line: Tax Price (Shop Currency)(import only, see Shipping Line columns)Transaction: Amount (Shop Currency)
When you import a multi-currency order (Currency and Shop Currency are different), fill in both columns for line items, shipping lines, transactions, fixed amount discounts, and taxes. Line: Total only needs Line: Total (Shop Currency) on a Shipping Line row without Line: Price. When both currencies are the same, only the amount columns are needed. Refunds are the exception: they only need the amount in the order currency (see Refunds on multi-currency orders).
Note: Before September 2026 the amount columns held shop currency amounts and the order currency amounts were in separate Presentment columns (for example Price: Presentment Total). Saved exports now also include the (Shop Currency) column next to each amount column they had. Repeating exports that were active at the change, and exports that use a transformation, keep the old column names and amounts. Older files still import: their amount columns are read as order currency amounts, which is correct for single-currency orders, and the Presentment columns are ignored.
Line: Presentment Currency
Description | Example Value |
Currency shown to customer at checkout - Export only |
|
The three-letter currency code (ISO 4217) of the line item's order currency amounts. It's the same as the Currency column and is kept for older exports. It's in the Line Items category.
Shipping Line Columns
These columns add a shipping line to a new order from a Line Item row, without a separate Shipping Line row. They are import only.
The app reads the columns from one row only: the first Line Item row of the order that has a value in any
Shipping Line:column. Values on other rows aren't added to it. When a later Line Item row has other values, they are ignored with the warning ORD071Values on rows that aren't Line Item rows (for example
Transactionrows) are ignored with the same warningWhen the order also has a row with
Line: Typeset toShipping Line, the order gets both shipping linesThe columns only add a shipping line when an order is created (the
NEWorREPLACEcommand, orMERGEfor an order that doesn't exist yet). OnUPDATEand onMERGEof an existing order they are ignored with the warning ORD071
For example, this file creates an order with a line item and a shipping line of 5.00 with 1.05 tax:
Name | Command | Line: Type | Line: Title | Line: Quantity | Line: Price | Shipping Line: Title | Shipping Line: Price | Shipping Line: Tax Title | Shipping Line: Tax Rate | Shipping Line: Tax Price |
|
|
|
|
|
|
|
|
|
|
|
Shipping Line: Title
Description | Example Value |
Shipping method name - Import only |
|
The name of the shipping method, in free text. It's required when the row has a Shipping Line: Code or Shipping Line: Source (ORD069). When the row has only a Shipping Line: Price, the order is created without the shipping line, with the warning ORD071.
Shipping Line: Code
Description | Example Value |
Shipping method code - Import only |
|
The code of the shipping method, usually custom. When it's empty, the app uses the Shipping Line: Title.
Shipping Line: Source
Description | Example Value |
Shipping line source - Import only |
|
The source of the shipping line, usually shopify. When it's empty, the shipping line has no source.
Shipping Line: Price
Description | Example Value |
Shipping price in order currency - Import only |
|
The shipping price in the order currency. It's required when any other Shipping Line: column has a value (ORD067). Use 0 for free shipping. A value that isn't a number, or a negative price, fails the order (ORD068).
Shipping Line: Price (Shop Currency)
Description | Example Value |
Shipping price in shop currency - Import only |
|
The shipping price in the shop currency. It's required when Currency differs from Shop Currency (ORD043). When both currencies are the same, leave it empty.
Shipping Line: Tax Title
Description | Example Value |
Shipping tax name - Import only |
|
The name of the tax on the shipping line. When any shipping tax column has a value, Shipping Line: Tax Title and Shipping Line: Tax Rate are required (ORD070). The shipping tax line is imported as not channel liable.
A shipping tax doesn't stop the order-level Tax N columns from being imported (see Tax 1–100). If your order-level tax already includes the shipping tax, leave the shipping tax columns empty.
Shipping Line: Tax Rate
Description | Example Value |
Shipping tax rate - Import only |
|
The tax rate as a decimal, for example 0.21 for 21%.
Shipping Line: Tax Price
Description | Example Value |
Shipping tax amount in order currency - Import only |
|
The tax amount in the order currency. When it's empty, the shipping line gets a tax line of 0.00 with the title and rate from the file.
Shipping Line: Tax Price (Shop Currency)
Description | Example Value |
Shipping tax amount in shop currency - Import only |
|
The tax amount in the shop currency. It's required when Currency differs from Shop Currency and the row has a Shipping Line: Tax Price.
Transactions
Transaction data can be included in your spreadsheet in two ways:
Inline on Line Item rows: Add
Transaction:columns (e.g.,Transaction: Kind,Transaction: Amount) directly on the same row as aLine Item. This is the simplest approach and is recommended for most imports.Separate Transaction rows: Use
Line: Type=Transactionto create dedicated rows for transaction data. This is the format used by exports and is useful when an order has multiple transactions.
Both formats are equivalent - Altera will process them the same way.
Transaction: ID
Description | Example Value |
Transaction ID - Export only |
|
Shopify-generated transaction identifier. This field is export-only and cannot be imported.
Transaction: Kind
Description | Example Value |
Transaction type |
|
authorization: Amount reserved against funding source
capture: Transfer of authorized money
sale: Authorization and capture in one step
refund: Partial or full return of captured funds
void: Cancellation of a transaction
When importing orders, only one SALE transaction is allowed per order. If your spreadsheet contains multiple SALE transactions for a single order, only the first SALE transaction will be imported. All other transaction types (authorization, capture, refund, void) will be imported normally.
Transaction: Amount
Description | Example Value |
Transaction amount in order currency |
|
The amount of the transaction in the order currency. Refund and void transactions are exported as negative amounts.
Transaction: Amount (Shop Currency)
Description | Example Value |
Transaction amount in shop currency |
|
The same transaction amount in the shop currency. It's required when importing a transaction for an order whose Currency and Shop Currency are different. On a refund Transaction row it's ignored, because Shopify converts the refund with its own exchange rate (see Refunds on multi-currency orders). This column was called Transaction: Shop Currency Amount before September 2026; files with the old name still import.
Transaction: Currency
Description | Example Value |
Transaction currency |
|
Currency code for the transaction amount. Shopify only accepts transactions in the order currency, so if this is different from the order's Currency, the amount is imported in the order currency with a warning (ORD044). On a refund Transaction row a different currency fails the refund instead, so that the customer doesn't get a wrong amount back (ORD063).
If the order has one currency (Currency and Shop Currency are the same) and the row has a Transaction: Amount (Shop Currency) value, that value is imported as the amount, because it is already in the order currency. Files exported before September 28, 2026 have this shape for orders in another currency: the customer's currency in Transaction: Amount and the store currency in Transaction: Shop Currency Amount.
Transaction: Created At
Description | Example Value |
When the transaction was recorded - Export only |
|
The date and time Shopify recorded the transaction. Transaction: Processed At is the date the payment was processed, which can be earlier for imported orders.
Transaction: Status
Description | Example Value |
Transaction status |
|
success: Transaction completed successfully
pending: Transaction is pending
failure: Transaction failed
error: Transaction error occurred
Transaction: Gateway
Description | Example Value |
Payment gateway |
|
The name of the payment gateway used for the transaction. The value will be prefixed with manual to avoid triggering real transactions. Eg, paypal will be imported as manual (paypal).
Transaction: Fee
Description | Example Value |
Shopify Payments fee, before tax - Export only |
|
The processing fee Shopify Payments charged for the transaction, before tax. When Shopify lists more than one fee for a transaction (for example a processing fee plus a foreign exchange fee on an international card), this is the sum of all of them. Blank for transactions on other gateways, such as manual payments. This field is export-only and cannot be imported.
Transaction: Fee Tax
Description | Example Value |
Tax charged on the fee - Export only |
|
Tax (for example GST or VAT) that Shopify charged on the fee, summed across all fee entries. Add it to Transaction: Fee to get the tax-inclusive fee. This field is export-only and cannot be imported.
Transaction: Fee Currency
Description | Example Value |
Currency of the fee - Export only |
|
The currency the fee was charged in. This field is export-only and cannot be imported.
Transaction: Fee Rate
Description | Example Value |
Percentage rate of the fee - Export only |
|
The percentage rate of the processing fee as a decimal, so 0.012 means 1.2%. This field is export-only and cannot be imported.
Transaction: Fee Rate Name
Description | Example Value |
Name of the rate applied - Export only |
|
Shopify's name for the rate that was applied, which tells you why a transaction was charged a given rate. Examples are domestic_card_not_present, international_card_not_present, and amex_card_not_present. This field is export-only and cannot be imported.
Transaction: Fee Flat
Description | Example Value |
Flat part of the fee - Export only |
|
The fixed amount included in the fee, on top of the percentage rate. This field is export-only and cannot be imported.
Transaction: Fee Types
Description | Example Value |
Fee entries summed - Export only |
|
The types of fee Shopify listed for the transaction, in the order returned. Most transactions only have processing_fee. This field is export-only and cannot be imported.
Risk
Shopify's fraud analysis of the order. These columns are export-only and are written on the order's first row.
Risk: Source
Description | Example Value |
Who assessed the order - Export only |
|
Internal for Shopify's own fraud analysis, otherwise the name of the app that assessed the order.
Risk: Level
Description | Example Value |
Risk level - Export only |
|
high, medium, low: The assessed risk of fraud
none: No risk found
pending: The assessment hasn't finished
This column replaces Risk: Score.
Risk: Recommendation
Description | Example Value |
Recommended action - Export only |
|
accept: No sign of fraud
investigate: The order might be fraudulent
cancel: The order should be cancelled
none: No recommendation
Risk: Message
Description | Example Value |
Risk facts - Export only |
|
The facts behind the assessment, one per line, each starting with POSITIVE, NEUTRAL, or NEGATIVE.
Fulfillments
To import fulfillments, add rows with Line: Type set to Fulfillment Line. Each fulfillment line represents one line item being fulfilled. Multiple fulfillment lines with the same Fulfillment: ID are grouped into a single fulfillment.
You can also add fulfillment data directly on Line Item rows by filling in the Fulfillment: columns. This is a shortcut that fulfills each line item for its full quantity. Use dedicated Fulfillment Line rows when you need more control, such as partial fulfillments or grouping specific items into separate shipments.
When the order has no Fulfillment Line rows, a Line Item row is fulfilled only when its Fulfillment: ID or Fulfillment: Status has a value. This works on new orders and on updates, and only the line items that have one of these cells are fulfilled:
Tracking or location cells without an ID or a status are ignored, and the rows get a warning (ORD060)
Only
Fulfillment: Send Receiptfulfills nothing, soFALSEin that column on every row is safeFulfillment:cells on other rows, for exampleTransactionrows, are ignored
A file without a Line: Type column works differently. It has only order columns such as Name and Fulfillment: columns, for example to add tracking numbers to existing orders. There, any Fulfillment: cell other than Fulfillment: Send Receipt fulfills all unfulfilled line items of the order, with the tracking details and location from the row.
Fulfillment Line Matching
Each Fulfillment Line row must be associated with the Line Item it fulfills. The app uses the following logic to match them:
By Line: ID (preferred): If the
Line: IDcolumn is present and the fulfillment line's ID matches a line item's ID, that match is used directly. This is the most reliable method.By SKU, title, and variant title (automatic fallback): When
Line: IDis not available, the app matches the row on theLine: SKU,Line: Title, andLine: Variant Titlevalues it has. Blank columns are not compared, so a row with onlyLine: SKUor onlyLine: Titlematches too.Line: Priceis optional: it is used only to choose between line items that have the same SKU and title. When only one line item matches, a different price on the row doesn't matter.
The values on your Fulfillment Line rows must match the corresponding Line Item rows exactly. On a new order, a Fulfillment Line row that matches no line item, or more than one line item, stops its fulfillment: the order is created without that fulfillment, with the warning ORD042. This is also true for a row with only Line: Quantity. A Fulfillment Line row that has none of these columns (only the Fulfillment: columns) fulfills every line item of the new order.
Fulfillment: ID
Description | Example Value |
Fulfillment identifier |
|
Used to group fulfillment lines into fulfillments. Rows with the same Fulfillment: ID will be grouped into the same fulfillment.
When exporting, this will contain the Shopify-generated fulfillment ID. When importing, you can use any value - it is only used by the app for grouping and will not be saved to Shopify. For example, you could use F1, F2, etc. to organize your fulfillments.
When updating existing orders with a numeric Shopify fulfillment ID, the app will update the tracking information on that specific fulfillment. When using a custom (non-numeric) ID, the app will create new fulfillments.
Fulfillment: Status
Description | Example Value |
Fulfillment status |
|
success: Fulfillment was successful
cancelled: Fulfillment was cancelled
error and failure: Fulfillment failed. Exports can show these values
On import, success or a blank cell creates the fulfillment, and cancelled creates it and then cancels it. error and failure skip the fulfillment and import the rest of the order (ORD059). Any other value, including open and pending, fails the order (ORD058). Values are case-insensitive.
A column named Fulfillment Status (without the colon) is read as this column. To set the status of the whole order, use Order Fulfillment Status.
Fulfillment: Created At
Description | Example Value |
Fulfillment creation time - Export only |
|
The timestamp when the fulfillment was created in Shopify. This field is export-only: Shopify's API does not allow setting the creation date, so imported fulfillments are always dated at the moment of the import. To carry a historical delivery date over to another store, use the Fulfillment: Processed At column, which exports the fulfillment's delivery date.
Fulfillment: Updated At
Description | Example Value |
Fulfillment update time - Export only |
|
The timestamp when the fulfillment was last updated. This field is export-only and cannot be imported.
Fulfillment: Processed At
Description | Example Value |
Fulfillment event time |
|
The date and time of the fulfillment's latest fulfillment event. On import, the app records a fulfillment event with this timestamp and the status from Fulfillment: Shipment Status. If the shipment status is blank, the event is recorded as delivered. When the shipment status is delivered or failure, Shopify shows this date as the order's delivery date. ISO-formatted timestamps are also supported. If no timezone is specified, your shop's timezone will be used.
On export, this column contains the fulfillment's delivery date, or the in-transit date if the shipment has not been delivered yet. It is blank when the fulfillment has neither. Because the column exports and imports the same date, delivery dates carry over automatically when you copy orders to another store.
If your source system ignores daylight saving time, include the offset (for example, 2026-09-22 01:15:19 -0700). If the fulfillment already has a delivery or failure date, Shopify does not allow setting a new date earlier than the existing one.
If the fulfillment has a tracking number, Shopify may replace this date with the carrier's tracking dates.
Only for new fulfillments: The app records the event only when the import creates the fulfillment, for a new order or for an existing order. When the row updates an existing fulfillment, this column is ignored: for an existing fulfillment, an import changes only the tracking information or cancels the fulfillment (see Tracking Information Updates). To give an existing fulfillment a different date, cancel the fulfillment, and then import a new fulfillment with the date.
Fulfillment: Shipment Status
Description | Example Value |
Delivery status of the shipment |
|
The delivery status of the shipment. Use one of the following values:
label_printed: A label for the shipment was purchased and printed
label_purchased: A label for the shipment was purchased, but not printed
attempted_delivery: Delivery was attempted, but could not be completed
ready_for_pickup: The shipment is ready for pickup at a shipping depot
carrier_picked_up: The carrier has picked up the shipment
confirmed: The carrier is aware of the shipment, but has not received it yet
in_transit: The shipment is moving between shipping facilities on the way to its destination
out_for_delivery: The shipment is being delivered to its final destination
delivered: The shipment was successfully delivered
delayed: The shipment is delayed
failure: Tracking information could not be retrieved, or the shipment was canceled
Set the date for the shipment status in the Fulfillment: Processed At column. In the Shopify admin, this shows as the order's delivery status.
Fulfillment: Tracking Company
Description | Example Value |
Shipping carrier |
|
Name of the tracking company. Must match Shopify's supported tracking companies. Read tracking information updates for how to change tracking information for existing orders.
Fulfillment: Tracking Number
Description | Example Value |
Tracking number |
|
Tracking number provided by the shipping company. Read tracking information updates for how to change tracking information for existing orders.
Fulfillment: Tracking URL
Description | Example Value |
Tracking URL |
|
URL for tracking the shipment provided by the shipping company. Read tracking information updates for how to change tracking information for existing orders.
Fulfillment: Location
Description | Example Value |
Fulfillment location |
|
Name of the location where the fulfillment is shipped from.
On import, this column applies only when the import creates the fulfillment. If the line items are assigned to a different location, the app first moves their fulfillment order to this location and then creates the fulfillment. Use this column when an order is assigned to a location that doesn't have the items in stock. The name match ignores letter case. You can also enter the numeric location ID. If no location matches, the fulfillment order stays at its current location.
When the row updates an existing fulfillment, this column is ignored.
Fulfillment: Send Receipt
Description | Example Value |
Send notification: TRUE, FALSE |
|
If TRUE, Shopify will send a notification email to the customer when the fulfillment is created or updated.
TRUE: Send fulfillment notification email to customer
FALSE: Do not send notification (default)
A TRUE value triggers the ALYS038 warning during file analysis. See Customer notifications.
Payment Terms
Payment Terms: Type
Description | Example Value |
Payment terms |
|
The type of payment terms applied to the order. If you are using payment terms you need to use one of the following values:
Due on receipt: Payment due immediately upon receipt
Due on fulfillment: Payment due when order is fulfilled
Net 7: Payment due 7 days after invoice
Net 15: Payment due 15 days after invoice
Net 30: Payment due 30 days after invoice
Net 45: Payment due 45 days after invoice
Net 60: Payment due 60 days after invoice
Net 90: Payment due 90 days after invoice
Fixed date: Payment due on a specific fixed date
Shopify does not support custom 'Net X' payment terms. For example, 'Net 14' is not supported.
Payment Terms: Issued At
Description | Example Value |
The date from which 'Net X' payment terms are calculated |
|
The date and time when payment terms were issued to the customer. ISO-formatted timestamps are also supported. If no timezone is specified, your shop's timezone will be used. This field is used with the Net X payment terms types. If you do not set this field, the app will use the current date.
Payment Terms: Due At
Description | Example Value |
When the payment is due |
|
The date when payment is due according to the payment terms. ISO-formatted timestamps are also supported. If no timezone is specified, your shop's timezone will be used. This field is only required if you use the Fixed date payment terms type.
Payment Terms: Completed At
Description | Example Value |
Payment completion date - Export only |
|
The date and time when payment terms were completed or paid in full. Empty if payment is still pending. ISO-formatted timestamps are also supported.
Payment Terms: Overdue
Description | Example Value |
Payment terms overdue - Export only |
|
Indicates whether the payment for the order is past due.
TRUE: Payment is overdue based on the due date
FALSE: Payment is not overdue or has been completed
Companies
Use these columns to link an order to a B2B Company Location. The order will appear in the company's order history in Shopify admin and the customer's account page.
Before importing orders with company links:
Import the B2B companies, company locations, and company contacts first
Assign each customer a role at the company location (e.g., Ordering only or Location admin)
Make sure the order's
Customer: Email(orCustomer: ID) matches a customer who is a contact at the target location
Minimum columns to link an order
At a minimum, set:
Customer: EmailorCustomer: ID- required so the customer can be associated to the locationOne of
Company: Location ID,Company: Location External ID, orCompany: Location Name- identifies the location
When the location can be uniquely identified on its own (e.g. by its Shopify ID, or by a name/external ID that is unique across all companies on the store), that's enough.
When the same location name or external ID exists across multiple companies, also set one of Company: ID, Company: External ID, or Company: Name to scope the lookup. Without a company column, ambiguous matches fail with ORD021.
How the lookup works
Each column you set is matched on its own - there is no fallback between columns. If you set Company: ID and the ID doesn't exist, the row fails; it does not try Company: External ID or Company: Name next. Pick the column that matches the source of truth for your data and leave the others blank.
The same applies to the location columns: Company: Location ID is tried first if set, then Company: Location External ID, then Company: Location Name. When a Company: column is also set, the location lookup is restricted to that company.
Rows fail with ORD021 when:
A
Company:column is set but no company matches itCompany: Location IDis set but the location belongs to a different company than theCompany:column on the same rowCompany: Location Nameis set without aCompany:column and more than one company on the store has a location by that nameCompany: Location External IDis set without aCompany:column and more than one company on the store has a location with that external ID
Updating existing orders
The company link can only be set when an order is created. Shopify's order update API doesn't allow changing the company location of an existing order - use REPLACE if you need to re-link an existing order. MERGE and UPDATE rows that set Company columns will skip the link and emit ORD023; other changes on the row are still applied.
Company: ID
Description | Example Value |
Shopify internal ID for the linked Company |
|
The Shopify internal ID for the B2B Company. Accepts the numeric ID or the full GID (gid://shopify/Company/5301829). Must match an existing company on the store, otherwise the row fails with ORD021.
Company: Name
Description | Example Value |
Name of the Company linked to the Order |
|
The exact name of the B2B Company. Must match an existing company on the store, otherwise the row fails with ORD021. Set this column when you don't have the Shopify ID or an external ID for the company.
Matching is exact, including capitalization, except that spaces at the start or end of the name are ignored. A company whose name was saved in Shopify with a hidden trailing space still matches. If two companies on the store have names that differ only by surrounding spaces, the row fails as ambiguous with COMP033.
Company: External ID
Description | Example Value |
External ID for the Company from another system |
|
The externally-supplied ID for the company. Useful when migrating from another platform that already has its own IDs. Must match an existing company on the store, otherwise the row fails with ORD021.
Company: Location ID
Description | Example Value |
Shopify internal ID for the Company Location linked to the Order |
|
The Shopify internal ID for the B2B Company Location. Accepts the numeric ID or the full GID (gid://shopify/CompanyLocation/8826651). The order will be attached to this location's purchasing entity. If a Company: column is also set, the location must belong to that company, otherwise the row fails with ORD021.
Company: Location Name
Description | Example Value |
Company Location Name linked to the Order |
|
The exact name of the company location. Matching is exact, including capitalization, except that spaces at the start or end of the name are ignored. When set without a Company: column and more than one company on the store has a location with this name, the row fails with ORD021. Set Company: ID, Company: External ID, or Company: Name alongside to disambiguate.
Company: Location External ID
Description | Example Value |
External ID for the Company Location from another system |
|
The externally-supplied ID for the company location. When set without a Company: column and more than one company on the store has a location with this external ID, the row fails with ORD021. Set Company: ID, Company: External ID, or Company: Name alongside to disambiguate.
Refunds
Refund: ID
Description | Example Value |
Refund identifier |
|
Shopify-generated refund ID. Rows with the same Refund: ID (Refund Line, Refund Shipping, and Transaction rows) make up one refund. A blank Refund: ID on a Refund Line or Refund Shipping row is the same as 1.
When you update an order (UPDATE or MERGE), a refund that the order has already is skipped, so an exported file can be imported again without refunding the customer a second time. The import result shows an informational message for each skipped refund (ORD062). A refund is skipped when:
Its
Refund: IDis the ID of a refund of this order, as in an export. The rows under that ID aren't compared, so you can't change an existing refund by changing its rowsIt's an exact copy of a refund of this order with another
Refund: ID: it has aRefund Linerow and aTransactionrow, and theTransactionrow has the same amount and the same time, to the second, as the existing refund. The time comes fromRefund: Created AtorTransaction: Processed Aton theTransactionrow
Any other Refund: ID, for example 1, adds a new refund. Without Refund: Created At and Transaction: Processed At, the refund is always created, so importing the same refund file twice refunds the customer twice.
The refund Transaction rows of an existing order can't return more than the order has left to refund (ORD065).
Refunds on multi-currency orders
On an order whose Currency is different from its Shop Currency, Shopify creates refunds in the order currency, the currency the customer paid in:
A refund
Transactionrow needsTransaction: Amountin the order currency.Transaction: Amount (Shop Currency)is ignored and isn't required, also when you create an order. Shopify sets the shop currency amount with its exchange rate at the time of the refund, so it can differ from the amount of the saleA
Transaction: Currencythat isn't the order currency fails the refund (ORD063)A
Refund Shippingrow refundsLine: Pricein the order currency. It needs aTransactionrow with the sameRefund: IDand the refund amount, because Shopify can't work out the amount by itself on such an order (ORD064)A
Refund Linerow without aTransactionrow works as on other orders: the refund payment is generated (see Refund: Generate Transaction)
Refund: Note
Description | Example Value |
Refund reason |
|
Note explaining the reason for the refund. A refund of an amount only, with a Transaction row and no Refund Line row, takes the note from its Transaction row.
Refund: Restock
Description | Example Value |
Restock items: TRUE, FALSE |
|
TRUE: Add refunded items back to inventory
FALSE: Do not restock items
When Refund: Restock is TRUE and Refund: Restock Type is empty, the import picks the type from the line item's fulfillment:
Only unfulfilled units left:
CANCELOnly fulfilled units left:
RETURNBoth, and the refund takes all the units:
CANCELfor the unfulfilled units andRETURNfor the fulfilled units, in the same refundBoth, and the refund takes only some units: the row fails (ORD076), because the import can't tell which units to restock. Set
Refund: Restock Type
Refund: Restock Type
Description | Example Value |
How to restock: return, cancel, no_restock |
|
How Shopify restocks the refunded units. Values are case-insensitive.
return: Restock fulfilled units that came back from the customer
cancel: Restock unfulfilled units
no_restock: Don't restock the units
Refund: Restock set to FALSE always means no restock. When Refund: Restock is TRUE and this column is empty, the type is picked from the line item's fulfillment (see Refund: Restock).
Refund: Restock Location
Description | Example Value |
Location name to restock items into |
|
The name of the location to restock items into when Refund: Restock is TRUE. If left empty, the import defaults to the shop's primary location.
Combined with the default Inventory Behaviour of bypass, the destination store's inventory is not adjusted when importing historical orders. Set Inventory Behaviour to decrement_obeying_policy if you want the order to actually decrement inventory and the restock to add it back.
Refund: Send Receipt
Description | Example Value |
Send notification: TRUE, FALSE |
|
TRUE: Send refund notification to customer
FALSE: Do not send notification (default)
A TRUE value triggers the ALYS038 warning during file analysis. See Customer notifications.
Refund: Generate Transaction
Description | Example Value |
Generate the refund payment: TRUE, FALSE |
|
Controls whether the app creates the refund's payment transaction when the file has no Transaction row linked to the refund. On export this column is always FALSE.
TRUE: Generate a refund transaction for the refunded lines, one for each original payment on the order. The amount is the unit price times the refunded quantity plus the tax on those units, plus any refunded shipping, as suggested by Shopify. The transaction uses the gateway of the original payment and is linked to it. This is the default when the column is missing or the cell is blank.
FALSE: Create the refund with its refund lines and restock effects only. No money is returned and the order's payment status doesn't change.
If a Transaction row shares the Refund: ID of the refund, that transaction is used as-is and this column is ignored. If the rows of one refund have different values in this column, FALSE wins and no transaction is generated. Use a Transaction row when you want to refund a different amount than the value of the refunded lines (see How to bulk partially refund Shopify orders for a specific amount).
When the column is missing or the cell is blank, the import result includes an informational message (ORD040) for each refund whose transaction was generated. If Shopify can't suggest a transaction, for example because the order has no payment to refund against, the refund is created without one and the import result includes a warning (ORD041).
Exports always write FALSE in this column, and exported refunds include their Refund: ID, so importing an exported file again skips the refunds that the order has already (see Refund: ID).
Metafields and SEO
Metafields can be imported and exported with orders to store custom metadata and additional attributes. You can export:
Order metafields
Customer metafields
Product metafields (from line items)
Variant metafields (from line items)
For detailed information about working with metafields, see our Metafields guide.
Export Filters
You can use these filters to limit which orders are exported:
id: Filter by order IDname: Filter by order name/numbercreated_at: Filter by when the order was added to Shopify's databaseupdated_at: Filter by when the order was last updated in Shopify's databaseprocessed_at: Filter by when the order was placedtag/tag_not: Filter by order tagsstatus: Filter by order status (Open, Archived, Canceled, Not archived). Select multiple statuses withequals any offinancial_status: Filter by payment status. Select multiple statuses withequals any of. The optionUnpaid (authorized or partially paid)(valueunpaid) includes orders that are authorized or partially paid. It doesn't include pending orders; to include them, also selectPendingfulfillment_status: Filter by fulfillment status. Select multiple statuses withequals any ofcustomer_id: Filter by customerbilling_country_code: Filter by billing address country code in the ISO 3166-1 alpha-2 format. Accepts single codes (e.g.,US) or comma-separated lists (e.g.,US, CA, GB). Useis emptyto find orders without a billing country (for example, orders without a billing address) andis not emptyfor orders that have oneshipping_country_code: Filter by shipping address country code in the ISO 3166-1 alpha-2 format. Accepts single codes (e.g.,US) or comma-separated lists (e.g.,US, CA, GB). Useis emptyto find orders without a shipping country (for example, pickup orders) andis not emptyfor orders that have oneline_item_title: Filter by the title of line items in the order. See Line item filters belowline_item_product_handle: Filter by the handle of the product on a line item. See Line item filters belowline_item_variant_title: Filter by the variant title of a line item, for exampleRed / S. See Line item filters belowline_item_vendor: Filter by the vendor of a line item. See Line item filters belowline_type: Filter by theLine: Typeof the rows an order has in the export (Line Item,Discount,Shipping Line,Refund Line,Refund Shipping,Transaction,Fulfillment Line). See Line type filter belowshipping_line_title: Filter by the name of the shipping method on the order (for example,Standard Shippingor a custom carrier-calculated rate name). Matching is case-insensitive, andequals any ofaccepts a comma-separated list of names. Orders without a shipping method (for example, pickup orders) only match negative conditionsproduct_id: Filter by line item product ID. Accepts a single ID, a GID, or a comma-separated list withequals any ofvariant_id: Filter by line item variant ID. Accepts a single ID, a GID, or a comma-separated list withequals any ofsku: Filter by line item SKU. See SKU filter behavior belowdiscount_code: Filter by the discount code used on the order. Useis emptyto find orders without a discount code andis not emptyfor orders with onechannel,confirmation_number,email,gateway: Text filters on the matching order fieldssource_name: Filter by the order's Source. The valuesequals,equals any of,not equal, andnot equal to any ofmatch the whole value, case-insensitive:1234doesn't match1234-abc, andmydoesn't matchmy app.containsmatches whole words of the Source (mymatchesmy app)chargeback_status,delivery_method,fraud_protection_level,return_status,risk_level: Filter by the matching status field. Note thatdelivery_methodfilters by Shopify's delivery type (shipping, pick-up, local, and so on), not the shipping method's name. To filter by a custom-named rate, useshipping_line_titleinsteadfulfillment_location_id,location_id: Filter by locationmetafield:<namespace>.<key>: Filter by the value of an order metafield, for examplemetafield:custom.priority. See Metafield value filters
Line item filters
The sku, line_item_title, line_item_product_handle, line_item_variant_title, and line_item_vendor filters check each line item of an order. If a line item matches, the export includes the whole order with all of its line items.
Positive conditions (
equals any of,contains any of,contains all of,starts with any of,matches pattern) include an order when at least one line item matches.Negative conditions (
is not equal to any of,contains none of) exclude an order when any of its line items matches.is empty includes an order when at least one line item has no value, for example a line item without a SKU or a custom line item without a product. is not empty includes an order when at least one line item has a value.
Values are separated by commas. For the product handle, variant title, and vendor filters, matching is case-insensitive.
contains all of includes an order when one line item contains every value. matches pattern compares the whole value with a pattern, where * matches any characters (also none) and ? matches exactly one character. For example, Red / * matches the variant titles Red / S and Red / XL.
SKU filter behavior
SKU matching is case-sensitive. equals and equals any of include orders with a line item whose SKU is exactly one of the values, and is not equal to excludes orders with such a line item. contains and contains any of match the start of a SKU or of a word in it, because they use Shopify's search.
is not empty includes orders where at least one line item has a SKU. is empty includes orders where at least one line item has no SKU, even if other line items have one.
Line type filter
The line_type filter checks which kinds of rows an order has. equals any of includes an order when it has at least one row of the selected types, for example orders with a Refund Line row. is not equal to any of excludes an order when it has a row of the selected types.
The filter looks at the order's data, also when you don't export the columns of that row type. For example, Fulfillment Line includes orders that have fulfillments even if the export has no fulfillment columns.
When you add this filter in the app, Include only matching lines is selected, so the export also leaves out the rows of the other types.
Include only matching lines
Without this option, a line filter selects which orders are exported, and each order keeps all of its rows. With Include only matching lines, the export also leaves out the rows of those orders that don't match. For example, sku equals ABC-1 with this option gives only the line item rows with the SKU ABC-1, which is useful to get a file with only the lines to fulfill.
These filters have the option: line_type, line_item_title, line_item_product_handle, line_item_variant_title, line_item_vendor, sku, product_id, and variant_id. In the API and the MCP server, set include_only_matching_rows to true on the filter condition. The default is false, also for line_type. In the CLI, add --only-matching-lines to turn the option on for every line filter of an orders export.
The option works like this:
Line filters (all except
line_type) keep only theLine Itemrows that match, and theRefund LineandFulfillment Linerows of those line items.Discount,Shipping Line,Refund Shipping, andTransactionrows are left out.Line type filter keeps only the rows of the selected types (or, with
is not equal to any of, of the other types).More than one filter with the option: a row must match all of them. A filter without the option only selects orders and doesn't leave out rows.
The first row that is left for an order has the order-level columns, such as
Noteand the order totals. The totals are the totals of the whole order, not of the rows in the file.An order with no row left is not in the file. For example,
skuequalsABC-1together withline_typeShipping Line, both with the option, leaves out every order.
The option can't be used with filters joined with OR.
Warning: A file made with this option doesn't have all the rows of each order. If you import it with the NEW or REPLACE command, the new orders only get the rows in the file.
Updating Orders
When updating existing orders, only a limited set of fields can be modified. Most order information becomes read-only after the order is created, but you can update these specific fields:
Supported Update Fields
The following fields can be updated on existing orders:
Note: Internal order notes
Tags: Order tags (use Tags Command to control merge/replace behavior)
Email: Contact email address
Shipping: First Name: Shipping address first name
Shipping: Last Name: Shipping address last name
Shipping: Company: Shipping company name
Shipping: Phone: Shipping phone number
Shipping: Address 1: Shipping street address
Shipping: Address 2: Shipping address line 2
Shipping: Zip: Shipping zip code
Shipping: Province: Shipping province/state name
Shipping: Province Code: Shipping province/state code
Fulfillment: ID: Fulfillment identifier
Fulfillment: Status: Fulfillment status
Fulfillment: Tracking Company: Shipping carrier
Fulfillment: Tracking Number: Tracking number
Fulfillment: Tracking URL: Tracking URL
Line Items: Line items can be added (
Line: Commandset toMERGE), removed (DELETE), or given a higherLine: Quantity(see Editing Line Items on Orders)Additional Details: Custom attributes for the order
Payments:
Transactionrows pay what is outstanding, and capture or void an authorization (see Marking Orders as Paid)Cancel Order: Orders can be cancelled by setting the Cancel: Reason field or a Cancelled At date (see Cancelling Orders)
Billing address: Shopify doesn't let apps change the billing address of an existing order. If a
Billing:value is different from the order's, the row gets the ORD086 warning and the billing address stays as it is. Blank cells and values that are the same (for example, the re-import of an export) give no warning
Tracking Information Updates
When updating tracking information for fulfillments, the following logic applies:
If Fulfillment: ID is a Shopify numeric ID: The specified fulfillment will have the tracking information updated
If Fulfillment: ID is a custom string: New fulfillments will be created using
Fulfillment Linerows, with line items matched to the existing order as described in Fulfillment Line Matching. This allows you to add multiple fulfillments to an existing order in a single import.If no Fulfillment: ID is provided, but the order has existing fulfillments: The most recent fulfillment will be updated with the new tracking information
If no Fulfillment: ID is provided and the order has no existing fulfillments: A new fulfillment will be created for the order with the provided tracking information
This ensures that tracking information is always properly associated with the correct fulfillment, whether you're updating existing fulfillments or creating new ones.
Marking Orders as Paid
You can mark existing orders as paid (also partially paid orders) by including a successful sale transaction in your update spreadsheet. Without a Transaction: Amount, the full outstanding amount is recorded as paid with Shopify's orderMarkAsPaid mutation.
To mark an order as paid:
Set
CommandtoUPDATEInclude the order's
IDorNameto identify which order to updateSet
Transaction: KindtosaleSet
Transaction: StatustosuccessOptionally set
Transaction: Amount(in the order currency)
Example
Name,Command,Transaction: Kind,Transaction: Status #1001,UPDATE,sale,success
Transactions on existing orders
The Transaction rows of an UPDATE or MERGE are added to the existing order with these rules. They make sure that an order is never paid twice, for example when you import the same file again:
A row whose
Transaction: IDis already on the order is skipped without a message. The re-import of an export adds nothing.A
salewithout an amount pays the outstanding amount whenTransaction: Statusissuccess. If the status is blank too, nothing is added (ORD090).A
salesmaller than the outstanding amount is added as a manual payment. Shopify allows this only on Shopify Plus stores; on other plans the row gets ORD090 and nothing is added.A
capturecaptures the open authorization of the order, and avoidvoids it. Without an amount, the capture takes the whole amount that is left. Only authorizations of a manual gateway are captured or voided, unlessTransaction: Force GatewayisTRUE, because a capture of a real payment gateway takes the customer's money (ORD091).authorizationrows,refundrows withoutRefund Linerows, and rows with a status other thansuccessare not added (ORD090). To refund, see Refunds on existing orders.A blank
Transaction: Statusmeanssuccess. Amounts are in the order currency (Transaction: Amount).Nothing sends an email to the customer, and the gateway shown in Shopify is "manual".
Matrixify adds every Transaction row that isn't on the order by ID, also when the order is already paid. Altera doesn't, so a file imported a second time doesn't pay the orders again.
Cancelling Orders
You can cancel existing orders by setting the Cancel: Reason field or a Cancelled At date during an update (UPDATE or MERGE). If only Cancelled At is set, the reason is other. On an existing order, a Cancel: Reason alone is enough. New orders need Cancelled At (see Importing Orders as Cancelled). This uses Shopify's orderCancel mutation to cancel the order, optionally restocking inventory and refunding the customer.
Shopify does not allow cancelling an order that is both paid and fulfilled. When that happens, the app cancels the order's fulfillments first and then cancels the order, and adds an informational message to the import results (see ORD034). The cancelled order shows as unfulfilled because Shopify cannot represent an order that is paid, fulfilled, and cancelled at the same time. Orders that are fulfilled but have no captured payment are cancelled directly and keep their fulfillments.
To cancel an order:
Set
CommandtoUPDATEInclude the order's
IDorNameto identify which order to cancelSet
Cancel: Reasonto one of the supported values (see below), or setCancelled Atto any date to cancel with the reasonotherOptionally set
Cancel: RefundtoTRUEto refund to the original payment methodOptionally set
Cancel: Send ReceipttoTRUEto notify the customerOptionally set
Cancel: RestocktoTRUEto restock the inventory (defaults to FALSE)
Cancel: Reason
Description | Example Value |
Cancellation reason |
|
The reason for cancelling the order. Supported values (case-insensitive):
customer: The customer requested cancellation
declined: Payment was declined
fraud: The order was fraudulent
inventory: Insufficient inventory
staff: Staff made an error
other: Other reason (default if unrecognized value is provided)
Cancel: Refund
Description | Example Value |
Refund to original payment: TRUE, FALSE |
|
TRUE: Refund the customer to their original payment method
FALSE: Do not issue a refund (default)
Cancel: Send Receipt
Description | Example Value |
Send notification: TRUE, FALSE |
|
TRUE: Send a cancellation notification email to the customer
FALSE: Do not send notification (default)
Cancel: Restock
Description | Example Value |
Restock inventory: TRUE, FALSE |
|
TRUE: Restock inventory items to their original locations
FALSE: Do not restock inventory (default)
Example
Name,Command,Cancel: Reason,Cancel: Refund,Cancel: Send Receipt,Cancel: Restock #1001,UPDATE,customer,FALSE,FALSE,TRUE
Importing Orders as Cancelled
Shopify does not allow creating an order that is already cancelled. When a new order (NEW, REPLACE, or a MERGE that creates the order) is imported with a Cancelled At value, the app creates the order first and then cancels it in the same import. The Cancel: Refund, Cancel: Send Receipt, and Cancel: Restock columns work the same way as when cancelling existing orders. If Cancel: Reason is empty, other is used.
Only Cancelled At cancels a new order. A new order with a Cancel: Reason (or Cancel: Refund / Cancel: Restock set to TRUE) and a blank Cancelled At is created without being cancelled, with the ORD087 message.
This is useful when migrating orders from another store: cancelled orders in the export file will arrive as cancelled orders in the new store.
Name,Command,Processed At,Cancelled At,Cancel: Reason,Cancel: Restock,Payment: Status,Line: Type,Line: Title,Line: Quantity,Line: Price #1002,NEW,2024-01-15 10:00:00 -0500,2024-02-01 12:00:00 -0500,customer,FALSE,refunded,Line Item,Sample Item,1,19.99
Important Notes:
Only orders that have not already been cancelled can be cancelled. Orders with a
Cancelled Atvalue are skipped.Inventory isn't restocked unless
Cancel: RestockisTRUE. Restocking only affects inventory that was claimed by the order, so orders created with the defaultInventory Behaviourofbypassnever restock.Shopify sets the cancellation date to the time of the import. A
Cancelled Atvalue from the file is not preserved (Shopify does not allow setting a historical cancellation date).The cancellation is processed asynchronously by Shopify.
Editing Line Items on Orders
You can add, remove, and increase the quantity of line items on existing orders. All the changes for one order are saved together as one order edit with Shopify's Order Edit API, and the import results show a summary such as Order Edit: added [1] Line Items, updated [0], deleted [1]. (ORD050).
Add: add a
Line Itemrow for a line item that isn't on the order yet (see below).Line: CommandMERGEsays so explicitly. With the orderCommandset toMERGEorUPDATE, a blank orDEFAULTrow is added too, with a warning (ORD080). With a blank orderCommand, such a row isn't added (ORD083). A row for a line item that is already on the order doesn't add it againRemove: set
Line: CommandtoDELETEon the line item's row, with itsLine: ID. The line item stays in exports withLine: Current Quantityat0. Its unfulfilled units are written off, not restocked. To restock them, use aRefund Linerow withRefund: Restockset toTRUEinsteadIncrease the quantity: set
Line: Quantityto the new, higher quantity on the line item's row, with itsLine: IDDecrease the quantity: add a
Refund Linerow for the line item. A lowerLine: Quantityis ignored with a warning (ORD051)
If a row has no Line: ID (or one that isn't on the order), the line item is found by Line: Title, then Line: Variant ID, and then Line: SKU. A DELETE row is found by Line: ID, Line: Variant ID, and Line: SKU only, and a Line: ID that isn't on the order deletes nothing. A row that matches more than one line item is skipped (ORD052).
Adding a line item raises the order total, so the order shows a balance to collect; the customer isn't charged or notified. A product line item commits stock at the location Shopify picks. If you only want to change order fields (for example the note or tags), leave the Line Item rows out of the file.
How to Add Line Items
To add line items to an existing order:
Set the main
Commandfield toUPDATE(for existing orders)Include the order's
IDorNameto identify which order to updateSet
Line: TypetoLine Itemfor each line item rowSet
Line: CommandtoMERGEfor each line item you want to add (a blank orDEFAULTvalue also adds it, with a warning)Provide either:
For variant-linked items:
Line: SKU,Line: Variant ID, orLine: Product Handle+ variant informationFor custom items:
Line: TitleandLine: Price(without SKU or variant information)
Example: Adding Items by SKU
ID,Name,Command,Line: Type,Line: Command,Line: SKU,Line: Quantity ,#1001,UPDATE,Line Item,MERGE,WIDGET-123,2 ,#1001,UPDATE,Line Item,MERGE,GADGET-456,1
This will add 2 units of SKU WIDGET-123 and 1 unit of SKU GADGET-456 to order #1001. If the order already has a WIDGET-123 line item, its quantity goes up to 2 instead (a lower quantity isn't changed).
Example: Adding Custom Line Items
ID,Name,Command,Line: Type,Line: Command,Line: Title,Line: Price,Line: Quantity ,#1001,UPDATE,Line Item,MERGE,Gift Wrapping,5.00,1 ,#1001,UPDATE,Line Item,MERGE,Rush Processing,15.00,1
This will add two custom line items (Gift Wrapping and Rush Processing) to order #1001.
Example: Adding Mixed Items
ID,Name,Command,Line: Type,Line: Command,Line: SKU,Line: Title,Line: Price,Line: Quantity ,#1001,UPDATE,Line Item,MERGE,WIDGET-123,,,2 ,#1001,UPDATE,Line Item,MERGE,,Setup Fee,10.00,1
This adds both a variant-linked item (WIDGET-123) and a custom item (Setup Fee) to the same order.
Important Behaviors
Line items already on the order: A row isn't added when the order already has the line item: the same
Line: ID, the sameLine: Title(not case-sensitive), or the same variant or SKU. A higherLine: Quantityincreases the existing line item insteadArchived Orders: The app automatically handles archived orders by unarchiving them, adding the line items, then re-archiving them. Fulfilled orders get the line item too; it's unfulfilled. Shopify doesn't allow edits to cancelled orders
Currencies: Shopify can't edit an order recorded in another currency than your store's (for example from before a currency change). On an order in two currencies (
Currencydiffers fromShop Currency), a custom line item can't be added; products are added at Shopify's price in both currenciesLine Item Pricing: For variant-linked items, the current product price will be used. For custom items, you specify the price in the
Line: Pricefield
Error Codes
ORD017: Cannot edit orders in international currency - the order is recorded in a different currency than your store's
ORD050: Summary of the line items that were added, updated, and deleted
ORD051: A lower
Line: Quantitywas ignored; use aRefund Linerow to reduce the quantityORD052: The row matches more than one line item; set
Line: IDORD057: A custom line item can't be added to an order in two currencies
For more information about error codes, see our Error Codes documentation.
