Skip to main content
Once you start publishing, MerchantOps tracks where each product is live and whether its live data still matches what’s in MerchantOps. This page explains the status indicators so you can tell at a glance what’s published, what’s drifted, and what failed.

Product-level status

Each product carries a top-level publish state:
Draft
not yet published
The product has never been published to any target. It exists only in MerchantOps.
Live
published and in sync
The product has been published and its live data matches the current MerchantOps version — nothing has changed since the last successful publish.
Changed
published but drifted
The product was published, but its data in MerchantOps has changed since then. The live storefront is behind — publish an updated batch to bring it back in sync.
You can read this same status from an agent with the get_product_publish_status MCP tool, which returns the draft / live / changed state plus the per-target chips described below.

Per-target chips

A product can be published to more than one target and environment — for example a QA VTEX store and a production VTEX store. MerchantOps shows a chip per target so you can see each destination independently: one product might be live on production and changed on QA at the same time. Each chip reflects the most recent outcome for that destination. A product isn’t simply “published” or not — it’s published per target, and the chips make that explicit.

Per-target, per-environment outcomes

Under the hood, every record in a batch carries an outcome for each target and each environment it was published to. Because outcomes are keyed by both the target and its environment, a single record holds an independent QA result and production result without one overwriting the other. A recorded outcome captures what happened on that publish:
FieldMeaning
Statussuccess, failed, or skipped
Response codeThe status or result code from the destination
AttemptsHow many tries it took (more than one means it was retried)
DurationHow long the publish call took
ErrorA short failure summary, present when the status is failed
External IDThe record’s ID in the destination system, when one exists

Succeeded vs failed vs skipped

The record was accepted by the destination. For a catalog record that means the product/SKU was created or updated; for a price record, the price was set. The record shows success and drops out of any pending-publish queue.
The destination rejected the record or a permanent error occurred — for example a variant with no matching SKU in the store. The outcome carries an error summary and a response code. Transient problems (rate limits, temporary server errors) are retried automatically first; only a record that can’t be published after retries lands as failed.
The record was intentionally not published — for instance a connector chose to skip it. Skips are recorded as outcomes too, so they don’t silently disappear.

Batch-level rollup

As records report outcomes, the batch tracks published and failed counts and, when every record is accounted for, reaches a final state:
  • Published — all records succeeded.
  • Partial — some records succeeded and some failed. Review the failed records’ error summaries, fix the underlying data, and publish again.
Publishing runs as a background job, so you can watch progress and see per-record errors on the Jobs page while a batch is in flight.
Some connectors surface warnings alongside outcomes — non-fatal issues that didn’t fail the publish but need attention, such as a brand or category that doesn’t exist in the destination yet (see VTEX). A warning doesn’t turn a success into a failed; it flags follow-up work.

Next steps

Publishing overview

How batches, targets, and scheduling fit together.

Build your own connector

Report outcomes from your own target and see them here.