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):
| Column | Notes |
|---|---|
| Namespace | The metafield namespace, e.g. custom. Required. |
| Key | The metafield key, e.g. launch_date. Required. |
| Type | The Shopify metafield type, e.g. single_line_text_field, date, number_integer, boolean, json. Required. Defaults to single_line_text_field if blank. |
| Value | The 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 report | What it means / what to do |
|---|---|
row requires a Namespace / row requires a Key | Every row needs both a Namespace and a Key. |
could not resolve the Shop GID for this store | EcomSolo 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.