Orders and fulfillment
Shopify Draft Orders: Export and Import
Last updated
Use the Draft Orders resource to export Shopify draft orders into a Matrixify-shaped CSV or XLSX file. You can then create drafts, update supported fields, manage lines and tags, send invoices, complete drafts into Orders, or delete and replace drafts through EditEngine's Advanced Import.
Draft Orders are multi-row records. One draft can contain product or custom line items, an order-level discount, and a shipping line. Keep every row for one draft together and make each command deliberate: sending an invoice contacts a customer, completing a draft creates a real Order, and DELETE or REPLACE removes the existing draft.
This guide follows the official Matrixify Draft Orders column reference, bulk-import tutorial, send-invoice tutorial, and complete-drafts tutorial. Where EditEngine differs, this guide states the EditEngine behavior explicitly.
Before you start
- Keep an untouched export as your audit reference. Advanced Import does not provide the bulk editor's one-click undo.
- Test the file on one non-critical, open draft before scaling up.
- Use Advanced Import only. The worksheet may be named Draft Orders or Draft Order.
- Repeat the same identity on every row that belongs to one draft. Do not rely on blank continuation rows.
- For same-store updates, keep the Draft Order
ID. For a cross-store import, remove source-store IDs and resolve customer, company, location, product, variant, line, and metafield references in the destination store. - Do not include
Send Invoice = TRUE,Complete = TRUE,DELETE, orREPLACEuntil you have reviewed exactly which drafts those actions target.
Step 1 — Select Draft Orders
Open EditEngine → Export, choose Draft Orders, and select CSV or Excel format.

The production panel shows the exact unfiltered count returned by Shopify. In the signed-in test store used for this guide, it displayed 56 total Draft Orders. Adding filters does not change that count badge; filters are applied while the file is built.
A filter with no matches still produces a valid header-only file. Excel exports use the Draft Orders worksheet name.
Step 2 — Choose the 134 column controls
Draft Orders exposes 134 production column controls, and all 134 are selected by default.

| Group | Controls | What it contains |
|---|---|---|
| Base | 43 | Identity, commands, status, contact, tags, totals, taxes, invoice controls, and completion controls |
| Customer | 13 | Linked customer identity, profile snapshot, marketing states, and tax exemption |
| Billing and Shipping Addresses | 26 | Thirteen billing and thirteen shipping address fields |
| Company | 6 | B2B company and company-location identity |
| Line Items | 38 | Row markers, line identity and command, product links, quantity, price, discounts, taxes, properties, and fulfillment values |
| Line Items Product Data | 7 | Current linked product and variant values |
| Metafields | 1 | Dynamic Draft Order metafield columns selected by namespace and key |
The three order-level and three line-level tax blocks are fixed export fields. They report Shopify's calculated taxes and cannot be imported. Tax: Included is also export-only; if you populate it during import, EditEngine records a non-blocking warning and ignores that value.
The Line Items Product Data group reads the linked product or variant as it exists now. Those values are export-only and can differ from the historical line snapshot on the draft.
For a round trip, keep only the columns required for the intended change. A full 134-column sheet is useful for backup and analysis, but its many action and child-row fields deserve extra review before import.
Step 3 — Filter the export
Select Add filter to narrow the Draft Orders written to the file.

EditEngine exposes 15 production filter fields:
- ID, Created At, Updated At, Tags, and Status;
- Customer: ID and Customer: Tax Exempt;
- Line: Type, Line: Title, Line: Name, Line: Variant ID, Line: Variant Title, Line: SKU, and Line: Vendor; and
- Metafield.
Status choices are Open, Invoice Sent, and Completed. Line Type choices are Line Item, Discount, and Shipping Line. Date conditions use the store's time zone. Text filters support the conditions shown for that field, including comma-separated matching and pattern matching where offered; metafields support text or numeric conditions.
Multiple filters can match all or any. A blank condition matches everything and shows a warning. Line filters select the whole matching Draft Order, so its other exported child rows remain in the file.
Matrixify documents the same core filters. EditEngine adds Customer: ID as a separate production filter.
Step 4 — Understand the multi-row export
One Draft Order can expand into these Line: Type rows:
Line Itemfor a product-backed or custom line;Discountfor the one order-level discount; andShipping Linefor the one shipping charge.
The export writes line items first, then the discount row, then the shipping row. Row # preserves spreadsheet order and Top Row = TRUE marks the first row. The top row carries the full draft-order data; later rows repeat ID and Name so the group stays identifiable.
Exports set Command = MERGE and Tags Command = REPLACE. Those values describe the normal round-trip shape, but they still execute when imported. Remove child rows and action columns that are unrelated to your intended change.
Step 5 — Choose identity and Command explicitly
For an existing Draft Order, EditEngine resolves:
ID, when present; then- exact
Name, when ID is absent.
Number groups rows inside the spreadsheet but is not used to find a Shopify Draft Order. For a new multi-row draft, repeat the same Number or placeholder Name on every row. A content row with no ID, Number, or Name becomes its own new group instead of joining the previous draft.
| Command | EditEngine Advanced Import behavior |
|---|---|
NEW | Creates a draft only when the supplied identity does not already match |
MERGE | Updates a match, or creates when there is no match and no unresolved ID |
UPDATE | Updates an existing match and fails on a miss |
REPLACE | Deletes a matching open or invoice-sent draft, then creates a new one; creates on a miss |
DELETE | Deletes a matching open or invoice-sent draft |
IGNORE | Skips the row group |
A blank Draft Orders command defaults to MERGE. Populate it anyway so the file states its intent.
If an ID is present but Shopify cannot resolve it, UPDATE and MERGE fail instead of falling back to Name. This protects same-store updates from silently targeting a different draft.
Matrixify says Name cannot identify an update and recommends ID. EditEngine additionally supports an exact Name lookup when ID is absent. ID remains safer because a generated Name is not a cross-store identity.
Step 6 — Create a new Draft Order
A new draft needs at least one valid Line Item row. You can link a store variant or create a custom line:
| Line kind | Minimum practical values |
|---|---|
| Product-backed | Variant ID, or an exact SKU, or Product ID/Handle plus enough variant identity; and Quantity |
| Custom line | Line: Title, Line: Price, Currency, and Quantity |
| Shipping Line | Line: Type = Shipping Line, Line: Title, Line: Price, and Currency |
| Order discount | Line: Type = Discount, Line: Title = percentage or fixed_amount, and the discount value |
Product resolution starts with Line: Variant ID, then uses exact SKU and supported Product ID or Product Handle combinations. If a product has multiple variants, include an exact Variant Title or SKU. Every referenced ID must belong to the destination store.
Only one order-level Discount row and one Shipping Line row are supported per draft. Line-level discounts are fixed amounts and cannot exceed that line's price multiplied by quantity. Line: Properties and Additional Details use name: value lines.
Billing or shipping addresses are created only when their Country or Country Code is present. Country Code takes priority over Country, and Province Code takes priority over Province.
Step 7 — Update or replace lines deliberately
Line: Command defaults to REPLACE.
When every line row uses REPLACE, the provided line rows become the draft's complete line-item input. A replacement line must resolve a product variant or include a valid custom Title and Price. Repeated rows with the same Line: ID are combined and their quantities are summed only when their other values agree.
For an existing draft, Line: Command = MERGE or DELETE switches to line-aware editing:
- EditEngine loads the draft's current lines.
- A line can match by Line ID, Variant ID, Product ID, exact normalized SKU, or exact normalized Title/Name.
MERGEpreserves omitted values on a matched line and appends a new line when no existing line matches.DELETEremoves the matched line.- The resulting draft must retain at least one line.
An existing metadata-only update does not need line rows. Delete all unrelated line rows from a focused Note, Tags, customer, address, invoice, or metafield update.
Step 8 — Update fields, tags, and metafields
Open and invoice-sent drafts can update only the supported nonblank values supplied in the sheet, including Email, Phone, Note, Additional Details, Currency, Charge Taxes, Reserve Inventory Until, Visible To Customer, customer/company links, addresses, lines, tags, and metafields.
Ordinary blank fields generally mean no change. Two important command-driven areas behave differently:
Tags
Tags Command defaults to REPLACE and tag operations run in spreadsheet row order:
MERGEadds the listed tags;DELETEremoves the listed tags; andREPLACEsets the complete listed tag set.
A blank Tags cell creates no tag operation, even when Tags Command is REPLACE.
Metafields
A nonblank Metafield: namespace.key [type] cell sets that Draft Order metafield. A blank selected metafield cell deletes it. Remove metafield columns that you do not intend to change.
Step 9 — Respect completed Draft Orders
A completed draft already produced a real Shopify Order. EditEngine permits only tag changes on it, using UPDATE or MERGE with a tags-only row group.
Any other populated operation on a completed draft fails. Completed drafts cannot be replaced or deleted. To change the resulting Order, use the separate Orders workflow and its own safety rules.
Step 10 — Link customers and B2B companies
EditEngine resolves a customer by Customer ID, then exact Email, then exact Phone. If no customer matches and the sheet provides an email or phone, it creates a customer before linking the draft.
Customer profile columns do not bulk-edit an existing customer's record through the Draft Orders sheet. Use the Customers resource for customer changes.
For a B2B company link, the company and location must resolve, and the linked customer must have a contact role at that Company Location. Company and location IDs are store-scoped; replace source-store IDs during migration.
Step 11 — Send an invoice or complete the draft
Set Send Invoice = TRUE only when Shopify should email the draft invoice. You can optionally supply To, From, Bcc, Subject, and Message; Shopify defaults apply when optional values are blank.
Set Complete = TRUE only when Shopify should convert the draft into a real Order. Complete: Payment Pending = TRUE creates that Order with payment pending; false or blank requests the other supported completion state.
When both actions are present, EditEngine creates or updates the draft, sends the invoice, and then completes it. Completion changes the draft's state and creates another Shopify record, so test this workflow separately from ordinary field updates.
Step 12 — Import through Advanced Import
Open EditEngine → Import, choose Advanced Import, and upload the edited CSV or XLSX file.

Before starting the import:
- Confirm that EditEngine detects Draft Orders and the intended worksheet.
- Review every detected header and the spreadsheet row count.
- Confirm that all rows for each multi-row draft repeat the same ID, Number, or placeholder Name.
- Confirm every Draft Order Command, Tags Command, and Line Command.
- Remove action columns and child rows unrelated to this run.
- Review blank metafield cells, because a selected blank metafield deletes that value.
- Review every
Send Invoice = TRUE,Complete = TRUE,DELETE, andREPLACErow separately. - Start with one safe, open draft and inspect its result before scaling up.
Advanced Import requires draft-order read/write access plus the customer, company, and product access needed to resolve referenced records.
Step 13 — Verify the result
After the import completes:
- Download the result file and investigate every failed or warning row.
- Open each sample Draft Order in Shopify Admin and verify status, customer/company link, addresses, lines, discounts, shipping, tags, and metafields.
- If an invoice was sent, verify its recipient and the draft timeline.
- If a draft was completed, open the resulting Order and verify payment state, totals, customer, and lines.
- Re-export the same Draft Order IDs with the smallest relevant column set and compare the new state with your intended values.
- Keep the untouched source export and result file with your operational audit trail.
Common mistakes
Leaving Command blank. Draft Orders defaults to MERGE. Use an explicit command so creation and updates are intentional.
Using Name like a portable ID. EditEngine can match an exact Name without ID, but the name is Shopify-generated and store-specific. Prefer ID for same-store updates.
Expecting Number to find an existing draft. Number only groups spreadsheet rows; it is not a Shopify lookup key.
Leaving identity blank on continuation rows. Each content row without ID, Number, or Name becomes a separate new group. Repeat the identity on every row.
Re-importing every exported line. Line: Command defaults to REPLACE. Keep only the line rows needed for the intended workflow.
Removing all lines. Shopify Draft Orders must keep at least one line item.
Leaving Tags Command blank. It defaults to REPLACE. Populate MERGE, DELETE, or REPLACE explicitly.
Blanking a metafield casually. A blank selected Draft Order metafield cell deletes that metafield.
Editing a completed draft. Only tags-only UPDATE or MERGE operations are allowed after completion.
Importing Tax: Included. It is export-only; EditEngine warns and ignores the populated value.
Keeping source-store IDs. Draft Order, line, customer, company, location, product, variant, and metafield IDs do not transfer between stores.
Combining invoice and completion with an ordinary update. These actions contact the customer or create a real Order. Isolate and verify them in a small, dedicated file.
Related tutorials
- Export and import Shopify Orders — manage the real Order created when a draft is completed.
- Export and import Shopify customers — prepare or update customer records before linking them to drafts.
- Export and import Shopify companies — prepare B2B company, location, and contact relationships.
- Export and import Shopify discounts — manage reusable Shopify discount definitions separately from a draft's order-level discount.
About EditEngine: EditEngine Bulk Product Editor helps Shopify merchants bulk edit, import, and export store data from spreadsheets. Install on Shopify →
