Importing Shop metafields

The Shop import updates your store's shop-level metafields from a CSV/Excel file, a Google Sheet, or directly from another connected store.

The shop is the store itself. In Shopify's API almost everything about a shop — domain, owner, currency, address, plan — is read-only; the only part you can change by import is its metafields. So this importer is update-only: it never creates or deletes the shop, it just sets shop metafields (and a blank value deletes one).

For the wizard itself — uploading, mapping, dry runs, schedules — see Importing into EcomSolo.

You don't need the Shop's ID. The shop is a singleton, so unlike the general Metafields import (which needs an Owner + Owner ID), the Shop import resolves your store's Shop automatically. Every row targets the one shop.

How rows are laid out

One shop metafield per row (tall layout):

ColumnNotes
NamespaceThe metafield namespace, e.g. custom. Required.
KeyThe metafield key, e.g. launch_date. Required.
TypeThe Shopify metafield type, e.g. single_line_text_field, date, number_integer, boolean, json. Required. Defaults to single_line_text_field if blank.
ValueThe value. Leave blank to DELETE the metafield.

Matching is by (namespace, key) on the shop, so re-running the same file updates each metafield in place — it never duplicates.

Operations

The operations in Step 1 act on individual shop metafields, not the shop:

  • Upsert (the default) — sets each metafield, creating it if new. The safe default and how a store-to-store sync runs.
  • Create — only adds metafields; a (namespace, key) that already exists on the shop fails.
  • Update — only changes existing metafields; a missing (namespace, key) fails.

There is no Delete operation for Shop — the shop itself can't be deleted through the API. To remove a single metafield, leave its Value blank on any of the operations above.

Large sheets set metafields in batches (up to 25 per Shopify call), so a big shop-metafield import completes in far fewer round-trips.

Importing from another store

On the wizard's Source step, pick From another store to copy shop metafields from a connected store. The source store's shop metafields become the import rows (namespace, key, type, value), and each is upserted onto the target store's shop. Combined with a schedule this becomes a recurring one-way sync of shop metafields.

Results and freshness

Shop metafields you set take effect in Shopify immediately, and EcomSolo re-fetches the shop's metafields as soon as the run completes — so they show up on the Metafields dashboard (Owner Type: SHOP) and in Store/Shop exports within seconds, deletions included.

Sample file

A ready-to-run sample lives at features/importing/examples/shop-sample.csv:

Namespace,Key,Type,Value
custom,launch_date,date,2026-01-01
custom,warranty_policy,single_line_text_field,2 year limited warranty
custom,featured,boolean,true
custom,retired_note,single_line_text_field,

Row by row: a date metafield, a text metafield, a boolean metafield, and a delete (the blank Value on custom.retired_note removes it). Re-run the file and all four apply again idempotently.

Troubleshooting

Error in the reportWhat it means / what to do
row requires a Namespace / row requires a KeyEvery row needs both a Namespace and a Key.
could not resolve the Shop GID for this storeEcomSolo couldn't read the store's shop — reconnect the store or check its access scopes.
value coercion failed for type '…'The Value doesn't match the declared Type (e.g. a non-date in a date field). Fix the value or the Type.

FAQ

Can I change the shop's name, currency, or address? No — those are read-only in Shopify's API. Only metafields are writable.

Will re-importing duplicate metafields? No — matching is by namespace + key, so re-runs update in place.

How do I delete a shop metafield? Leave its Value cell blank.

Is there a Delete operation? No — the shop itself can't be deleted through Shopify's API, so this import has no Delete. Removing a single metafield is done with a blank Value.