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

# Profitability report

> What your listings are making after cost and fees, how the margins are spread across your catalog, and which listings are the thinnest ones.

The profitability report tells you what one sale would leave you, on every listing you have given a cost to. It takes the price you are asking, subtracts what the item costs you, and subtracts the fee the channel takes out of a sale. What is left is your profit, and you get it as money and as a percentage.

Most people open it for one of two reasons. One is to find out whether your prices are leaving you enough. The other is to get the list of the listings that are barely making anything, so you know which ones to work on.

You get eight figures at the top, four bars showing how your margins are spread, a table of your days and a table with one row per listing. Almost all of it describes the prices you are asking right now. Only the table of days counts orders you actually took.

Click `Reports` in the sidebar down the left, then click `Profit`, the second of the six cards. Your report opens in a dialog over the screen, headed `Profitability Report`. Nothing in it changes a price or a listing, so you can open it and click around freely.

## Before you start

### What your role lets you do

Every role reads every number in this report, and nothing here is above your level. Nothing here changes a price, a listing or a strategy either.

What your role decides is whether you can put a listing into the report. A listing counts here once it has a cost on it, and typing a cost needs `Editor`. Roles are set in [team, roles and permissions](/team#what-each-repricer-role-can-do).

### A listing with no cost is left out

Without a cost there is no profit to calculate. A listing with nothing in the `Cost` column of your listings table is in none of the figures you see here, and nothing on the screen tells you it was left out.

An organization where nobody has filled a cost in opens this report with 0 on all eight figures and an empty table at the bottom. Fill a cost in and that listing is counted the next time you open the report. [Cost, fees and profit](/repricer/listings/costs-and-fees#where-your-cost-comes-from) covers where a cost comes from and how to fill in a lot of them at once.

## How to read this report

<Steps>
  <Step title="Open the report">
    Click `Reports` in the sidebar down the left. You get six cards. Click `Profit`, the second one, and your report opens in a dialog over the screen.
  </Step>

  <Step title="Read the figures at the top">
    `Overview` is the heading at the top of the dialog, with eight figures under it. Hover the small info icon beside any of them and you get a sentence saying what that figure counts.
  </Step>

  <Step title="See how your margins are spread">
    `Margin Distribution` is the panel under those figures. It splits your listings into four margin ranges, and the first one, `Negative (<0%)`, counts the listings you lose money on.
  </Step>

  <Step title="Read what your selling came to">
    `Daily Profitability` is the table in the middle of the dialog, one row per day. The dropdown reading `Last 30 days`, in the bar across the top of the dialog, is what decides which days you get.
  </Step>

  <Step title="Bring your thinnest listings to the top">
    `By Listing` is the table at the bottom, and it opens with your best margin first. Click the `Margin` column header once and the order flips, so the listings making you the least come up to the top.
  </Step>
</Steps>

That is the whole report. Close the dialog with the × at the top of it, with the Escape key, or by clicking outside it, and you come back to your six cards.

Everything below explains one piece at a time. The one part worth reading anyway is what the figures at the top are counting, which is further down this page.

## Every option in detail

You get four parts, in this order down the dialog: `Overview`, `Margin Distribution`, `Daily Profitability` and `By Listing`. The sections below follow them in that order.

The date range and the `Integration`, `Account` and `Region` dropdowns are in the bar across the top of the dialog. The three dropdowns narrow all four parts at once. The date range moves `Daily Profitability` and nothing else. [Reports](/repricer/reports) covers what each of them does.

### The eight figures at the top

`Overview` is the heading at the top of the report dialog, with eight figures under it. Each one is a label, a number and a small info icon. Hover the icon and you get a sentence saying what that figure counts and the sum behind it.

| Figure | What it counts |
| --- | --- |
| `Avg. Margin` | Every counted listing's margin, added up and divided by how many there are |
| `Est. Profit` | What one sale of every counted listing would leave you |
| `Total Fees` | The estimated channel fees inside that same sum |
| `Profitable` | How many counted listings make money, over how many were counted, as `125 of 200` |
| `Avg. Profit/Unit` | `Est. Profit` divided by how many listings were counted |
| `Fee Rate` | `Total Fees` as a share of your prices added up |
| `Profit Margin` | `Est. Profit` as a share of your prices added up |
| `ROI` | `Est. Profit` as a share of your costs added up |

**`Avg. Margin` and `Profit Margin` answer the same question two ways.** `Avg. Margin` gives every listing an equal say, so a cheap listing counts as much as an expensive one. `Profit Margin` divides one total by another, so your expensive listings pull it. When those two are far apart, your cheap items and your expensive ones are priced very differently, and `By Listing` at the bottom of the dialog is where you see it.

**`Profitable` is a pair of counts, and the second one is not your catalog.** It is how many of your listings have a cost. So `125 of 200` in an organization with 900 listings means 700 of them are in none of this report.

`Avg. Profit/Unit` is per listing and not per unit sold, whatever the label says. It is `Est. Profit` divided by the number of listings counted, so it tells you what a typical listing of yours makes on one sale. Selling more of anything does not move it.

On a narrow screen the three money figures are shortened to fit, so they read as a rounded figure with a `K` or an `M` on the end. Widen the dialog and you get the exact figure back.

<Accordion title="Why Fee Rate can read 0 when you know the channel charges you">
  You only get a fee estimate on some channels. A listing on a store of your own does not get one. It goes into these figures with its fees at 0, so its profit is your price minus your cost and nothing else.

  So an organization whose costed listings are all on its own stores reads `0%` on `Fee Rate`, and reads a margin better than what it keeps. [Cost, fees and profit](/repricer/listings/costs-and-fees) covers which channels get an estimate.
</Accordion>

### How your margins are spread

`Margin Distribution` is the panel in the report dialog, under the eight figures at the top. It splits every counted listing into four margin ranges and draws one bar for each. Every bar tells you how many listings are in that range and what share of the report they are.

| Bar | The listings in it |
| --- | --- |
| `Negative (<0%)` | A sale at today's price costs you money |
| `Low (0-15%)` | A sale leaves you under 15% of the price |
| `Medium (15-25%)` | A sale leaves you between 15% and 25% |
| `High (25%+)` | A sale leaves you 25% or more |

The four bars add up to every listing in the report, and the length of a bar tells you that range's share of them. So a long `Low` bar beside a short `High` one is a catalog priced thin, whatever the average above it says.

**Start with `Negative`.** Every listing in that bar is one you pay to sell at the price it is at today. Anything above 0 there is worth your time, and a floor built out of your cost is what stops it coming back, which [the price floor and ceiling](/repricer/strategies/price-floor) covers.

The bars give you counts and not SKUs. To see which listings are behind one, use `By Listing` at the bottom of the dialog and sort it by `Margin`.

### Reading the daily profitability table

`Daily Profitability` is the table in the middle of the report dialog, under the bars. One row is one day of your date range, newest first.

| Column | What it shows |
| --- | --- |
| `Date` | One day |
| `Revenue` | What that day's orders came to |
| `Orders` | How many orders came in that day |
| `Profit` | What that day's revenue would have left you |
| `Margin` | What share of that revenue the profit is |
| `ROI` | That same profit as a share of what the goods cost |

**This is the only part of the report your date range moves.** The dropdown reading `Last 30 days` is in the bar across the top of the dialog. Open it and pick another period, or pick two dates of your own on the calendar beside that list. The eight figures above and the four bars stay exactly where they were.

**This table has no pages.** Every day in your range is on screen at once, so a long range gives you a long table. The days you sold nothing are in it too, and they read 0 all the way across. Click any column header to sort by that column instead of by date. Above the rows is the same toolbar every table in the Repricer gives you, with `Search`, `Columns`, `Filter` and `Density` on it.

`Margin` and `ROI` read the same on every day that sold anything. That is not a fault, and the reason is further down this page.

### Every column in the by-listing table

`By Listing` is the table at the bottom of the report dialog. One row is one of your counted listings, and every column is showing when you arrive.

| Column | What it shows |
| --- | --- |
| `SKU` | Your own code for the listing |
| `Product Title` | The product name, cut short to fit, and hover it for the whole thing |
| `Price` | What you are asking today |
| `Cost` | What one unit of it costs you |
| `Fees` | The estimated fee the channel takes at that price, and 0 where there is no estimate |
| `Profit` | `Price` minus `Cost` minus `Fees` |
| `Margin` | `Profit` as a share of `Price` |
| `ROI` | `Profit` as a share of `Cost` |

**Your table opens with your best margin first.** Click the `Margin` column header once and the order flips, so your thinnest listings come to the top. Every one of the eight columns sorts, in both directions, over all your counted listings and not only the page you are on.

**The money columns are rounded to whole units.** A price of 29.99 reads `USD$30` here and a profit of 4.50 reads `USD$5`. `Margin` and `ROI` keep a decimal, so read those two when the rounding hides the difference you came for.

Above the rows is the toolbar the other tables give you, with `Search`, `Columns` and `Density` on it and no `Filter` button. `Search` looks in `SKU` and `Product Title`, and it searches every counted listing, so a SKU that is not on the page you are looking at still comes up. The table opens on 25 rows a page, and `25`, `50` and `100` are your choices in the footer under it.

A row is only as fresh as the fee estimate behind it, since the profit on it is your price minus your cost minus that estimate. [Cost, fees and profit](/repricer/listings/costs-and-fees) covers when a new estimate is calculated.

### Limits

| What | Limit |
| --- | --- |
| Decimals on the figures at the top | 0 |
| Decimals on `Margin` and `ROI` in both tables | 1 |
| Decimals on the money in `By Listing` | 0 |
| Rows `By Listing` shows at once | 25, 50 or 100 |

### What this report cannot do

| You cannot | Do this instead |
| --- | --- |
| Open a listing from a row | Copy the `SKU` and search it from `Listings` in the sidebar |
| Type a cost in from here | Fill in the `Cost` column on `Listings`, or send costs in with an [import](/repricer/uploads/imports) |
| See which of your listings have no cost | Read `With Cost` and `Without Cost` on your [dashboard](/repricer/dashboard), and click either one for the rows behind it |
| See the whole sum behind one listing | Open that listing and use its `Insights` tab, which [cost, fees and profit](/repricer/listings/costs-and-fees) covers |
| Filter the table by a column | Use `Search` above the rows |
| Read what you really made on the orders you took | Read this as an estimate. Nothing here is checked against a payout |
| Put two periods side by side | Read one, change the date range, read the other |
| Download, print or email it | Export your listings with the `Fees & Profit` columns, which [exports](/repricer/uploads/exports) covers |

## What the numbers count

### Which of your listings are counted

One test decides it. The listing has a cost above 0, and everything else about it is beside the point.

- **Every channel counts**, a marketplace or a store of your own.
- **Every listing status counts.** A listing that is `Inactive` on the channel is still in your average margin if it has a cost.
- **Stock is not looked at.** A listing you have none of counts the same as one you have a hundred of.

That is why the second number in `Profitable` is the number of listings you have given a cost to. It is not how many listings you have, and the gap between the two is usually large on a catalog nobody has costed yet.

Clearing a cost takes that listing back out. Setting one to 0 does the same, because this report reads a 0 as no cost at all.

### Why the figures at the top are not about what you sold

Every figure under `Overview`, at the top of the report dialog, comes from one unit of each counted listing at the price it is at today. So does every bar under those figures. Nothing up there counts an order.

So `Est. Profit` is what you would make by selling exactly one of every counted listing right now. It is not what you made last month, and a good week does not move it. What moves it is a price change, a cost you edit, a fresh fee estimate, or a listing arriving.

That is also why your date range leaves those figures alone. A price you are asking has no day attached to it. You can see which of the six reports your date range moves in [reports](/repricer/reports#setting-the-date-range).

Two of those tooltips use the word revenue. `Fee Rate` and `Profit Margin` both divide by a total revenue, and here that means your prices added up, one unit per listing. On the [sales report](/repricer/reports/sales) the figure called `Total Revenue` is what your orders came to. Two numbers, one word, and only one of them is money you took.

### Where the daily profit comes from

`Revenue` and `Orders` in `Daily Profitability`, the table in the middle of the report dialog, are real. They are the same figures the [sales report](/repricer/reports/sales) gives you for the same days, read out of your seller accounts.

The other three columns are calculated from them. Each day's `Profit` is that day's revenue multiplied by the `Profit Margin` figure at the top of the report. `Margin` repeats that same figure with a decimal on it, and `ROI` repeats the `ROI` figure from the top, on every day that sold anything.

That is why you get the same two figures on every row. The report knows what your selling came to each day in money, and it does not know which items went out. So it treats every day as if it sold your catalog's average margin.

Read the daily table for the shape of your selling, and read the figures above it for where your prices stand. A day of selling your thinnest listings and a day of selling your best ones read the same margin here.

### Which currency each number is in

The eight figures at the top of the report dialog, and the money in `Daily Profitability` under them, are in your organization's currency. They are converted for you at today's rate.

`By Listing` is the exception. Every amount on those rows is in the currency that listing sells in, with the code in front of it. So `USD$30` and `MXN$499` turn up one row under the other. That is a price you might go and change, so you get it the way you would type it. [Reports](/repricer/reports) covers where your organization's currency is set.

## When something goes wrong

### Every figure at the top reads 0

| What you have | What you get |
| --- | --- |
| No listing with a cost on it | 0 on all eight figures, four empty bars and an empty `By Listing`, with `Daily Profitability` still showing your revenue and your orders |
| The three dropdowns narrowed to accounts whose listings have no cost | The same |
| Costs filled in, and nothing sold in your date range | The eight figures read normally, and every row in `Daily Profitability` reads 0 |

The daily table is what tells the first two apart from a quiet month. Revenue on those rows with no profit beside it means the report found no costs to work with.

Costs are what this report runs on. You fill them in from `Listings` in the sidebar down the left, which [cost, fees and profit](/repricer/listings/costs-and-fees) covers.

### A listing you expected is not in the table

The usual reason is the cost. Click `Listings` in the sidebar down the left, find the row, and read the `Cost` column on it. An empty cell keeps that listing out of this report, and so does a 0.

The other reason is your scope. `Integration`, `Account` and `Region`, in the bar across the top of the report dialog, each leave listings out. Set all three back to `All` before you go looking for the cost.

### A row shows a price of 0 and a large loss

That listing has a cost and the channel has not given Repricer a price for it yet. In `By Listing`, the table at the bottom of the report dialog, `Price` reads 0 on that row. `Profit` reads your cost and your fees with a minus sign in front, and `Margin` reads `0.0%` instead of a negative number.

Nothing is wrong with the listing and there is nothing for you to fix. The row is right again once the price comes in, which [what Repricer reads](/repricer/integrations/pull) covers.

### The report will not load

Every message you can get here comes with a `Retry` button under it, and [reports](/repricer/reports) lists them with what to do about each. The one you are most likely to meet is the timeout, because this report reads every listing you have given a cost to. Set `Integration`, in the bar across the top of the dialog, to one of yours and try again.

## Where to go next

<Columns cols={2}>
  <Card title="Cost, fees and profit" icon="receipt" href="/repricer/listings/costs-and-fees">
    Where your cost comes from, which channels get a fee estimate, and what that estimate leaves out.
  </Card>

  <Card title="The price floor and ceiling" icon="arrow-down-to-line" href="/repricer/strategies/price-floor">
    The setting that turns your cost into a price the repricer will not go under.
  </Card>

  <Card title="Sales" icon="dollar-sign" href="/repricer/reports/sales">
    What you sold over the same days, counted before anything is taken off it.
  </Card>

  <Card title="Reports" icon="chart-bar" href="/repricer/reports">
    The date range, the three dropdowns and the other five reports.
  </Card>
</Columns>
