> ## Documentation Index
> Fetch the complete documentation index at: https://docs.readyforcommerce.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Ready for Commerce is an ecosystem that currently contains two products, PIM and Repricer, standing on one shared foundation: one identity, one organization, one team, one bill. Do not call it a platform with features, and never hint at an unreleased product.
> PIM connects to Shopify, Amazon, Square, Google Merchant Center and BigCommerce. Repricer connects to Amazon, Walmart, Shopify, BigCommerce, eBay and Square. The two products do not share one list, and each integration is authorized separately inside each product. The roster grows on purpose, so describe what the product does and let a table carry which integrations do it today, instead of counting them or writing that only one does something.
> Integration is the word this product uses, and it is the default in the documentation: the connection, the account, the Integrations screen, the per-account settings and the sync state are all integrations. Channel is reserved for the narrow sense of a destination where a listing lives, as in a product being live on a channel or archived on the channel.
> Newegg is not a supported channel. Do not describe it.
> On Amazon, PIM manages the offer only: price, availability and condition. It does not publish listing content such as titles, descriptions, images or specifications.
> Sign-in is passwordless: a single-use code emailed to the user, or Google. There are no passwords anywhere, so never describe a password, a sign-up with a password, or an email confirmation link.
> There is no public API for customers and no customer-facing webhooks. There is no organization-wide activity feed and no audit export, but the PIM does keep version history on products, brands, categories, tags and specifications, with who changed what and a restore, so never write that changes are not recorded or that an edit cannot be undone. Do not describe capabilities that are not documented here.
> Never write that the products have no AI, and never write that anything is AI-powered. Both are wrong. The PIM's image Optimizer runs AI-backed transforms the seller starts on purpose: Upscale, Remove background, and the region selection behind Refine. The Repricer reads competitor prices off web pages on the server. No control, badge or tooltip in either product names AI, and the seller never writes a prompt, so describe what the buttons do in the app's own words instead of reaching for the word.
> A PIM product, brand, category or variant can be switched off per connected integration account. Hover the channel badge and the switch is beside the account name in the card that opens. It carries no visible caption, so never call it the Sync switch: Sync is only its accessible name. On a variant-grained provider, Amazon today, the switch moves into the variant editor. On a product it asks whether to delete it from the channel, archive it there, or leave it live. Disabling stops publishing, not reading. There is still no per-field sync toggle.
> The PIM's image Optimizer replaced a feature called Squarify, which no longer exists. It resizes to an aspect ratio or to exact dimensions, removes backgrounds, upscales, trims the transparent margin around a cutout and re-centers it, pads, fills and re-encodes, and it always publishes a new asset instead of changing the original. Nothing crops into the picture: the subject is always contained whole.
> The PIM has no repricing engine and never reacts to a competitor's price. It does build the price it publishes to each integration account from the seller's own fields, configured in that account's settings, so do not write that the PIM has no pricing rules.
> Neither product has an in-app notification center, bell or inbox. Notifications are delivered by email only.
> Billing is per organization and per product, and only the organization owner can see or change it. Team members are free and uncounted, so never describe seats or per-user pricing.
> The seller never picks a plan. Each product has twelve price tiers assigned automatically from usage: the PIM from catalog product count, which includes drafts and archived products, and the Repricer from trailing 30-day sales. Nothing is feature-gated by plan and exceeding a tier never blocks work, so never write that a feature requires a higher plan.
> A subscription that is past due or paused makes the product read-only, which stops repricing and blocks edits without deleting data. Only a canceled subscription locks the seller out. Nothing is ever charged without a payment method on file.
> Pages containing the text 'This page has not been written yet', or its Spanish equivalent 'Esta página todavía no está escrita', are placeholders. Do not treat their headings as documented behavior.

# Sync issues

> A product can look finished in your catalog and still be missing from an integration, and this is where the PIM records the reason and what to change.

A sync issue is the PIM telling you that one of your products did not get to one of your integrations, or got there and came back with a complaint. Every issue is about one of your products on one account, and the PIM records it there.

You would come here because nothing announces any of this. A product can be in your catalog looking finished and be missing from a store you sell on, or be live there with no price. The one sign is a colored dot, and this page is how you read that dot, find the sentence behind it, and work out what to change.

Everything you need is on the product. Open one from `Catalog` and a row of integration logos runs along the top of the editor, beside the title, one logo for each integration you have connected. Each logo has a small colored dot, and hovering it opens a panel that tells you in words what the color meant.

The same row of logos is on a brand and on a category too, so everything below reads the same way when you open one of those.

## Before you start

| Your role | What you can do here |
| --- | --- |
| Admin | Read every badge, fix the product, and reconnect or re-sync an account |
| Manager, Editor | Read every badge and fix the product |

Roles are set in [team, roles and permissions](/team#what-each-pim-role-can-do).

<Warning>
  Nothing emails you when one product fails to publish. A product can stop selling on one integration and stay that way until someone opens it and looks at the dot.
</Warning>

## How to find out why a product is not on an integration

<Steps>
  <Step title="Open the product">
    Click `Catalog` in the left sidebar, which opens on the `Products` table, and click the row of the product you are checking. The editor opens with a row of integration logos along the top, beside the title.
  </Step>

  <Step title="Find the dot that is not green">
    Each logo has a small colored dot in its corner. Green means that integration has nothing for you. Red and orange are the only two that need you, and they are the ones worth opening.
  </Step>

  <Step title="Open the panel">
    Hover over that logo. A panel opens with one section for each account you have on that integration, and the first row of every section, `Sync status`, spells the color out in words.
  </Step>

  <Step title="Read the reason">
    Under `Sync status`, the panel tells you what happened. A `Push issues` row means part of what you sent could not go out. A `Restrictions` row means a rule on the integration is stopping the product. An `Advisories` or `Pull error` row means the integration sent you something back.
  </Step>

  <Step title="Change what the message names, and save">
    Fix the field the message names, anywhere in the product editor, then click `Save`. Saving queues your product again on every integration, and the badge moves on its own.
  </Step>
</Steps>

That is the whole flow. Most sync issues are one field on one of your products, and saving is the whole of the retry, because there is no button anywhere that tries the same push again.

Everything below is the full list of what the badge can say. It also covers what each kind of message asks for, and where to go when the answer is not on your product. You do not need any of it for a message that names a field.

## Every option in detail

### What the color of the dot means

The dot is the fastest thing to read on your product, and five colors is the whole vocabulary.

| Color | What it is telling you |
| --- | --- |
| Green | Your product is on that integration and nothing needs you |
| Blue | The PIM is publishing it right now, or waiting its turn to |
| Gray | Nothing is being published there, and no problem is behind it |
| Orange | Your product is live and part of it is not what you sent |
| Red | Your product is not live, or the integration will not show it |

**Only one state shows at a time**, and the panel picks the most serious one it has. So an orange state can be waiting under a red one and only appear once you clear the red one. Fix what the panel shows you, save, and look again.

**A logo covers every account you have on that integration**, and its dot shows you the worst of them. Two Shopify stores where one is clean and one is failing give you a red dot, and the panel underneath has a section for each so you can tell which.

Blue and gray are the states where the PIM is working or has been told not to. [Push](/pim/integrations/push) lists all of them, along with what puts a product into each.

### The states that ask you to change something

These are the red ones. Your product is not selling on that account until one of them clears.

| `Sync status` says | What happened | What to do |
| --- | --- | --- |
| `Failed` | The last push was rejected and nothing was written | Read `Push issues`, change what it names, and save |
| `3 variants failed` | The product went through and that many of its variants did not | Read `Push issues`, which names each variant by its SKU |
| `Blocked` | A rule on the integration stopped the push before anything went out | Read `Restrictions`, which names the rule |
| `Read failed` | The first sync could not take this product at all | Read `Pull error`, fix that field here, and the next push that goes through clears it |
| `Rejected by the integration` | The integration has your product and will not show it | Read `Restrictions`, which gives you the verdict and the field behind it |
| `Needs re-authentication` | The connection expired or was revoked | Reconnect the account on the [integrations](/pim/integrations) screen |
| `Account error` | The account was switched off after something it cannot recover from | Delete it and connect a new one, on the same screen |

The last two are about the connection and not about your product. Every product on that account is stopped the same way, and none of them will move until you fix the account.

### The states that are only a warning

These are the orange ones. Your product is live, and something about it is not what you sent.

| `Sync status` says | What happened | What to do |
| --- | --- | --- |
| `Needs attention` | The push went through and part of what you sent was changed or dropped | Read `Advisories` |
| `4 fields need attention` | That many fields have something to say about them | Read `Advisories`, which [pull](/pim/integrations/pull) covers line by line |
| `Listing needs attention` | The integration has your product and is not showing it in full | Fix it in that integration's own admin |

An orange badge is worth reading and is rarely urgent enough to drop everything for. The common one is a price. An account whose price sources resolved nothing keeps the price it already had, so your listing stays live at the old number. The panel is where you find out the new one never went.

<Accordion title="Which integrations can say a listing needs attention, and which can reject one">
  Only two of them report back on a listing at all, and they are the two where someone else decides whether your product is shown.

  On Amazon the panel's `Variant status` row gives you the state of each variant: `Live` when it is visible and can be bought, `Not buyable` when shoppers can see it and cannot buy it, `Not searchable` when they can buy it and cannot find it, `Inactive` when neither is true, and `Unknown` when Amazon describes nothing. None of them turns your badge orange on its own, because each one says where your offer stands rather than that something is wrong. Amazon refusing to carry the product at all is what turns it red, as `Blocked`.

  On Google, `Limited` reads as `Listing needs attention` and `Rejected` reads as `Rejected by the integration`. Those two are the only listing states in either product that move the badge by themselves.

  Shopify, Square and BigCommerce publish what you send and never report a verdict, so a product of yours is either on them or it is not.
</Accordion>

### What a message is asking you to change

Every message names the integration that produced it, so you always know which store to open. There are five kinds, and the kind tells you where the fix is.

| The message | What it means | Where you fix it |
| --- | --- | --- |
| A named field was rejected | The value went out and the integration would not take it | The field in your product editor |
| Something the integration needs is missing | Your product has no value the integration can use for it | The field, or the account's [settings](/pim/integrations/settings) so a different one is sent |
| A limit on the integration's side was hit | The integration has a limit, and your product or your store is past it | The product, or the integration's own admin |
| A value was shortened or dropped on the way out | The push went through and that one value did not arrive whole | The field, if you would rather it went whole |
| The integration disapproved your product | It has everything and still will not show it | That integration's own admin |

**Read the first word of the message.** It tells you whether the fix is yours. A message opening with the integration's name is that integration rejecting a value, as in a price or a barcode of yours it would not take. A message opening with `No price is available` or `Google requires` is your product missing something, and that one is always yours to fill in.

<AccordionGroup>
  <Accordion title="What each integration insists on before it will take a product">
    Most of your failures are one of these, and each one is the same message every time.

    | Integration | What it will not publish without |
    | --- | --- |
    | Shopify | A URL handle no other product in the store uses, and a price on the first push. It takes at most 3 options on a product |
    | BigCommerce | A name, a price, a SKU and a URL slug it accepts |
    | Amazon | A match to an ASIN, plus a price, a stock quantity and a condition it accepts |
    | Square | A name, a price and a currency it accepts |
    | Google | An image, a title, a SKU on the variant, a price above zero, and an address for the product's page |

    Google's address comes from the website you set on the account, not from the product, and its message links you right to the account's settings. Google also rejects an account whose currency is not your catalog's.

    Whichever identifier an account is set to send as its SKU has to have a value and has to be unique. Change which one that is under `Choose which identifier the integration receives` in [settings](/pim/integrations/settings#choose-which-identifier-the-integration-gets).
  </Accordion>

  <Accordion title="Why a few messages arrive in English on a Spanish app">
    Most messages are written in the language you are using. A handful are not. Those come from outside the product itself: a brand or a category that failed to publish, and a failure about the connection or the currency.

    Those come to you as one English sentence in `Push issues`. Nothing is wrong with your product when this happens, and the sentence still names what to change.
  </Accordion>
</AccordionGroup>

### Pushing again after you fix it

**Saving the product is the retry.** Change what the message named, click `Save`, and the PIM queues that product on every integration again a few seconds later. The badge moves to `Pending update`, then to `Synced` or back to `Failed` if your fix was not the right one.

**Nothing retries a red badge on its own.** The PIM tries a temporary problem several times before it gives up, and a badge that says `Failed` means it stopped trying. So the answer to a red badge is always to change something and never to wait.

**When the fix is a setting and not a field**, saving the product is not enough, because the setting decides what the push builds. Open the account from the [integrations](/pim/integrations) screen, click `Settings`, save your change, and answer `Re-sync now` when it asks. That queues every one of your products on that account, failed ones included. Only an Admin sees that screen.

### Seeing how many products are affected

The panel on a product tells you about that one product and nothing else. For a count across your whole catalog, click `Reports` in the left sidebar and open the [Integrations](/pim/reports/integrations) card.

| What it shows you | What it counts |
| --- | --- |
| `Failed pushes` | Listings whose last push was rejected, across every account |
| `Failed` and `Pending`, in the per-provider table | The same two counts, split by integration |
| `Push outcomes` | Every push attempt in your date range, by how it ended |
| `Accounts that need attention` | Accounts that are errored, need re-authentication, or are paused |

That card only appears once you have connected an account, and only an Admin can open it. The counts are numbers and not lists, so use them to find out whether you have a problem, then go to the products themselves.

### Limits

| What | Limit |
| --- | --- |
| Messages the panel shows before it says `+N more` | 5 |
| Times a temporary problem is retried before it becomes `Failed` | 3 |
| Past attempts you can read on a product | None |

### What you cannot do here

| You cannot | Do this instead |
| --- | --- |
| List the products that are failing | Open the [Integrations](/pim/reports/integrations) report for a count, then check the products you changed most recently |
| Retry one push from the badge | Fix what the message names and save the product |
| Retry every failed push at once | Save the account's [settings](/pim/integrations/settings) and answer `Re-sync now` |
| Read the messages a product got last week | Nothing. The panel keeps the last attempt only |
| Read the full text of a message the panel shortened | Nothing. Fix the 5 it shows you and save, and the rest arrive next |
| Get emailed when one product fails | Nothing. Open the product and read the badge |
| Filter or sort your `Products` table by sync state | Nothing. The state is on the product editor only |

## What the panel keeps

### The panel keeps the last attempt and nothing before it

Every push overwrites what the push before it left on your product. So a product that failed twice for two different reasons shows you the second reason, and the first is gone.

That matters most when you fix one thing and something else fails behind it. A `Failed` badge that comes right back after your save is usually a second problem. Read the message again instead of assuming your fix did not take.

### A message clears itself when the next attempt is clean

Nothing in the PIM clears a message for you, and there is nothing to dismiss. Fix the value, save, and the message goes when the push that follows says nothing about it.

The same is true the other way. A message the integration sent back clears on the next pull that finds the value healthy. So a listing you fixed in Merchant Center or in Seller Central goes green here on the next pull and not before.

## When something goes wrong

### A red badge that will not clear

Work down these four in order. The first one that applies is your answer.

| Check | What it means if it is true |
| --- | --- |
| `Sync status` reads `Needs re-authentication`, `Account error`, `Account paused` or `Account disconnecting` | Fix the account first. Nothing you change on the product will move it |
| The message names a field you did not change | That is a second problem the first one was hiding |
| The message names a setting | Change it in [settings](/pim/integrations/settings) and answer `Re-sync now` |
| The message names something on the integration | Fix it there. The next pull brings the verdict back |

### An orange badge after you fixed it

Save the product again. A warning is written by a push, so it stays on your product until the next push replaces it. A product you edited in another integration's admin has not had a push since.

If it is still there after a save, read it again. The two warnings that look identical before and after a fix are a price that still resolves to nothing and an image the integration still will not take.

### Nothing tells you when it clears

A badge that goes green is the only notice you get, and you have to be looking at the product to see it. There is no message anywhere in the app, because the PIM tells you things by email and a product that failed to publish sends none.

What does send you an email is the connection itself. Three things come to you that way: a pull that keeps failing on an account, an authorization that expired, and a currency that does not match. You control all three under `Notifications` in your settings, in the group `Integrations & Sync`, as `Sync errors` and `Connection issues`. You can turn either switch off there.

## Where to go next

<Columns cols={2}>
  <Card title="Push" icon="upload" href="/pim/integrations/push">
    What starts a push, what each integration gets, and the switch that stops one.
  </Card>

  <Card title="Pull" icon="download" href="/pim/integrations/pull">
    What comes back the other way, and what each note on a field did to your value.
  </Card>

  <Card title="Settings" icon="sliders-horizontal" href="/pim/integrations/settings">
    The price chain, the identifier sent as a SKU, and the re-sync that reruns them.
  </Card>

  <Card title="Integrations" icon="plug" href="/pim/integrations">
    Reconnecting, pausing and deleting an account, and what each account state stops.
  </Card>
</Columns>
