The Scenario
You are a brand migration lead. Your company is moving from WooCommerce to a new platform. The switch happens next Tuesday. Before it does, you need 300 historical orders backfilled into Omnisend so that post-purchase flows and segmentation rules based on purchase history work correctly from day one on the new platform.
You have those 300 orders in a Google Sheet — order ID, contact email, products JSON, total, order status, and created date. The sheet is clean. The clock is ticking.
The bad version of this week:
- You look for an order import CSV option in Omnisend — there is not one
- Find the API docs for the orders endpoint
- Start writing a script to POST each row
- Hit a schema validation error because your products JSON format is slightly off
- Fix it, re-run from row 47
- Realize rows 1 through 46 ran twice
- Walk into the Tuesday migration with 600 ghost orders in Omnisend and a cleanup task to deal with.
The fast version is one prompt and the 300 orders are in Omnisend before Friday afternoon.
The Easy Way: One Prompt in SheetXAI
SheetXAI reads the migration sheet and calls Omnisend's batch orders API so you do not have to write a script or debug JSON schema errors.
Open the SheetXAI sidebar and type:
Create an Omnisend batch job to import all orders from this Google Sheet — order ID from column A, contact email from column B, products JSON from column C, total from column D, and order status from column E.
SheetXAI reads the sheet, constructs the batch payload, fires the request, and confirms the job is queued. Three hundred orders, one batch, no script to debug.
What You Get
A single Omnisend batch order import covering all 300 rows:
- Order ID — used as the external identifier so Omnisend does not create duplicates if you re-run
- Contact email — linked to the existing Omnisend contact record so purchase history is attributed correctly
- Products — structured from the JSON in column C
- Total — numeric, mapped to Omnisend's order total field
- Order status — so post-purchase flows trigger on the right status
The batch API treats the order ID as idempotent. If you re-run the import, Omnisend will not create duplicates for rows it already has. That is the safety net you do not get from a naive POST-per-row script.
What If the Data Is Not Quite Ready
Migration sheets pulled from WooCommerce always have quirks. SheetXAI handles them inline.
When the products JSON column has inconsistent formatting
WooCommerce exports vary by plugin version. Some rows have arrays, some have single objects, some have extra wrapper keys.
Before importing, normalize the products JSON in column C so every row is a valid JSON array of objects with at minimum a "productId" and "price" field. Flag any row where normalization fails by writing "JSON ERROR" in column F. Then run the Omnisend batch order import for the valid rows.
When some orders have no contact email
About 15 rows are guest checkouts with no email. Omnisend requires an email to link the order to a contact.
For any row where column B is empty, write "SKIPPED — no email" in column F and exclude that row from the batch import. Import all rows with a valid email and write the batch job ID into cell G1.
When order totals are stored as strings with currency symbols
The WooCommerce export put "$" in the total column. Omnisend expects a plain decimal.
Strip the "$" symbol from all values in column D and convert them to plain numeric decimals. Then run the Omnisend batch order import.
When you want validation, cleanup, and import all in one shot
The migration sheet is raw from WooCommerce and has not been reviewed. You want everything handled before a single record touches Omnisend.
Validate the migration sheet: check that column A has no duplicate order IDs, column B has valid email format, column C is parseable JSON, and column D is a numeric value. Write any validation failures into a new tab called "Errors" with the row number and reason. For all passing rows, run the Omnisend batch order import. Write the batch job ID into cell H1 and the count of imported vs skipped rows into cells H2 and H3.
The pattern: validate, clean, and import in one instruction. You walk into Tuesday's migration with a clean audit trail.
Try It
Get the 7-day free trial of SheetXAI and open any order migration sheet, then ask it to run the Omnisend batch import. The Omnisend integration is included in every SheetXAI plan. For related workflows, see how to bulk update order statuses from a fulfillment sheet or the Omnisend in Google Sheets overview.
