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

# Pricing activity

> Pricing activity is the running list of every price the Repricer has changed for you, one row for each change, with the reason behind it.

Pricing activity is the list of every price the Repricer has changed for you. One row is one change to one listing, newest at the top.

Each row gives you four things: the price before the change, the price after it, the reason the price moved, and the strategy that decided it. Hover over the reason and you get the whole explanation as a sentence, with the prices in it.

Most people open it for one of three reasons. A price is not what they expected and they want to know what moved it. They changed a strategy and want to see whether it is doing what they meant. Or they want to read one listing's price back over the last few weeks.

You will find it under `Pricing Activity` in the sidebar, between `Strategies` and `Reports`. The same rows for a single listing are on that listing's `Activity` tab, and there is a section on that below.

## Before you start

### What your role lets you do

Reading pricing activity is open to everybody. What changes with your role is what you can do about what you read.

| What you want to do | The lowest role that can |
| --- | --- |
| Read every row, and open a listing from one | `Analyst` |
| Change a cost or a price limit on the listing you opened | `Editor` |
| Move that listing onto another strategy, or pause it | `Manager` |

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

## How to find out why a price changed

<Steps>
  <Step title="Open pricing activity">
    Click `Pricing Activity` in the sidebar. The newest change anywhere in your organization is the first row of the table.
  </Step>

  <Step title="Find the listing you are asking about">
    Click `Search` in the toolbar above the table and type the SKU, or part of the product title.
  </Step>

  <Step title="Read what the price did">
    `From` is the price before the change, `To` is the price after it, and `Change` is the difference between the two as a percentage.
  </Step>

  <Step title="Read why it moved">
    `Reason` gives you a short label, such as `Undercut competition`. Hover over that label and a tooltip explains that one change in full.
  </Step>

  <Step title="Open the listing behind the row">
    Click the SKU. The listing opens over the table, in the same dialog you get from `Listings` in the sidebar.
  </Step>
</Steps>

Those five steps are the whole job. Everything below is the detail: what each column tells you, what each of the 13 reasons means, and why a change you were expecting sometimes has no row at all. You need none of it to read one price change.

## Every option in detail

### What each column tells you

The table opens sorted by `Date`, newest first. You can sort on any other column instead, the way [filters](/repricer/filters) describes.

| Column | What it tells you |
| --- | --- |
| `Date` | The day and the time of the change, in your own timezone, with no year on it |
| `Integration` | Which integration the listing sells on |
| `Region` | Which region of that integration, such as one Amazon marketplace or one Shopify store |
| `Connection` | `Active` while that account is connected and that region is switched on, `Inactive` when it is not |
| `Type` | `Consumer` for the price your shoppers see, `Business` for an Amazon B2B price |
| `SKU` | Your own code for the item. Click it to open the listing |
| `Product ID` | The channel's own code, such as an ASIN. Usually a link to the item on the channel |
| `Product Title` | The title as the sales channel has it |
| `From` | The price before the change. Empty on the first price ever recorded |
| `To` | The price after the change |
| `Change` | The difference as a percentage, green going up and red going down |
| `Reason` | A short label for what moved the price. Hover for the whole sentence |
| `Strategy` | The strategy that made this decision |

Two of those columns are not always there. `Connection` starts hidden, and you turn it on under `Columns` in the toolbar. `Type` is not on the table at all until your organization has had one business price change. Until then every row is the same kind, so the column would give you the same word on every one.

`Change` reads `NEW` instead of a percentage whenever `From` is empty. There is no earlier price to measure against on the first row a listing ever gets, so there is no percentage to give you.

<Accordion title="Why the Product ID is sometimes text you cannot click">
  The link opens the item on the sales channel in a new tab. Whether you get one depends on how that channel builds a web address for an item. Where the product ID is the whole address, as an ASIN is, the link is always there.

  Other channels build the address out of a second piece the listing keeps and this table does not read, such as a storefront handle. On those the ID comes out as plain text. Click the SKU to open the listing, and use the `Product ID` link at the top of that dialog, which always works.
</Accordion>

### What each reason means

There are 13 reasons. Every row gets exactly one of them, and the same 13 apply on every integration you sell through.

| Reason | Your price moved because |
| --- | --- |
| `Undercut competition` | Your strategy went under the price it measures you against |
| `Matched competition` | Your strategy set your price to that same price |
| `Priced above market` | Your strategy set your price deliberately above that price |
| `Margin recovery` | The price you are measured against went up, so yours went up behind it |
| `Hit price floor` | Your strategy wanted to go lower and one of your floors stopped it |
| `Hit price ceiling` | Your strategy wanted to go higher and one of your caps stopped it |
| `Protecting profit` | The price stopped where it did to keep the profit your strategy asks for |
| `Can't compete on price` | Competing would have broken one of your limits, so your fallback decided the price |
| `Manual price` | You typed a fixed price onto the listing yourself |
| `No competitors` | There was nothing to price against, so your fallback decided the price |
| `Initial price` | This is the first price recorded for this listing |
| `Seeking Buy Box` | Your price came down one step, looking for the price that wins the Buy Box |
| `Optimizing Buy Box` | Your price went up one step while you were holding the Buy Box |

The label is the short version. **Hover over it for the sentence behind your own change.** That sentence names the price you were measured against and what it was. Then it says what your strategy did with that price, which of your limits changed the answer, and where your price ended up. The sentence is built from that one row, so two rows with the same label can give you two different sentences.

The order that produces all 13 is on [how a price is decided](/repricer/how-pricing-works), which takes the calculation apart part by part.

<Accordion title="Everything a reason tooltip can name">
  The price you were measured against comes out as the Buy Box, the lowest competitor, the lowest FBA offer, or the lowest merchant-fulfilled offer. It can also come out as the marketplace's own price, the Featured Merchant, the market average, the lowest similar offer, the reference price, or your cost.

  A limit that changed your answer comes out as your price floor, your minimum price, your maximum price, MAP, or the recommended retail price ceiling. It can also come out as your MAP-locked pricing, your MSRP-locked pricing, your cost-based price floor, or the price ceiling.

  Which one you get depends on your strategy and on the limits you set. Read [targets and modes](/repricer/strategies/targets-and-modes) for the first and [pricing on a listing](/repricer/listings/pricing) for the second.
</Accordion>

### Narrowing the table to the changes you want

The toolbar above this table is the toolbar above every Repricer table, so `Search`, `Columns`, `Filter` and `Density` all work the way [filters](/repricer/filters#the-toolbar-above-every-table) describes. Three things here are this table's own.

**Six of the columns filter from a list.** `Integration`, `Region`, `Connection`, `Type`, `Reason` and `Strategy` give you dropdowns of answers instead of a box to type in. The other seven take a comparison and a value, so `To` with `greater than (>)` and `50` gives you the changes that ended above 50 in your own currency.

**The `Reason` and `Strategy` dropdowns are built from your own history.** A reason no strategy of yours has ever produced is missing from the list. So is a strategy somebody deleted. A short list there is normal, and it is a faster answer than a long list of things that would match nothing.

**Arriving from the dashboard sets two filters.** The `Price Changes` card on [the dashboard](/repricer/dashboard) opens this table with `Date` on the last 24 hours and `Connection` on `Active`. Open `Filter` in the toolbar and remove them when you wanted everything.

A set of filters you rebuild often is worth keeping. `All Activity` is the view you start on, and [saved views](/repricer/saved-views) is how you add your own.

### Reading one listing on its own

Every listing has an `Activity` tab with the same rows on it, for that one listing. Open the listing from `Listings` in the sidebar, or click a SKU on this table, and click `Activity` in the row of tabs at the top of the dialog.

The tab drops the columns that would say the same thing on every row, so `Integration`, `Region`, `Connection`, `SKU`, `Product ID` and `Product Title` are not there. `Date`, `From`, `To`, `Change`, `Type`, `Reason` and `Strategy` are, and they mean what they mean here.

Two things behave differently there. The total at the bottom of the tab is an exact count, and this table gives you an estimate. The tab also has no saved views, so a filter you set on it lasts until you close the listing and no longer.

**Go to the tab for one item, and stay here for many.** A listing whose price you keep arguing with is easier to read as its own short list. Here the same rows are scattered through everything else your organization did. The `Insights` tab in the same dialog then adds a chart and a count of those changes, covered in [insights](/repricer/listings/insights).

### Limits

| What | Limit |
| --- | --- |
| Rows on a page to start with | 50 |
| Rows on a page in the `Activity` tab | 25 |
| Recent changes read to build the `Reason` and `Strategy` dropdowns | 5,000 |
| How long a change is kept | As long as the listing is on the channel |

### What pricing activity cannot do

| You cannot | Do this instead |
| --- | --- |
| Download this table, or export it to a file | The Repricer's [exports](/repricer/uploads/exports) take your listings out, and price changes are not among the fields |
| See the runs that decided to change nothing | Nothing is written for those. [How a price is decided](/repricer/how-pricing-works) explains what stops a price |
| Get an email when a price changes | Read this table, or the `Activity` tab on the listing you care about |
| Undo a change, or put a price back | Type the price you want into `Manual Price` on the listing's `Pricing` tab |
| Select rows, or run anything across several of them | Open one listing at a time from its SKU |
| Tell whether the sales channel applied the price | Read the `Target` column on your listings table, covered in [listing and repricing status](/repricer/listings/statuses) |

## What a row does and does not tell you

Four things about these rows surprise people the first time. All four come down to the same idea: a row is what the Repricer decided, and a decision is not yet a price on the sales channel.

### A row is written when the price is decided, not when the channel has it

The row appears the moment the Repricer settles on a new price, which is before the sales channel has been told. It also appears on your screen without a reload, with a short highlight on it, so you can leave the table open and watch changes arrive.

So a row here tells you the price went out. It does not tell you a shopper is seeing it. What the channel did with the price is on your listings table, where `Target` on the listing keeps showing it until the channel confirms it. A price that never got applied turns up on [listing and repricing status](/repricer/listings/statuses).

### A run that changed nothing leaves no row

The Repricer looks at your listings far more often than it changes a price, and most of those runs end with your price exactly where it was. None of them is written down here. Every row on this table is a change.

That is why a listing can go two weeks without a row and still be working. Its `Repricing Status` reads `Working`, and the reason nothing moved is that nothing needed to. If you want to know what a strategy would do to your prices right now, the `Preview` step of the [strategy wizard](/repricer/strategies/wizard) estimates it before you save anything.

### One decision on a business price leaves two rows

An Amazon account with [B2B pricing](/repricer/strategies/b2b-pricing) turned on has two prices to keep, and one decision can move both. When it does, you get two rows at the same moment with the same `Reason` and the same `Strategy` behind them. `Type` is what tells them apart, reading `Consumer` on one and `Business` on the other.

Your business price only gets a row when it actually changed. A decision that moved your shopper price and left your business price alone is a single row.

### How far back your history goes

Nothing on this table is thinned out or aged off, so a listing you have had for two years has two years of changes on it. On a long history the `Date` filter gets you to last March faster than scrolling does.

A history only ends when the listing does.

<Warning>
  Delete or close a SKU on the sales channel and the next sync removes that listing here, with every price change it ever had. Put the SKU back and you get a new listing with an empty history.
</Warning>

## When something goes wrong

### The screen says there is nothing here yet

You get one of two messages in place of the table, and which one you get tells you what to do.

| What the screen says | What it means |
| --- | --- |
| `Nothing here yet`, with a `Get Started` button | You have no integration connected. The button opens `Integrations` in the sidebar, and only an `Admin` can go there |
| `Almost there`, with no button | Your integration is connected and no price has changed yet. Syncing and repricing both have to run first |

The second one is the normal state of a new organization for a while. Nothing is wrong and there is nothing to fix.

### A reason or a strategy you have used is not in the filter list

Those two dropdowns are built from your recent changes, so a reason or a strategy that stopped appearing a long time ago drops off the list. A strategy somebody deleted is gone from it for good, even though the rows it made are still on the table.

Search for it instead. `Search` in the toolbar reads the strategy name as well as the SKU, so typing that name finds its rows whether or not the dropdown offers it.

### The total at the bottom has a ~ in front of it

The bottom right of the table reads something like `1-50 of ~12,340`. That `~` marks the total as an estimate rather than a count.

It is close enough to page through and to see roughly how much you have, and it can move by a few rows between one visit and the next. Where you need an exact number, open the listing's `Activity` tab, whose total is counted.

### Messages you can get

| Message | What to do |
| --- | --- |
| `Listing not found` | The listing was removed from the sales channel after this change was recorded. The row stays until the next sync clears it |
| `Failed to load listing details` | Click the SKU again. Reload the page if it happens twice |

## Where to go next

<Columns cols={2}>
  <Card title="How a price is decided" icon="route" href="/repricer/how-pricing-works">
    The order behind every reason on this table, from the competing price to the rounding.
  </Card>

  <Card title="Listing and repricing status" icon="signal" href="/repricer/listings/statuses">
    Where a price that never changed, or never got applied, tells you what it is waiting for.
  </Card>

  <Card title="Insights" icon="chart-line" href="/repricer/listings/insights">
    The same changes as a chart and a count, on one listing at a time.
  </Card>

  <Card title="Filters" icon="funnel" href="/repricer/filters">
    The toolbar above this table, and every comparison you can build on a column.
  </Card>
</Columns>
