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

# Bulk actions

> A bulk action runs one change across every listing you selected, so a whole page of them moves onto a new strategy or stops repricing at once.

A bulk action makes the same change to many listings in one pass. You check the rows you want, pick the action, and it runs on all of them, whether that is 12 listings or 40,000.

There are two of them, and both are repricing settings. One assigns a strategy, which is the set of rules that decides what price the Repricer works toward. The other pauses repricing, which stops the Repricer from changing those prices, and the same button starts it again. Nothing else about a listing changes, so your costs, your price limits and the price itself are never touched here.

You get both on your listings table, which you open from `Listings` in the sidebar. Check the box at the left edge of any row and the toolbar above the table turns into the bulk bar. Your count is on the left, and `Assign Strategy` and `Pause Repricing` are on the right.

Most people get there right after filtering. A filter gathers the listings that need the same decision, and a bulk action is how you give it to all of them at once.

## Before you start

### What your role lets you do

| Role | What you get on the listings table |
| --- | --- |
| Admin | Checkboxes, and both bulk actions |
| Manager | Checkboxes, and both bulk actions |
| Editor | No checkboxes. You can still edit one listing at a time |
| Analyst | No checkboxes, and nothing to change |

Below Manager you get no checkboxes on the table at all, so nothing is grayed out for you to wonder about. Roles are set in [team, roles and permissions](/team#what-each-repricer-role-can-do).

<Warning>
  A bulk action has no undo. Nothing saves the strategy or the repricing status a listing had before, so the count in the bulk bar is the count that changes for good.
</Warning>

<Warning>
  Only a `Select all` of more than 500 listings asks you to confirm. Every other bulk action runs the moment you pick it, so read the count in the bulk bar first.
</Warning>

## How to run a bulk action

<Steps>
  <Step title="Open your listings and narrow them">
    Click `Listings` in the sidebar. Above the rows is a toolbar with `Search`, `Columns`, `Filter` and `Density` on it, and [filters](/repricer/filters) is where you build the list you want to act on.
  </Step>

  <Step title="Check the rows you want">
    Check the box at the left edge of each row, or the box in the header row to take the whole page at once. The toolbar becomes the bulk bar and counts what you picked, like `12 selected`.
  </Step>

  <Step title="Extend it to everything your filter matched, if you want">
    With the whole page checked, a `Select all` button appears in the bulk bar with your real total in its label, like `Select all 4,120`. Click it and the count reads `All 4,120 selected`.
  </Step>

  <Step title="Pick the action">
    At the right end of the bulk bar, click `Assign Strategy` or `Pause Repricing`. Each one opens a short menu under the button.
  </Step>

  <Step title="Answer the menu">
    In the `Assign Strategy` menu, click a strategy by name. In the other menu, click `Pause Repricing` or `Resume Repricing`.
  </Step>
</Steps>

That is the whole flow. A message appears right away with your count in it, and your selection clears itself. The message turns into your result when the run finishes, like `Strategy "Summer sale" applied to 12 listings`, and your table refreshes on its own.

Everything below explains the two ways to select, the two actions, and what happens while a run finishes. You do not need any of it for an everyday bulk change.

## Every option in detail

### Selecting rows with checkboxes

Every row has a checkbox at its left edge, and the header row has one that takes every row on the page you are looking at.

Your checks add up across pages. Move to page 2, check more rows, and the count in the bulk bar keeps growing, because paging does not clear what you already checked. Changing a filter does not clear them either, so you can gather rows from three different searches and act on all of them together.

The bulk bar shows your count next to a `Clear` button, and pressing Escape does the same as `Clear`. Your checked rows are also kept in the page address, which is what makes a selection something you can send to a teammate. What a link takes with it, and where it stops, is in [filters](/repricer/filters).

The checkbox is the one part of a row that does not open the listing. Click any other cell and the listing opens instead, so check the box and nothing else.

### Selecting every listing your filter matched

Checkboxes select what you can see. `Select all` selects what your filter matched, across every page, however many that is.

Check the box in the header row at the top of the table so the whole page is picked. If more rows match your filter than the page shows, `Select all` appears in the bulk bar with the total in its label. Click it and your count reads `All 4,120 selected`.

**Use the checkboxes when you can see the rows you mean.** Use `Select all` when your filter already says which listings you mean. It covers every page and takes as many listings as your filter matched, where checking rows yourself stops at 10,000.

On a table with no filter on it, though, `Select all` is every listing you have. Build the filter first, read the number in the button, and then act.

Two things drop a `Select all` back down, and neither one tells you:

- Un-checking any single row takes you back to the rows still checked on the page you are looking at. It does not remove one listing from the total.
- Changing any filter clears the selection completely, so a bulk action never runs on a result set you have not looked at.

### Assigning a strategy to many listings

Click `Assign Strategy` at the right end of the bulk bar and a menu of your strategies opens. Click one by name and it starts running.

The list is not all of your strategies. A strategy is made for one connected account and one region inside it, so the menu offers you the ones that match the rows you checked. It also leaves out any strategy whose account is disconnected, or whose region is turned off. When none of them match your rows, the menu reads `No compatible strategies` instead of listing anything, and [strategies](/repricer/strategies) is where you make one for that account and region.

That scope is also what decides how much of your selection changes:

| How you selected | What the strategy is applied to |
| --- | --- |
| Checked rows | The rows on the strategy's own account and region. The rest are skipped, and the result counts them, like `, 12 skipped (different account or region)` |
| `Select all` | The matching listings on the strategy's own account and region. The rest of what your filter matched is left alone |

So a selection spread across two accounts needs the action run twice, once per account. There is no strategy that covers both.

Each listing you changed shows the new name in its `Strategy` column, and the Repricer prices it from that strategy the next time it looks at the listing. A listing that had no strategy at all starts getting priced.

To change a single listing instead, click its cell in the `Strategy` column and pick from the dropdown that opens there. You can also open the listing and use the `Strategy` section on its `Pricing` tab.

<Accordion title="How the strategy menu is grouped when you have more than one account">
  The menu adds headings only where you need them. With one account and one region, you get a plain list of names. With more than one of either, your strategies are grouped under their account label and their region name.

  A strategy that is the default for its account and region has a small `default` beside its name. Once there are 8 or more in the menu, a search box appears at the top. It matches the strategy name, the account label and the region name.
</Accordion>

### Pausing repricing for a selection

Click `Pause Repricing` at the right end of the bulk bar. The menu you get has two items, `Pause Repricing` and `Resume Repricing`, so this one button covers both directions.

**Pick `Pause Repricing` to take a group of listings out of repricing.** Their `Repricing Status` column becomes `Paused`. The Repricer stops calculating new prices for them and stops sending any. The price on the channel stays where it was, and everything else on the listing goes on updating.

**Pick `Resume Repricing` to put them back in.** The status becomes `Working`, and the Repricer picks those listings up again on its next pass.

Pausing is the safe move when your numbers are wrong and your strategy is not. Use it on a supplier whose costs you have not loaded, or on a promotion you are pricing yourself. It also gives you a way to watch a new region before it prices for real.

To pause one listing on its own, open it and use the `Pause Repricing` switch on its `Pricing` tab.

<Accordion title="What resuming does to a listing that reads Not working">
  `Paused` is the status you set. `Not working` is the one the Repricer sets when it cannot price a listing, and `Manual` is the one it sets when a listing has a manual price on it.

  `Resume Repricing` puts every listing you selected on `Working`, including those two. That fixes nothing on its own. The next time the Repricer looks at the listing, it reads the same missing cost or the same manual price, and puts the status back. Fix what is missing and the status corrects itself.
</Accordion>

### Running a bulk action on a phone

On a narrow screen the bulk bar keeps your count, `Clear` and `Select all`, and the two action buttons collapse into one `Actions` button at the right. Tap it and both are in the menu, each opening the same menu it opens on a wide screen.

### Limits

| What | Limit |
| --- | --- |
| Rows you can check yourself for one action | 10,000 |
| Listings in a `Select all` action | No limit |
| A `Select all` that asks you to confirm first | Above 500 listings |
| Bulk actions running at once | One per organization |

### What a bulk action cannot do

| You cannot | Do this instead |
| --- | --- |
| Undo one | Read the count in the bulk bar before you pick the action |
| Change a cost, a price limit or a price for many listings | Send the new values through an [import](/repricer/uploads/imports), which writes those fields and the strategy too |
| Delete a listing, or create one | Nothing in the Repricer creates or deletes one. Listings arrive from your [integrations](/repricer/integrations) |
| Take one listing out of a `Select all` | Narrow your filter, or check the rows you want yourself |
| Put listings from two accounts on one strategy | Run the action once per account |
| Keep a selection for later | Save the filter as a [saved view](/repricer/saved-views) and select again next time |

## While your action runs

You get one message for the whole run. It appears with your count in it, like `Pausing repricing for 4,120 listings`, stays on screen while the work goes on, and turns into the result when it ends.

Your selection clears the moment the action starts, and not when it finishes. That is on purpose, so nothing is left checked that a second action could run on by accident. The table refreshes itself after that and shows you what actually changed.

You get a `Cancel` in the bulk bar while a run is going. It stops your screen waiting for the answer, and it does not stop the work, which goes on to the end. The message becomes `Operation cancelled.` and the table refreshes, so read the table and not the message to see where it got to.

When a run fails partway, what it finished stays finished. The message turns into the error, the table refreshes so your rows are current, and running the same action again on what is left finishes it. No single listing is ever left half changed.

After any error there is a short wait before you can start another bulk action. Clicking one during that wait gives you `Please wait a moment before retrying.` and nothing else happens.

## When something goes wrong

| Message | What to do |
| --- | --- |
| `Another bulk action is already running. Please wait until it finishes.` | Your own last action has not finished. Wait for its message to turn into a result |
| `Another bulk action is already running for this organization. Please wait until it finishes.` | Someone else on your team is running one. Wait and try again |
| `No compatible listings selected.` | Every row you checked is on a different account or region from the strategy you picked. Pick a strategy from the same account |
| `No listings match the current filters for this account or region.` | Your `Select all` matched nothing on that strategy's account and region. Change the filter, or pick another strategy |
| `No listings match the current filters.` | Your filter matched nothing at all. Loosen it and check the count before you act |
| `The selected listings are not valid.` | You checked more than 10,000 rows. Use a filter with `Select all` instead |
| `You do not have permission to perform bulk actions.` | Your role changed while the page was open. Reload the page |
| `You need an active subscription to make changes.` | Your organization cannot make changes right now. See [billing](/billing) |
| `Could not load the matching listings. Please try again.` | The `Select all` could not gather its rows. Nothing changed, so run it again |
| `Could not start the bulk action due to a temporary issue. Please try again.` | Nothing changed. Run it again |
| `The bulk update failed. Please try again.` | Read the table for what went through, then run it again on the rest |
| `The bulk action timed out before it finished. Some listings may not have been updated.` | A long run ran out of time. Check the table and run it again on what is left |
| `Please wait a moment before retrying.` | The short wait after an error. Try again in a few seconds |
| `An unexpected error occurred.` | Reload the page and read the table before you run anything else |

## Where to go next

<Columns cols={2}>
  <Card title="Filters" icon="funnel" href="/repricer/filters">
    Building the selection a bulk action runs on.
  </Card>

  <Card title="Saved views" icon="bookmark" href="/repricer/saved-views">
    Keeping the filter you act on every week.
  </Card>

  <Card title="Strategies" icon="target" href="/repricer/strategies">
    What you are assigning, and what each one does to a price.
  </Card>

  <Card title="Listings" icon="table" href="/repricer/listings">
    The table itself, and what every column on it means.
  </Card>
</Columns>
