What is field overwrite in an online store?
Field overwrite is what happens when one system writes a value into a product field, such as the title, the description or a metafield, on top of one stored by another system or a person, and the previous value is lost without warning. It shows up when the store platform, a PIM, an ERP or several apps write the same field.
Key takeaways
- Overwrite happens when two systems write the same field and the last one to write erases what the other put there.
- It is not the fault of any one tool: it is what happens by default when an integration writes without first checking what is stored.
- Some APIs let you write only if the value has not changed since it was read, like the compareDigest on Shopify metafields, but whoever builds the integration has to use it.
- A modified date does not say which field changed: to know whether a value was overwritten, you have to compare the value.
- Prevention is organizational: a map that says which system is in charge of each field.
This is not about overwriting a file, or about one CSS rule in the theme overriding another. It is about data: a product field that somebody wrote and another system wrote over, without anyone deciding it should be that way. The symptom is familiar in any store with more than one tool connected: you fix a description in the afternoon and the next morning the old one is back, or the title your agency prepared disappears after you install a new app. It matters for a store because lost work gives no warning: the product page is still published, looks fine, and says something else.
How it works
The last one to write wins. An integration that sends the full value of a field and saves it as is, without looking at what was there, cannot know whether someone changed it first. If two systems write the same field that way, the outcome does not depend on which one is right, but on which one synced later. The problem is old enough that the HTTP standard gives it a name: the If-Match header is mostly used on requests that change data to prevent accidental overwrites when several agents act on the same resource at once, that is, to prevent the "lost update" problem.[1]IETF. RFC 9110, HTTP Semantics, 13.1.1 If-Match The server applies the change only if the resource is still the one the client read; if someone changed it in between, it refuses.[1]IETF. RFC 9110, HTTP Semantics, 13.1.1 If-Match
Platforms solve it halfway, and optionally. In Shopify, metafields are written with the metafieldsSet mutation, which according to its documentation sets the value whether or not the metafield existed before. Since API version 2024-07 it supports a prior check: if the writer sends the compareDigest field, the mutation saves the value only if the stored one matches the one that was read; if it does not match, it returns an error instead of overwriting.[2]Shopify.dev. metafieldsSet mutation (GraphQL Admin API) It is the right protection, but it is optional: an app that does not send that field writes over it without asking.
Sometimes the last one wins by design. Not every overwrite is an error. In Google Merchant Center, an attribute rule called "Take latest" takes, for price and availability only, the most recently updated value among two or more data sources and uses it to fill the attribute.[3]Google Merchant Center Help. Set up your attribute rules It is a declared overwrite: someone decided that on those two fields the freshest data rules, wherever it comes from. What turns an overwrite into a problem is that nobody decided it.
Where it usually happens. There are three typical situations in a store:
- A source system that exports everything. A PIM or an ERP that sends the full product on every sync puts back its own value on any field that was edited in the store.
- Two apps on the same field. Two SEO tools, or an SEO tool and a translation tool, that write the same title or description overwrite each other in whatever order they run.
- The platform or the theme. A bulk CSV import, a template that fills an empty field or a theme change that rewrites default values write over what was published.
The date is not enough to detect it. The quick way to get suspicious is to compare the product's modified date with your last write. It works as an alarm, but not as proof: in Shopify, a product's updatedAt is the date of its last modification and can change for other reasons; for example, an order for a product with inventory tracking counts as an update.[4]Shopify.dev. Product object (GraphQL Admin API) To know whether a field was overwritten, you have to compare the field's value.
In a store
An ordinary night at a mountain gear store on Shopify, with a PIM that exports every night and an SEO app. It is a fictional example: the store, the times and the texts are invented to show how an overwrite chains together.
| Time (fictional example) | Who writes | Field | Value stored afterward |
|---|---|---|---|
| Monday, 3:00 a.m. | The PIM, in its daily export | Description | Manufacturer's text |
| Monday, 5:30 p.m. | The content team, by hand in Shopify | Description | Their own text, with sizes and materials |
| Monday, 5:45 p.m. | The SEO app | Meta title | New title, with the model |
| Tuesday, 3:00 a.m. | The PIM, in its daily export | Description | The manufacturer's text again |
| Tuesday, 3:00 a.m. | Nobody | Meta title | Kept, because the PIM does not export that field |
The fourth row is the overwrite: nobody decided to go back to the manufacturer's text, but the PIM rules that field and nobody told the content team. The fifth is the one that survives, and only because that field is not in the export. The fix is not technical but a matter of who owns what: either the description is edited in the PIM, or the PIM stops exporting it. When the platform or a PIM overwrites a field Clione published, Clione flags it on the next sync with the date and the exact fields, and republishing it is your decision.
What people often get wrong
That a product's modified date tells you what changed. A new date does not mean someone touched your field: in Shopify the last-modified date also changes when, for example, an order adjusts inventory.[4]Shopify.dev. Product object (GraphQL Admin API) The proof is the value: the one you published, compared with the one there now.
How to check it
- List everything that writes to your catalog: the platform, the PIM, the ERP, every app with write permission, CSV imports and the people on the team.
- Write the field map: for each field, a single system in charge and the rest only receiving. A field with two systems writing is an overwrite waiting to happen.
- Test one field. Change a value by hand on a test product, wait for each system's next sync and see whether it is still there.
- Compare values, not dates. Save what you published and compare it with what is in the store; the modified date only says that something changed.[4]Shopify.dev. Product object (GraphQL Admin API)
- Ask each integration whether it writes with a prior check, with
If-Matchon an HTTP API or withcompareDigeston Shopify metafields, or whether it writes over without looking.[1]IETF. RFC 9110, HTTP Semantics, 13.1.1 If-Match[2]Shopify.dev. metafieldsSet mutation (GraphQL Admin API)
Related concept: data drift
Data drift is the difference that builds up over time between two places that should say the same thing, like the product feed and the published product page. Overwrite is a specific event: one write that erases another. Often one leads to the other, because every overwrite nobody detects leaves two versions of one value, the one you meant to publish and the one that got published. Drift is found by comparing; overwrite is prevented by deciding who writes each field, and detected by comparing the value right after each sync.
To keep going, the platform publishing reading path orders the rest of the terms, and the entry on the PIM explains how a catalog is divided among systems.
Synonyms
- English
- field overwrite, data overwrite, lost update
- Español
- sobrescritura de datos, pisar un campo
Sources
- [1] IETF. RFC 9110, HTTP Semantics, 13.1.1 If-Match. Accessed . ↑ ↑ ↑
- [2] Shopify.dev. metafieldsSet mutation (GraphQL Admin API). Accessed . ↑ ↑
- [3] Google Merchant Center Help. Set up your attribute rules. Accessed . ↑
- [4] Shopify.dev. Product object (GraphQL Admin API). Accessed . ↑ ↑ ↑
Change history
- First English version.
This definition is published under CC BY 4.0. Reuse this definition freely, crediting Clione with a link to this page.
Related terms
PIM
What a PIM (Product Information Management) is, how it organizes families, channels and completeness, and how to decide which system rules each field.
Metafields
What Shopify metafields are, what parts they have, how they get from the admin to the product page's HTML and how to check your theme publishes them.
Custom fields
What BigCommerce custom fields are, their limits (200 per product), how a Stencil theme renders them and how they differ from metafields.
Shopify metaobject
What a Shopify metaobject is, how it differs from a metafield, how it links to your products and how to check that your theme publishes it on the product page.
Catalog API
What an online store's catalog API is, how it separates reading from writing in Shopify and BigCommerce, and the minimum permissions to give each app.
Webhook
What a webhook is, how Shopify and BigCommerce notify you of a catalog change and why a notification does not replace a periodic sync.
Make your catalog easy for bots to read
Clione fills every product page with what bots read best: the JSON-LD graph with its structured data, the meta description and the FAQs. You review and press Push; then we check your live store so it all stays published.