Skip to main content

Order Fields

Orders contains details about the customer, items purchased, payments, fulfillment, and more.

Sample Files

Here are sample spreadsheets you can use to test the order import functionality:

Customer Notifications

Order imports don't email your customers by default. Four columns control customer emails, and each one defaults to FALSE:

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

12345678

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

#1001

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

JT5J394X2

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

MERGE

  • NEW: Create a new order. If an order with the same ID or Name already exists, the rows fail with ORD085

  • UPDATE: 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

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

bypass

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

+13125550123

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.

Email

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

Priority shipping requested

Internal notes about the order that are visible in Shopify Admin but not to customers.

Tags

Description

Example Value

Order tags

wholesale, urgent

Comma-separated list of tags for filtering and organization purposes.

Tags Command

Description

Example Value

Tag action

REPLACE

  • 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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

customer

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

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

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

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

Customer changed mind

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)

EUR

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

USD

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

online_store

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

paid

  • 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

  • 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, and request_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

10.00

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

7.50

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

VAT

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 VAT

  • Tax N: Rate: The rate as a decimal, for example 0.21 for 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 Currency differs from Shop Currency (see Shop currency amounts)

  • Tax N: Channel Liable: TRUE when 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

987654

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:

  1. Customer: ID - Links to an existing customer by ID

  2. Customer: Email - Finds an existing customer by email, or lets Shopify create one

  3. Customer: Phone - Finds an existing customer by phone number

  4. 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, then Customer: Email, then Customer: Phone

  • If Customer: ID and Customer: Email belong to different customers, the ID wins and you get the ORD053 warning. An order import can't change a customer's email

  • If 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 Email value, the order gets that email instead. A blank Email cell 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

+13125550123

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

Jane

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

Smith

The customer's last name. This field is required when creating a customer.

Customer: Note

Description

Example Value

Customer notes

VIP customer

Notes about the customer visible in Shopify Admin.

Customer: State

Description

Example Value

Customer status

enabled

  • 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

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

IT12345678901

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

159.148.78.222

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

https://store.com/products/scarf

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 example www.google.com

  • Browser: 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

John

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

Smith

Last name for the billing address. This field is required when creating a billing address.

Billing: Company

Description

Example Value

Billing company name

Smith Inc.

Company name for billing address, if applicable.

Billing: Phone

Description

Example Value

Billing phone number

+13125550123

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

123 Main St

First line of billing address. Required for billing address creation.

Billing: Address 2

Description

Example Value

Billing address line 2

Suite 100

Second line of billing address (optional).

Billing: City

Description

Example Value

Billing city

New York

City for billing address. Required for billing address creation.

Billing: Province

Description

Example Value

Billing province

New York

Province/state name for billing address. Must match Shopify's geographic classifier.

Billing: Province Code

Description

Example Value

Billing province code

NY

Two-character province/state code. See the complete list of codes.

Billing: Country

Description

Example Value

Billing country

United States

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

US

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

10001

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

John

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

Smith

Last name for the shipping address. This field is required when creating a shipping address.

Shipping: Company

Description

Example Value

Shipping company name

Smith Inc.

Company name for shipping address, if applicable.

Shipping: Phone

Description

Example Value

Shipping phone number

+1-555-0123

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

123 Main St

First line of shipping address.

Shipping: Address 2

Description

Example Value

Shipping address line 2

Suite 100

Second line of shipping address (optional).

Shipping: City

Description

Example Value

Shipping city

New York

City for shipping address.

Shipping: Province

Description

Example Value

Shipping province

New York

Province/state name for shipping address.

Shipping: Province Code

Description

Example Value

Shipping province code

NY

Two-character province/state code. See the complete list of codes.

Shipping: Country

Description

Example Value

Shipping country

United States

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

US

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

10001

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:

  1. Line: Product ID (primary)

  2. Line: Product Handle (if ID not found)

  3. Line: SKU (if ID and Handle not found)

For Variants:

  1. Line: Variant ID (primary)

  2. 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

Line Item

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 Item

Discount

Shipping Line

Refund Line

Fulfillment Line

Transaction

Line: ID

Line item ID

blank

Shipping line ID

Line item ID

Line item ID

blank

Line: Title

Product title

fixed_amount, percentage, or shipping

Shipping method name (e.g. Standard Shipping)

Line item title

Line item title

blank

Line: Name

Product + variant name

Discount code or automatic-discount name

Shipping carrier code

Line item name

Line item name

blank

Line: Variant Title

Variant title

automatic for auto-discounts, else blank

Shipping source (e.g. shopify)

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

MERGE

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: Quantity increases 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 (Currency differs from Shop 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 rate

  • Shopify 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., or Could not save the order edit. for a higher quantity on a fulfilled line item. Nothing on the order changes

  • See Adding Line Items to Orders for detailed examples

Line: ID

Description

Example Value

Line item identifier

728763138063

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

200005386255

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

tshirt-with-picture-of-me

Used as secondary method to identify products when Product ID is not available.

Line: Title

Description

Example Value

Line item title or discount type

Tshirt With Picture Of Me or percentage

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

1834691428367

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

Red / XS

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

SKU-1234567

The SKU of the product variant. Used to identify products when ID and handle are not available.

Line: Quantity

Description

Example Value

Item quantity

2

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

29.99

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

-5.00

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

54.98

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

250

Weight per line item in grams.

Line: Requires Shipping

Description

Example Value

Requires shipping: TRUE, FALSE

TRUE

  • TRUE: Line item requires shipping

  • FALSE: Line item does not require shipping (e.g., digital products)

Line: Vendor

Description

Example Value

Product vendor

Nike

Vendor name of the product purchased.

Line: Name

Description

Example Value

Line item name

Tshirt With Picture Of Me - Red

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

5.00

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

-2.50

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

Color: Red

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

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

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

  • TRUE: Line item is subject to tax

  • FALSE: Line item is tax-exempt

Line: Tax Total

Description

Example Value

Total tax amount

4.20

The total amount of tax applied to this line item across all tax rates.

Line: Tax 1 Title

Description

Example Value

First tax name

State Tax

The name or title of the first tax applied to this line item.

Line: Tax 1 Rate

Description

Example Value

First tax rate

0.08

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

2.40

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

County Tax

The name or title of the second tax applied to this line item.

Line: Tax 2 Rate

Description

Example Value

Second tax rate

0.02

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

0.60

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

City Tax

The name or title of the third tax applied to this line item.

Line: Tax 3 Rate

Description

Example Value

Third tax rate

0.01

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

0.30

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

2

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

manual

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

  • 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

25.00

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

2

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

2

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

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) to Tax 3: Price (Shop Currency) (and Tax 4 and 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) to Line: Tax 3 Price (Shop Currency) (and Line: Tax 4 and up when a line has more tax lines), Line: Pre Tax Price (Shop Currency)

  • Shipping Line: Price (Shop Currency) and Shipping 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

EUR

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 ORD071

  • Values on rows that aren't Line Item rows (for example Transaction rows) are ignored with the same warning

  • When the order also has a row with Line: Type set to Shipping Line, the order gets both shipping lines

  • The columns only add a shipping line when an order is created (the NEW or REPLACE command, or MERGE for an order that doesn't exist yet). On UPDATE and on MERGE of 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

#1001

NEW

Line Item

T-shirt

1

10.00

Worldwide

5.00

VAT

0.21

1.05

Shipping Line: Title

Description

Example Value

Shipping method name - Import only

Worldwide

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

custom

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

shopify

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

5.00

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

5.50

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

VAT

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

0.21

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

1.05

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

1.16

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:

  1. Inline on Line Item rows: Add Transaction: columns (e.g., Transaction: Kind, Transaction: Amount) directly on the same row as a Line Item. This is the simplest approach and is recommended for most imports.

  2. Separate Transaction rows: Use Line: Type = Transaction to 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

280328273935

Shopify-generated transaction identifier. This field is export-only and cannot be imported.

Transaction: Kind

Description

Example Value

Transaction type

sale

  • 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

123.99

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

135.50

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

EUR

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

2024-12-05 06:12:35 -0500

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

  • success: Transaction completed successfully

  • pending: Transaction is pending

  • failure: Transaction failed

  • error: Transaction error occurred

Transaction: Gateway

Description

Example Value

Payment gateway

paypal

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

2.52

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

0.25

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

AUD

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

0.012

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

domestic_card_not_present

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

0.30

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

processing_fee, foreign_exchange_fee

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

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

low

  • 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

  • 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

NEGATIVE: The billing address doesn't match

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 Receipt fulfills nothing, so FALSE in that column on every row is safe

  • Fulfillment: cells on other rows, for example Transaction rows, 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:

  1. By Line: ID (preferred): If the Line: ID column 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.

  2. By SKU, title, and variant title (automatic fallback): When Line: ID is not available, the app matches the row on the Line: SKU, Line: Title, and Line: Variant Title values it has. Blank columns are not compared, so a row with only Line: SKU or only Line: Title matches too. Line: Price is 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

311117676559

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

  • 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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

delivered

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

FedEx

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

1234567890

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

https://www.fedex.com/fedextrack/?trknbr=1234567890

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

Main Warehouse

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

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

Net 30

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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

2024-12-05 06:12:35 -0500

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

FALSE

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:

  1. Import the B2B companies, company locations, and company contacts first

  2. Assign each customer a role at the company location (e.g., Ordering only or Location admin)

  3. Make sure the order's Customer: Email (or Customer: ID) matches a customer who is a contact at the target location

Minimum columns to link an order

At a minimum, set:

  • Customer: Email or Customer: ID - required so the customer can be associated to the location

  • One of Company: Location ID, Company: Location External ID, or Company: 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 it

  • Company: Location ID is set but the location belongs to a different company than the Company: column on the same row

  • Company: Location Name is set without a Company: column and more than one company on the store has a location by that name

  • Company: Location External ID is set without a Company: 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

5301829

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

Acme Inc

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

ACME-001

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

8826651

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

Main Office

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

ACME-MAIN

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

123123123

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: ID is 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 rows

  • It's an exact copy of a refund of this order with another Refund: ID: it has a Refund Line row and a Transaction row, and the Transaction row has the same amount and the same time, to the second, as the existing refund. The time comes from Refund: Created At or Transaction: Processed At on the Transaction row

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 Transaction row needs Transaction: Amount in 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 sale

  • A Transaction: Currency that isn't the order currency fails the refund (ORD063)

  • A Refund Shipping row refunds Line: Price in the order currency. It needs a Transaction row with the same Refund: ID and the refund amount, because Shopify can't work out the amount by itself on such an order (ORD064)

  • A Refund Line row without a Transaction row works as on other orders: the refund payment is generated (see Refund: Generate Transaction)

Refund: Note

Description

Example Value

Refund reason

Customer requested return

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

  • 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: CANCEL

  • Only fulfilled units left: RETURN

  • Both, and the refund takes all the units: CANCEL for the unfulfilled units and RETURN for the fulfilled units, in the same refund

  • Both, 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

return

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

Warehouse

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

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

TRUE

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 ID

  • name: Filter by order name/number

  • created_at: Filter by when the order was added to Shopify's database

  • updated_at: Filter by when the order was last updated in Shopify's database

  • processed_at: Filter by when the order was placed

  • tag / tag_not: Filter by order tags

  • status: Filter by order status (Open, Archived, Canceled, Not archived). Select multiple statuses with equals any of

  • financial_status: Filter by payment status. Select multiple statuses with equals any of. The option Unpaid (authorized or partially paid) (value unpaid) includes orders that are authorized or partially paid. It doesn't include pending orders; to include them, also select Pending

  • fulfillment_status: Filter by fulfillment status. Select multiple statuses with equals any of

  • customer_id: Filter by customer

  • billing_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). Use is empty to find orders without a billing country (for example, orders without a billing address) and is not empty for orders that have one

  • shipping_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). Use is empty to find orders without a shipping country (for example, pickup orders) and is not empty for orders that have one

  • line_item_title: Filter by the title of line items in the order. See Line item filters below

  • line_item_product_handle: Filter by the handle of the product on a line item. See Line item filters below

  • line_item_variant_title: Filter by the variant title of a line item, for example Red / S. See Line item filters below

  • line_item_vendor: Filter by the vendor of a line item. See Line item filters below

  • line_type: Filter by the Line: Type of the rows an order has in the export (Line Item, Discount, Shipping Line, Refund Line, Refund Shipping, Transaction, Fulfillment Line). See Line type filter below

  • shipping_line_title: Filter by the name of the shipping method on the order (for example, Standard Shipping or a custom carrier-calculated rate name). Matching is case-insensitive, and equals any of accepts a comma-separated list of names. Orders without a shipping method (for example, pickup orders) only match negative conditions

  • product_id: Filter by line item product ID. Accepts a single ID, a GID, or a comma-separated list with equals any of

  • variant_id: Filter by line item variant ID. Accepts a single ID, a GID, or a comma-separated list with equals any of

  • sku: Filter by line item SKU. See SKU filter behavior below

  • discount_code: Filter by the discount code used on the order. Use is empty to find orders without a discount code and is not empty for orders with one

  • channel, confirmation_number, email, gateway: Text filters on the matching order fields

  • source_name: Filter by the order's Source. The values equals, equals any of, not equal, and not equal to any of match the whole value, case-insensitive: 1234 doesn't match 1234-abc, and my doesn't match my app. contains matches whole words of the Source (my matches my app)

  • chargeback_status, delivery_method, fraud_protection_level, return_status, risk_level: Filter by the matching status field. Note that delivery_method filters 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, use shipping_line_title instead

  • fulfillment_location_id, location_id: Filter by location

  • metafield:<namespace>.<key>: Filter by the value of an order metafield, for example metafield: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 the Line Item rows that match, and the Refund Line and Fulfillment Line rows of those line items. Discount, Shipping Line, Refund Shipping, and Transaction rows 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 Note and 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, sku equals ABC-1 together with line_type Shipping 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: Command set to MERGE), removed (DELETE), or given a higher Line: Quantity (see Editing Line Items on Orders)

  • Additional Details: Custom attributes for the order

  • Payments: Transaction rows 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:

  1. If Fulfillment: ID is a Shopify numeric ID: The specified fulfillment will have the tracking information updated

  2. If Fulfillment: ID is a custom string: New fulfillments will be created using Fulfillment Line rows, 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.

  3. If no Fulfillment: ID is provided, but the order has existing fulfillments: The most recent fulfillment will be updated with the new tracking information

  4. 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:

  1. Set Command to UPDATE

  2. Include the order's ID or Name to identify which order to update

  3. Set Transaction: Kind to sale

  4. Set Transaction: Status to success

  5. Optionally 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: ID is already on the order is skipped without a message. The re-import of an export adds nothing.

  • A sale pays at most the outstanding amount. On an order with nothing outstanding, nothing is added (ORD088). A larger amount is cut to the outstanding amount (ORD089).

  • A sale without an amount pays the outstanding amount when Transaction: Status is success. If the status is blank too, nothing is added (ORD090).

  • A sale smaller 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 capture captures the open authorization of the order, and a void voids it. Without an amount, the capture takes the whole amount that is left. Only authorizations of a manual gateway are captured or voided, unless Transaction: Force Gateway is TRUE, because a capture of a real payment gateway takes the customer's money (ORD091).

  • authorization rows, refund rows without Refund Line rows, and rows with a status other than success are not added (ORD090). To refund, see Refunds on existing orders.

  • A blank Transaction: Status means success. 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:

  1. Set Command to UPDATE

  2. Include the order's ID or Name to identify which order to cancel

  3. Set Cancel: Reason to one of the supported values (see below), or set Cancelled At to any date to cancel with the reason other

  4. Optionally set Cancel: Refund to TRUE to refund to the original payment method

  5. Optionally set Cancel: Send Receipt to TRUE to notify the customer

  6. Optionally set Cancel: Restock to TRUE to restock the inventory (defaults to FALSE)

Cancel: Reason

Description

Example Value

Cancellation reason

customer

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

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

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

  • 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 At value are skipped.

  • Inventory isn't restocked unless Cancel: Restock is TRUE. Restocking only affects inventory that was claimed by the order, so orders created with the default Inventory Behaviour of bypass never restock.

  • Shopify sets the cancellation date to the time of the import. A Cancelled At value 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 Item row for a line item that isn't on the order yet (see below). Line: Command MERGE says so explicitly. With the order Command set to MERGE or UPDATE, a blank or DEFAULT row is added too, with a warning (ORD080). With a blank order Command, such a row isn't added (ORD083). A row for a line item that is already on the order doesn't add it again

  • Remove: set Line: Command to DELETE on the line item's row, with its Line: ID. The line item stays in exports with Line: Current Quantity at 0. Its unfulfilled units are written off, not restocked. To restock them, use a Refund Line row with Refund: Restock set to TRUE instead

  • Increase the quantity: set Line: Quantity to the new, higher quantity on the line item's row, with its Line: ID

  • Decrease the quantity: add a Refund Line row for the line item. A lower Line: Quantity is 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:

  1. Set the main Command field to UPDATE (for existing orders)

  2. Include the order's ID or Name to identify which order to update

  3. Set Line: Type to Line Item for each line item row

  4. Set Line: Command to MERGE for each line item you want to add (a blank or DEFAULT value also adds it, with a warning)

  5. Provide either:

  6. For variant-linked items: Line: SKU, Line: Variant ID, or Line: Product Handle + variant information

  7. For custom items: Line: Title and Line: 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 same Line: Title (not case-sensitive), or the same variant or SKU. A higher Line: Quantity increases the existing line item instead

  • Archived 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 (Currency differs from Shop Currency), a custom line item can't be added; products are added at Shopify's price in both currencies

  • Line Item Pricing: For variant-linked items, the current product price will be used. For custom items, you specify the price in the Line: Price field

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: Quantity was ignored; use a Refund Line row to reduce the quantity

  • ORD052: The row matches more than one line item; set Line: ID

  • ORD057: 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.

Did this answer your question?