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

# What Repricer writes

> Repricer sends your new prices back to a sales channel and never touches a title, a photo or a stock number, so your listing stays as you wrote it.

Every run the Repricer makes ends the same way. It calculates one price for one of your listings. When that price is different from the one you have, it sends your new price to the sales channel.

Prices are all it writes. Your title, your pictures, your description and your stock stay yours, and nothing the Repricer does changes any of them. The one thing it sends that is not a price is your cost, and only to a Shopify store.

You get no screen for sending and no button that starts it. What you get instead are two columns on your listings table, which you open with `Listings` in the sidebar on the left. `Target` is a price the Repricer has decided and the channel does not have yet. `Last Submitted` is the last time a channel accepted a price for that listing.

## Before you start

### What your role lets you do

| What you want to do | The lowest role that can |
| --- | --- |
| Read `Target` and `Last Submitted` on your listings table | `Analyst` |
| Type a `Manual Price` on a listing's `Pricing` tab, which goes out as typed | `Editor` |
| Pause a listing, which stops anything going out for it | `Manager` |
| End `Preview Mode`, which is what starts your prices going out at all | `Admin` |

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

### Nothing goes out until you end `Preview Mode`

<Warning>
  A connected account starts in `Preview Mode`, where the Repricer calculates prices and sends none of them. Going live cannot be undone, and every price already calculated goes out as soon as you do.
</Warning>

`Go Live`, on the `Preview Mode` banner above every page, is what ends it, and only an Admin gets that button. [Getting started with Repricer](/repricer/index) has the whole setup, which finishes on that click.

## How to check whether a price was sent

<Steps>
  <Step title="Open your listings table">
    Click `Listings` in the sidebar on the left. Use `Search` in the toolbar above the table to find the row you are asking about.
  </Step>

  <Step title="Read the target price on that row">
    `Target` is a price the Repricer decided and the channel does not have yet. An empty `Target` means nothing is waiting, because the price on the channel is already the one your strategy wants.
  </Step>

  <Step title="Read the date beside it">
    Scroll right to `Last Submitted`, among the dates at the end of your row. It is the last time a channel accepted a price for this listing, and it stays empty until one does.
  </Step>

  <Step title="Open the listing for all three dates together">
    Click the row. The dialog opens over the page on the `Overview` tab, where `Last synced`, `Last repriced` and `Last submitted` are together under `Last Activity`.
  </Step>
</Steps>

An empty `Target` with a recent `Last Submitted` is the answer you want: your price went out and the channel has it. Everything below is the detail, on which prices go out, how long a channel takes to confirm one, and what to do when it never does. You need none of it day to day.

## Every option in detail

### What goes out with a price change

A price change is one of your listings and one new price. Up to three prices go inside it, and the first one always does.

| What goes out | When it is part of the change |
| --- | --- |
| Your selling price | Always. This is the price a shopper pays |
| Your business price | On an Amazon account with [B2B pricing](/repricer/strategies/b2b-pricing) turned on, and only when that price moved too |
| Your compare price | On a store of your own that shows one, set on the listing's `Pricing` tab |

All three go in one message, so your listing never gets its selling price now and its business price later. [Pricing on a listing](/repricer/listings/pricing) has the `Compare Price` field and what puts a number in it.

### What each sales channel takes

Which of those three actually goes out depends on where your listing sells, because not every channel has all three. You set none of this. A price a channel has no field for is never calculated in the first place, so it never appears on your listing either.

| Sales channel | Selling price | Business price | Compare price |
| --- | --- | --- | --- |
| Amazon | Yes | Yes | No |
| Walmart | Yes | No | No |
| Shopify | Yes | No | Yes |
| BigCommerce | Yes | No | Yes |
| eBay | Yes | No | No |
| Square | Yes | No | No |

**A business price is an Amazon idea.** Amazon Business is a separate set of buyers, and you give them a price of their own.

**A compare price is a storefront idea.** A crossed-out price beside what you charge is something a store shows shoppers, and a marketplace has nowhere to put one.

### What the Repricer never writes

**Nothing about the item itself goes out.** Your title, your description and your pictures are read from the channel and never written back. So are your brand, your barcode, your condition, your product type and your category.

Change any of them on the channel and the next sync brings your new value here. [What Repricer reads](/repricer/integrations/pull#what-a-sync-brings-in) covers everything one sync brings in.

**Your stock is never written either.** The Repricer reads what you have and prices around it, and it has nothing that sets a quantity. So a price change can never take one of your items out of stock or put one back.

**Your cost is the one exception.** It goes out only to a Shopify store, and only after a price change. The Repricer copies the `Cost` on your listing across to the same item in Shopify, so the two match.

<Accordion title="How your cost stays the same in the Repricer and in Shopify">
  Cost moves in both directions on a Shopify store, and which direction runs depends on which side has a number.

  | What you have | What happens |
  | --- | --- |
  | A cost in Shopify and an empty `Cost` here | The next sync fills your `Cost` in from Shopify |
  | A `Cost` you typed here | It goes to Shopify after the next price change on that listing |
  | A `Cost` you cleared here | The cost in Shopify is cleared too, after the next price change |
  | A cost in Shopify you changed there | Your `Cost` here stays as you typed it, and goes back to Shopify over it |

  Nothing copies while your PIM manages the listing, because the PIM owns cost on both sides once the two products are linked. [The PIM connection](/repricer/integrations/pim) covers which fields the link takes over.
</Accordion>

### When a price goes out

The Repricer looks for your prices to send every minute, so one it has just decided is usually on its way inside a minute or two. You have no schedule to set and nothing to press.

Sending covers one of your accounts and one region at a time. A strategy change that moves 4,000 listings at once takes longer to clear than a single price does. The oldest decision goes first.

**Only your newest price per listing is ever sent.** A listing priced twice before the first price goes out sends once, at the second price. The first is dropped with no message, and its row stays on [pricing activity](/repricer/pricing-activity), which records every decision.

**A price goes out only while your connection is healthy.** Your region is switched on, your account is switched on, the connection works, and your subscription is running. Those are the same four conditions a sync needs, and [what Repricer reads](/repricer/integrations/pull) covers where each switch is.

### What stops a price going out

`Preview Mode` is the state every connected account starts in, and it is the one thing that stops a price the Repricer has already decided. You get a `Preview Mode` banner above every page while an account is still in it. Everything else stops the price being decided at all, and [how a price is decided](/repricer/how-pricing-works) covers all of those.

<Accordion title="What Preview Mode looks like while it is on">
  Preview is per connected account, so one of your accounts can be live while another still calculates. On an account in preview the Repricer does everything except the last step.

  | What you see | What it does |
  | --- | --- |
  | `Target` on your row | Fills in with the price that would have gone out |
  | `Last Repriced` on your row | Moves every time a new price is decided |
  | `Last Submitted` on your row | Stays empty for as long as that account is in preview |
  | `Pricing Activity` in the sidebar | Stays empty. A price that is never sent gets no row |

  Those two dates together are the quickest way to tell preview apart from a problem. A `Target` filling in with `Last Submitted` empty is preview working exactly as it should.
</Accordion>

Beyond preview, the usual reason nothing goes out is that nothing was decided. Most runs end with your price exactly where it was, which is the normal outcome for most listings most of the time.

A listing you paused is the one case worth naming here. It never gets a price calculated, so nothing is ever sent for it. `Repricing Status` on your row reads `Paused`, and `Pause Repricing` on that listing's `Pricing` tab is the switch.

### Limits

| What | Limit |
| --- | --- |
| Time between rounds of sending | 1 minute |
| Tries before one price change is given up on | 3 |
| Times an unconfirmed price is sent again | 5 |
| Time between those tries | 2 hours |
| How long the resending runs for | 10 hours |
| Time before an unsent price clears from `Target` | 2 hours |
| Prices that go out in one change | 3 |
| Integrations you can put live at once | 50 |

### What writing cannot do

| You cannot | Do this instead |
| --- | --- |
| Send a price yourself, or push one listing now | Wait. A decided price is on its way inside a minute or two |
| Send a price your strategy did not decide | Type it into `Manual Price` on the listing's `Pricing` tab, which goes out exactly as typed |
| Write a title, a picture, a description or a stock number | Change it on the sales channel, and the next sync brings it here |
| Send a compare price to a marketplace | Nothing. Only a store of your own has a crossed-out price |
| Put an account back into `Preview Mode` | Pause the account on your [integrations](/repricer/integrations) screen, which stops it being read as well |
| See a list of the price changes that failed to send | Read `Last Submitted` on your row, which moves only when one is accepted |
| Get a record of every attempt, or a reason one failed | Nothing keeps one |

## How the channel confirms a price

A sales channel accepts a price change first and shows your new price to shoppers after that. On some channels the two happen in the same second. On Amazon a couple of hours between them is normal.

The Repricer never assumes your price was applied. It waits for a sync to read the same price back off the channel, and until then it keeps showing you the price it is waiting for.

### What each date and column tells you

All four of these are columns on your listings table, which you open with `Listings` in the sidebar on the left.

| What you read | What it tells you |
| --- | --- |
| `Last Repriced` | When the Repricer decided your new price |
| `Last Submitted` | When the channel accepted it |
| `Target` | The price the channel has not confirmed yet |
| `Price` | What the channel is charging now, read back on the next sync |

Read those four in order and you get the whole story of one price change. `Target` fills in the moment your price is decided, `Last Submitted` moves when the channel takes it, and `Target` empties once `Price` comes back matching. The three dates are together under `Last Activity` on your listing's `Overview` tab.

### Why a price is not sent twice while it waits

Hover the `Target` cell on your listings table, on a row that is waiting. You get `This price change was already submitted and is waiting for the sales channel to confirm it. No duplicate change is needed.`

That is the Repricer telling you it calculated the same answer again and had nothing new to send.

That is why a busy listing never floods a channel with your prices. A price only goes out when it is different from both the price you have and the price already waiting.

### When the channel never confirms

The Repricer sends your price again every 2 hours, up to 5 times. If the channel still has not applied it after about 10 hours, three things happen at once. `Target` on your listings table clears, that price change is given up on, and you get an email.

The email names your SKU and the price that was tried, and asks you to check that listing on the sales channel yourself. It is the only warning you get, and nothing on your row says it happened. Open the item on the channel, and where the price there is wrong, fix it there.

Your listing goes on as normal from there. The next run calculates your price from whatever the channel is charging now, and sends it when the answer is different.

## When something goes wrong

### `Last Submitted` has never filled in

`Last Submitted`, among the dates at the right of your listings table, stays empty until a channel accepts a price. Five things keep it that way.

| Why | What to do |
| --- | --- |
| The account is still in `Preview Mode` | An Admin ends it with `Go Live` on the banner at the top of the page |
| This listing has never had a price change | `Last Repriced` is empty too, and [how a price is decided](/repricer/how-pricing-works) covers what stops one |
| The listing is paused | `Repricing Status` on your row reads `Paused`. Turn `Pause Repricing` off on the listing's `Pricing` tab |
| The account or the region is switched off | An Admin turns it back on under `Active regions`, inside the account on `Integrations` |
| The connection needs authorizing again | The card on `Integrations` reads `Needs Attention`, and [sync issues](/repricer/integrations/sync-issues) covers what to do |

### `Target` is showing a price the channel does not have

This is the normal state for the first couple of hours after a change, so start by reading `Last Submitted` on the same row of your listings table.

| What you see | What it means |
| --- | --- |
| `Last Submitted` is recent | The channel took your price and has not applied it yet. Give it a couple of hours |
| `Last Submitted` is much older than `Last Repriced` | Your price was decided and never accepted. It clears itself 2 hours after the decision |
| `Last Submitted` is empty | Nothing has ever been sent for this listing, and the section above covers why |

### A price change was dropped and nothing said so

Some of your price changes cannot be sent, because the channel rejects them for a reason on its own side. The Repricer tries 3 times, gives up, and writes nothing you can read.

What you get on your listings table is a `Target` that still shows its price while `Last Submitted` stays where it was. About 2 hours after the decision your `Target` clears on its own. So a row that fixed itself, with no shopper ever seeing the new price, was probably this one, and the next run decides again from your current price.

Where it keeps happening on one listing, look at that item on the channel. A listing the channel has closed, a price outside a limit that channel sets, or an item needing something filled in there are the usual reasons.

### The price on the channel is not the price you expected

| What you see | What it means |
| --- | --- |
| The channel price is your `Manual Price` | A manual price on the listing's `Pricing` tab goes out exactly as typed, and skips your strategy, your limits and your rounding |
| The channel price is your `MAP` or your `MSRP` | One of the two `Always price` switches is on, set on the strategy's `Safety Nets` step |
| The channel price is above or below what your strategy asked for | A floor or a cap moved it, and [pricing on a listing](/repricer/listings/pricing) lists all seven in order |
| The channel price changed and no row explains it | Somebody changed it on the channel. The next sync brings that price here, and the run after it decides again |

## Where to go next

<Columns cols={2}>
  <Card title="What Repricer reads" icon="download" href="/repricer/integrations/pull">
    The other direction, on its own clock, and everything it brings in.
  </Card>

  <Card title="How a price is decided" icon="route" href="/repricer/how-pricing-works">
    The nine parts behind every price that goes out, in the order they run.
  </Card>

  <Card title="Pricing activity" icon="history" href="/repricer/pricing-activity">
    The record of every price change, with the reason behind each one.
  </Card>

  <Card title="Sync issues" icon="triangle-alert" href="/repricer/integrations/sync-issues">
    What a broken connection means, and how you get your prices moving again.
  </Card>
</Columns>
