> ## 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.

# Push

> A push is the PIM sending one of your products out to a connected integration, which happens on its own a few seconds after you save an edit.

A push is the PIM sending one of your products out to a connected integration, so what sells there matches what you typed here. You never start one. You edit a product, you save, and a few seconds later the PIM writes that product to every integration that can take it.

That is what keeping a catalog in one place buys you. You fix a price once and every store you sell on gets the new one, instead of opening one admin panel after another and hoping you did not miss the last. A push sends the thing you changed along with everything else that integration accepts, so a listing is never left half updated.

There is no Push screen. You watch a push from the row of integration logos at the top of the product editor, next to the title. Hover over one and a small panel opens with that account's status and its timestamps. Inside that panel is a switch called `Sync`, and it decides whether your product publishes there at all.

That switch is the only thing on a product you use to steer a push. Everything else on this page is the PIM working while you do something else, and what it tells you when it does.

## Before you start

| Your role | What you can do here |
| --- | --- |
| Admin, Manager, Editor | Edit products, which is what starts a push, and turn `Sync` on or off for one product on one integration |

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

<Warning>
  Turning `Sync` off on a product of yours that is already live can delete your listing. There is no undo on either side, so read the answer the dialog over the page pre-selects before you confirm.
</Warning>

## How to take one product off one integration

<Steps>
  <Step title="Open the product">
    Go to `Catalog` in the sidebar, which opens on the `Products` table, and click your product's row. The editor opens, and along its top row, beside the title, is one logo for every integration you have connected.
  </Step>

  <Step title="Open the integration's panel">
    Hover over the logo of the integration you want to change. A panel opens listing every account you have on that integration, each with its own status.
  </Step>

  <Step title="Turn the switch off">
    The switch labeled `Sync` is next to the account's name inside the panel you just opened. Click it.
  </Step>

  <Step title="Say what happens to the live listing">
    If your product is already published on that account, a dialog opens asking whether to stop syncing with it. Pick one of the answers it gives you and click `Stop syncing`.
  </Step>
</Steps>

That is the whole flow. The badge on that logo reads `Removing…` while your listing comes down, then settles on `Sync off`, and a small message says `Syncing disabled`. Turn the same switch back on and your product publishes again, with nothing to confirm.

Everything below explains what starts a push, what each integration gets, and what the badge is telling you. You do not need any of it to publish, because publishing is what already happens when you save.

## Every option in detail

### What starts a push

**Editing any part of a product starts a push.** The parts are wider than the product form. Each one queues your product on every integration that can take it.

| What you changed | What that covers |
| --- | --- |
| The product | Its title, description, status, slug, type and condition |
| A variant | Its options, its price, its stock, its weight and its dimensions |
| An identifier | Its SKU, barcode, part number or ISBN |
| A brand or a category on the product | The taxonomy the product is under |
| A feature or a specification | The structured content under it |
| A tag | One label |
| An asset assignment | The images and files attached to it |
| A per-currency price override | The price you set in a currency that is not your organization's |

**Two other things you click start a push as well.** Turning a product's `Sync` switch on publishes your product to that account right away. Saving an account's settings gives you `Re-sync now`, which queues every product already on that account at once, and [settings](/pim/integrations/settings) covers what that costs you.

**A push can also start with no one clicking anything.** Each time an integration finishes reading, it queues every product of yours whose SKU is missing over there. That is how your catalog turns up somewhere without you editing a thing. Amazon is the one that never does it, and [integrations](/pim/integrations) explains why.

### How long an edit waits

Every edit of yours waits 5 seconds before it goes anywhere, and each new edit restarts the wait. So 10 changes to one of your products inside a minute produce one push, 5 seconds after the last of them. A burst of your typing should not become a burst of writes on a live store.

Both of those skip the wait. A switch you turn on and a `Re-sync now` you confirm are queued immediately.

### What stops a push before it starts

Three things have to be true at the moment you save, or nothing is queued at all.

| What has to be true | What it rules out |
| --- | --- |
| The account is connected | A paused account, one in error, and one waiting to be re-authorized all queue nothing |
| The integration can take products | A connection that takes no product push is skipped |
| The product's `Sync` is on for that account | A product you switched off there is never queued for it again |

None of the three tells you it happened. The badge is where you notice, and an account state that is stopping everything shows up on the [integrations](/pim/integrations#what-each-account-state-stops) screen, not on the product.

### Reading the panel behind a logo

Hovering one of the integration logos at the top of the product editor opens the same panel for every integration. It is the only place your push reports on itself. One section per account, so a store you connected twice gives you two.

| Row | What it tells you |
| --- | --- |
| `Sync status` | Where your product stands with the PIM, in the same words the badge uses |
| `Integration status` | What the integration itself says about the listing |
| `Variant status` | One line per variant, with its SKU and what the integration says about that one |
| `Listed` | How many of your variants got there. It appears only where one variant is one listing, on a product with more than one |
| `Last push` | When the PIM last wrote this product to that account |
| `Last pull` | When it last read from it |
| `Restrictions` | A rule on the integration is stopping this product from being shown |
| `Push issues` | One line for each field the last push could not send as it stood |
| `Advisories` | One line for each field that needs looking at but stops nothing |
| `Pull error` | The last read failed on this product, and this is the reason |

Click the logo instead of hovering it and your product opens in that integration's own admin, in a new tab. That is where you edit the listing on the integration's own side. A product of yours that has never been pushed has nothing to open, and the logo does nothing.

### Reading the badge

A colored dot appears on each of those logos at the top of the editor, and its label is the first line of the panel you open. These are the ones a push produces.

| Badge | Where your push is |
| --- | --- |
| `Not in integration` | Nothing is queued, and the product has never gone to that account |
| `Pending creation` | Queued, and the integration does not have it yet |
| `Creating…` | Being written there for the first time |
| `Pending update` | Queued, and the integration already has it |
| `Updating…` | Being rewritten |
| `Synced` | The integration accepted your last push |
| `Pending removal` | A removal is queued and has not run yet |
| `Removing…` | Being taken off the integration |
| `Sync off` | You switched this product off for that account |
| `Failed` | The last push was rejected, and the panel names the reason |
| `Blocked` | A rule on the integration stopped the push before anything went out |
| `Needs attention` | The push went through, and the integration complained about part of it |
| `2 variants failed` | The product went through and that many of its variants did not |

A logo with several accounts behind it shows you the worst of them, so a green dot means every account is clean and one red account turns the dot red. Open the panel to see which one it is.

<AccordionGroup>
  <Accordion title="The badges that are about the account and not about your product">
    `Needs re-authentication`, `Account error`, `Account paused` and `Account disconnecting` all mean the connection itself is the problem, so nothing you change on the product will move them. Fix the account first, on the [integrations](/pim/integrations) screen, and the product continues where it left off.

    `Sync off` beats all four. A product you switched off reads `Sync off` even on an account that is paused, because you already decided that product does not go there.
  </Accordion>

  <Accordion title="The badges that come from reading and not from publishing">
    The same dot also shows what the last read found. So you may see a badge that has nothing to do with your push, and [pull](/pim/integrations/pull) explains every one of those.
  </Accordion>
</AccordionGroup>

### Turning `Sync` off, and what the dialog asks

The `Sync` switch is beside an account name in the panel behind an integration logo, and it starts on everywhere. An account you have never touched gets your whole catalog, so this switch is only ever something you turn off.

The dialog only opens when your product is genuinely live on that account. Switching off something that never went to the integration asks you nothing, and neither does switching one on.

It names the integration and the account, so you know which of your stores you are about to change, and it gives you up to three answers as radio buttons.

| The answer | What happens on the integration |
| --- | --- |
| `Delete it` | The listing is removed |
| `Archive it` | The listing is hidden and stays in the store |
| `Leave it as it is` | The listing stays live and the PIM stops touching it |

The answer that arrives pre-selected is the one that account is already set to use. It comes from `When a product is deleted` in the account's settings. So an account you set to archive pre-selects `Archive it`, and one no one has touched pre-selects `Delete it`. Change it in [settings](/pim/integrations/settings) and you change what this dialog picks for you first.

You only get the answers that integration actually runs. Amazon has no archived state for an offer, and Google has none either. Both give you two answers instead of three, and neither adds a third that would delete with no warning.

<Accordion title="What leaving a listing alive really costs, integration by integration">
  `Leave it as it is` does not mean the same thing everywhere, and the dialog raises a line under the answer where it does not.

  On Google the listing stops showing now, and Google removes it entirely within 30 days, because a feed nothing refreshes runs out. That is the note the dialog raises. On Shopify, Amazon, Square and BigCommerce the listing simply stays as it is, so the dialog says nothing.
</Accordion>

Once you confirm, the badge goes to `Removing…` and a message reads `Syncing disabled`. Only one switch works at a time: while one is saving, the others in your panel are locked until it finishes.

### Turning `Sync` back on

Turning it back on queues your product for that account immediately and asks you nothing. If the removal has not finished yet, turning the switch on cancels it and your product is republished instead.

Nothing announces the cancellation. Your badge simply stops reading `Removing…` and moves to `Pending update` or `Pending creation`.

### Taking a whole selection off at once

Select rows in the `Products` table under `Catalog` and a button called `Update integration sync` appears in the bulk toolbar along the bottom of the page. It also appears on the `Brands` and `Categories` tables, and only when one of your connected integrations can actually take that kind of record.

The dialog gives you one row per integration, because being published is a per-integration question: the same product can be live on one store and never pushed to another. Each row has three choices.

| The choice | What it does to your selection |
| --- | --- |
| `Leave unchanged` | Nothing on that integration. This is where every row starts |
| `Turn sync on` | Starts publishing everything in the selection that was switched off |
| `Turn sync off` | Stops publishing, and asks under `When switching off` what happens to the live listings |

A row shows you a count only once you have chosen something, reading how many of your items will start or stop syncing. `Leave unchanged` shows nothing, because a decision you have not made has nothing to count. `Apply` stays off until you touch at least one row.

### Switching a brand or a category off

Open a brand or a category from `Catalog` and the same switch is there, in the same panel behind the same row of integration logos. It works the same way with one difference: you get one answer, `Delete it`. The record the PIM created over there has no life of its own, so there is nothing to archive.

It also appears on fewer integrations, because an integration has to have that kind of record before there is anything to switch.

| Integration | Products | Brands | Categories |
| --- | --- | --- | --- |
| Shopify | Yes | Yes | Yes |
| BigCommerce | Yes | Yes | Yes |
| Square | Yes | No | Yes |
| Amazon | Yes | No | No |
| Google | Yes | No | No |

Where a cell says no, the integration has no such record. Amazon treats a brand as one attribute on a listing, and Square does the same, so [brands](/pim/catalog/brands) works through what yours becomes on each one.

### Limits

| What | Limit |
| --- | --- |
| How long an edit waits before it is sent | 5 seconds |
| How long a listing you left alive lasts on a feed integration | 30 days |
| Fields you can keep back from one integration | None. The switch is per product |

### What a push cannot do

| You cannot | Do this instead |
| --- | --- |
| Send one product to one integration on demand | Edit the product, or re-sync the whole account from its [settings](/pim/integrations/settings) |
| Keep one field back from one integration | Turn `Sync` off for the whole product on that account |
| Schedule a push, or choose when one goes out | Nothing. It goes 5 seconds after your last edit |
| Stop an integration reading from you while you stop publishing to it | Pause the whole account, which [integrations](/pim/integrations) covers |
| Undo a push, or put a listing back the way it was | Edit the product again and let the next push overwrite it |
| Retry a failed push from the badge | Fix what the message names, then save the product |

## What each integration gets

What an integration keeps decides the shape of your push. An integration that stores product content gets your product itself. One that sells against a listing someone else owns gets your offer against that listing. One that only advertises gets an offer that has to be complete on its own, because there is nothing over there to fall back on.

| What the PIM sends | Shopify | BigCommerce | Amazon | Square | Google |
| --- | --- | --- | --- | --- | --- |
| Title and description | Yes | Yes | No | Yes | Yes |
| Images | Yes, plus video and 3D models | Yes | No | Images only | Links it fetches itself |
| Specifications | Yes, as metafields | Yes, as custom fields | No | No | Yes, as product details |
| Brand | Yes, as a collection | Yes, as a brand of its own | No | The primary brand, as a custom attribute | The primary brand |
| Categories | Yes, as collections | Yes, into its category tree | No | Yes, as Square categories | Your category path, as product types |
| Price | Yes, and per market | Yes | Yes | Yes | Yes |
| Compare-at price | Yes | Yes | No | No | Yes |
| Cost | Yes | Yes, for reference only | No | On a Square Retail or Restaurants Premium plan | Yes |
| Weight and dimensions | Yes | Yes | No | No | Yes |
| Stock | Into 2 locations the PIM creates | Into 2 locations, or one combined total | Merchant-fulfilled offers only | Into 2 locations the PIM creates | As an availability state, never a number |
| Condition | Yes, as a metafield | Yes | Yes, on every offer | No | Yes |
| The link from your SKU to an ASIN | Not applicable | Not applicable | First push only | Not applicable | Not applicable |

<Note>
  Amazon in the PIM is offer-only. Your push sends the condition, the price, the link from your SKU to the ASIN on the first push, and a quantity on listings you ship yourself.
</Note>

**Shopify takes one product at a time.** Each edited product is its own write, so one product being rejected leaves the rest of your catalog moving.

**BigCommerce, Square, Amazon and Google gather an account's pending work and send it together.** That is why a rejection shows on one badge instead of stopping everything behind it.

**Square takes the whole item and all of its variations in one write.** That write replaces the variation set, so a variation you deleted here disappears there too.

**Google rejects an incomplete offer before it sends one.** It needs a title, an image, a price, a usable SKU and an address on your own website. An offer missing any of them is kept back, with the reason on your product. Google would otherwise accept it and reject it minutes later, where you cannot see.

### Where your brands and categories go

A brand and a category of yours can go out as records of their own. Shopify gets a collection for each. BigCommerce gets a real brand and a real node in its category tree. Both are pushed and reconciled separately from your products inside them.

Everywhere else they ride inside the product push instead, as an attribute on the listing or as the integration's own category created alongside the item. Nothing is lost either way, and the difference decides whether you get a record you can open over there.

### Two things that are true of every push

**Emptying a field in the PIM empties it on the integration.** A push does not skip a field you cleared. It sends the empty value deliberately, so a description you deleted here is a description gone there. The one exception is a field the last read had to reject. That one is kept back so your trimmed copy never overwrites the original, and [pull](/pim/integrations/pull) explains when the hold lifts.

A push sends the price the account calculates, not the number in your catalog. The price source chain, the adjustment and the MAP floor all run before anything leaves. So two of your accounts can get two different prices for the same variant on the same day, and [settings](/pim/integrations/settings) is where you build that chain.

## When something goes wrong

### A push was rejected

A rejected push never changes your product in the PIM. Your catalog is exactly what you saved, and the only thing that failed is the copy going out.

The badge reads `Failed`, and the panel behind the logo gives you the reason under `Push issues`. Fix what it names, save your product, and the next push goes on its own.

The PIM retries a temporary problem for you before it gives up. A store that went briefly unreachable, a rate limit, a request that timed out: your badge stays on `Pending update` while it tries again. `Failed` means it stopped trying, so the answer to one is always to change something and never to wait.

`Needs attention` is the softer version. The push went through and the listing is live, and the integration complained about part of what you sent. Your panel lists those under `Advisories`.

Every message names the integration that produced it, so you always know which store to open. What each kind of message is asking you to change, and what every integration insists on before it takes a product at all, are worked through in [sync issues](/pim/integrations/sync-issues#what-a-message-is-asking-you-to-change).

### What sends you an email and what does not

A product of yours that fails to publish never emails anyone. The badge is the only place it shows, which matters if you edit in bulk and walk away.

An email arrives when your connection itself is in trouble, and it says the PIM will retry on its own. You control those under `Notifications` in your settings, in the group named `Integrations & Sync`, with the switch called `Sync errors`. Email is the only way the PIM tells you anything, because there is no message center anywhere in the app.

### A canceled removal tells you nothing

A removal you cancel by turning `Sync` back on leaves nothing behind to say it was canceled. Your badge moves off `Removing…`, and that is the whole of the notice you get.

So check the badge after you flip a switch twice. It is the only place the PIM will confirm which of your two clicks counted.

## Where to go next

<Columns cols={2}>
  <Card title="Settings" icon="sliders-horizontal" href="/pim/integrations/settings">
    The chain that builds the price a push sends, and the re-sync button.
  </Card>

  <Card title="Pull" icon="download" href="/pim/integrations/pull">
    What comes back the other way, and the field a rejected read keeps shut.
  </Card>

  <Card title="Products" icon="package" href="/pim/catalog/products">
    The editor a push starts from, and everything else in the top row of it.
  </Card>

  <Card title="Integrations" icon="plug" href="/pim/integrations">
    Accounts, destinations, and what each connection is allowed to send.
  </Card>
</Columns>
