Import a whole store from one workbook

Instead of running one import per entity, you can upload a single Excel (.xlsx) workbook whose worksheet names tell EcomSolo what each sheet contains — a sheet named Products imports products, a sheet named Blog Posts imports blog posts, and so on. One upload, one review, one run that imports every sheet in the right order.

This is the fastest way to migrate or seed an entire store: export from your old store (or another tool), keep the sheet names, upload, run.

Coming from Matrixify? Matrixify-exported workbooks work as-is — its sheet names (Products, Smart Collections, Custom Collections, Articles, Redirects, …) are all recognized, and the column headers on each sheet auto-map the same way they do for single-entity imports.

For everything the wizard shares with single-entity imports — sources, column mapping, dry runs, operations, reports — see Importing into EcomSolo.

How it works

  1. Pick "Excel workbook — multiple entities" on the wizard's first step — it sits above the entity cards. Choose the default operation and target store as usual, then upload the workbook (.xlsx only).

    Already in a single-entity flow? Uploading a workbook there works too: when two or more sheets have recognized names, the wizard offers "Import N entities from this workbook." Accept it to switch to workbook mode, or decline and the file behaves like a normal single-sheet import.

  2. Choose your sheets. Every recognized sheet is pre-selected with its detected entity and the default operation. You can untick sheets you don't want, and override the entity or the operation per sheet.

  3. Map each sheet's columns. Each sheet gets its own mapping step — auto-mapped from its headers, just like a single-entity import. Sheets whose headers all auto-map are usually a one-click confirmation.

  4. Review the dry run. The Review step shows a per-entity dry run — will-create / will-update / will-skip counts and row-level issues for every sheet — before anything is written.

  5. Run. One run imports every selected sheet, in dependency order (below). You can also put the whole workbook on a schedule instead.

Recognized sheet names

A sheet is picked up when its name matches an entity's display name or one of the common aliases used by other tools:

Sheet name(s)Imports as
ProductsProducts
InventoryInventory
CustomersCustomers
CompaniesCompanies
Collections, Smart Collections, Custom CollectionsCollections
OrdersOrders
Draft OrdersDraft Orders
Gift CardsGift Cards
DiscountsDiscounts
BlogsBlogs
Blog Posts, ArticlesBlog Posts
PagesPages
Menus, NavigationMenus
URL Redirects, RedirectsURL Redirects
FilesFiles
LocationsLocations
MetafieldsMetafields
MetaobjectsMetaobjects
ShopShop metafields

Matching is case-insensitive. Sheets with unrecognized names are simply left out of the offer — and you can always assign an entity to any sheet by hand on the sheet-selection step, so a tab named My Products is one dropdown away from importing as Products.

Sheets import in dependency order

Rows on one sheet often reference records created by another — a blog post needs its blog, an inventory row needs its product, a company location needs its company. So the run always processes sheets in this fixed order, regardless of their order in the workbook:

  1. Shop
  2. Locations
  3. Files
  4. Metaobjects
  5. Products
  6. Inventory
  7. Collections
  8. Customers
  9. Companies
  10. Blogs
  11. Blog Posts
  12. Pages
  13. Menus
  14. URL Redirects
  15. Gift Cards
  16. Discounts
  17. Draft Orders
  18. Orders
  19. Metafields

That's why a workbook with a Blogs sheet and a Blog Posts sheet just works: the blogs exist by the time the posts that reference them are imported. The same goes for Products before Inventory and Orders, Customers before Companies, and Metafields last — so metafield rows can target anything else the workbook created.

One sheet failing doesn't stop the rest

Workbook runs continue on failure. If one sheet fails — a mapping problem, a Shopify rejection, anything — the run moves on to the remaining sheets instead of aborting. The run finishes as:

  • Completed — every sheet succeeded.
  • Partially completed — some sheets (or some rows) failed, the rest were applied.
  • Failed — nothing could be applied.

Each sheet produces its own report, same format as a single-entity import report — one line per row with status, Shopify ID, errors, and your original columns. In the Imports dashboard the workbook appears as one row; click it to open the per-sheet details and download each sheet's report. The fix loop is the same as ever: correct the failing rows, re-upload, and upsert keeps the already-successful rows safe.

Scheduling a workbook

A workbook import can be saved as a recurring schedule like any other import. On every scheduled tick, all selected sheets re-run with their saved column mappings, in dependency order. Combined with the upsert default, a scheduled workbook is a standing "make the store match this file" sync across every entity in it.

Sample file

A ready-to-run sample workbook lives at features/importing/examples/workbook-sample.xlsx. It has four sheets:

SheetRowsWhat it does
Blogs2Creates two blogs, wow-news and wow-guides.
Blog Posts3Creates three posts inside those blogs — the Blog Handle column references the handles the Blogs sheet creates, demonstrating the dependency order (blogs are imported first, so the posts always find their blog).
Pages3Creates three Online Store pages (two published, one draft).
URL Redirects3Creates three redirects pointing at the pages and posts the other sheets create.

Pick "Excel workbook — multiple entities" on the wizard's first step, upload it, click through the four pre-mapped sheets, and the dry run should predict 11 creates. Run it and you get a small but fully cross-linked slice of a store — blogs with posts, pages, and redirects into both — from one file. Re-running it updates everything in place.

FAQ

What if only one sheet has a recognized name? In the workbook flow you can still import it — assign entities to any sheets by hand on the sheet-selection step. In a single-entity flow, the automatic workbook offer only appears when at least two sheets are recognized; the file otherwise imports as a normal single-sheet import.

Can different sheets use different operations? Yes — the operation is per sheet. For example, upsert your Products sheet while running the Inventory sheet as an update.

Does the order of the tabs in my file matter? No. Sheets always run in the dependency order above, no matter how the workbook is arranged.

Can I skip a sheet without deleting it from the file? Yes — untick it on the sheet-selection step. Only the sheets you keep selected are mapped, dry-run, and imported.