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

# Getting started with PIM

> Your whole catalog is in one place in the PIM, and every integration you connect publishes from that single copy instead of its own version.

The PIM keeps your product information. One catalog, with every product you sell in it, and the words, the images, the prices, the identifiers and the stock on each one.

It is not a copy of what your store already has. It is the version you edit, and everywhere you sell is published from it.

Most people come to a PIM for one of three reasons. They sell the same products in more than one place and are tired of making the same edit twice. They want someone on the team to fix product information without giving them full access to a store. Or a supplier sends them a file every week and there is nowhere sensible to put it.

Here is the problem it removes for you. Every place you sell keeps its own copy of a product, and each one wants that copy in a different shape. Different field names, different length limits, different rules about images. Change one product and you change it in every place, and the one you forget goes on showing the old version until someone notices. With a PIM you keep one catalog, you edit it once, and each integration gets the part of it that integration can take.

Your catalog is owned by your organization and not by you personally. Everyone you invite works on the same products, the same images and the same connections, so you never have separate copies to reconcile later.

## What your role lets you do

Your role decides how you are allowed to get information in, so it is worth checking before you plan anything. You have one of three roles, and each one includes everything the role below it can do.

| What you want to do | Editor | Manager | Admin |
| --- | --- | --- | --- |
| Create and edit products, variants and taxonomy | Yes | Yes | Yes |
| Upload images and files, and run an export | Yes | Yes | Yes |
| Delete anything, or use a bulk action | No | Yes | Yes |
| Run an import | No | Yes | Yes |
| Open and set up a data source | No | Yes | Yes |
| Connect, rename, pause or disconnect an integration | No | No | Yes |

Whatever your role, you can read everything. The catalog, the images and the reports are open to all three, so the table is only about changing things.

You may see a fourth role, Analyst, beside someone's name. That one is a Repricer role and cannot be given out in the PIM at all, so even the lowest role here creates and edits products.

Your PIM role is separate from your role in the organization, and you get both from the account app rather than from here. Own the organization and have no PIM role, and you open the PIM to nothing at all. Run the whole catalog, and you can still be a plain member of the organization. You will find both sets of roles in [team, roles and permissions](/team).

## How to build your catalog

<Steps>
  <Step title="Connect the integration that already has your products">
    Click `Integrations` in the sidebar, click the card for the integration you want, then click `Manage accounts` and `Connect Account`. You authorize the connection on that integration's own site, and you come back with your products already arriving. Connecting is Admin-only.

    If your organization is brand new, you see this step before anything else. You open on a screen titled `Connect your first integration`, a grid of cards with a `Skip for now` link under them. Skipping is safe, and `Integrations` is still there when you want it.
  </Step>

  <Step title="Read what arrived before you change anything">
    Click `Catalog` in the sidebar and open a few products from the table. Check that the titles, the identifiers and the prices came through the way you expected.
  </Step>

  <Step title="Decide how your products are described">
    Click `Catalog` in the sidebar, then `Categories` in the list beside it, and build your tree. Then click `Specifications` in that same list and build your groups. Do it while your catalog is still small. This is the step people skip, and it is the expensive one, because a specification gets to a product through the categories that product is in.
  </Step>

  <Step title="Fill in what is missing">
    Click a row in the products table to open the editor, then attach images, assign brands and tags, complete the identifiers, and give every variant a SKU. The SKU matters most, and you will see why two sections below.
  </Step>

  <Step title="Set the publishing rules on each connected account">
    Go back to `Integrations`, click the card, then `Manage accounts`, then the account, then `Settings` in the header of the dialog that opens over the page. Decide which of your price fields that account publishes and how much of your stock it can show.
  </Step>

  <Step title="Add your second integration">
    Add it once the first one is behaving. A mistake in your settings then shows up in one place instead of three.
  </Step>
</Steps>

That is the whole setup, and you can be through it in an hour. Your catalog fills itself from step 1, and from step 5 onward your edits go out on their own every time you save a product.

Everything below explains the parts of the PIM one at a time. You do not need any of it to get through those six steps.

## Where everything is

The sidebar runs down the left of every page you open, and it has six entries. Everything you do is under one of them.

| Entry | What you find there | Who sees it |
| --- | --- | --- |
| `Home` | Your whole catalog counted: products, variants, statuses, price and stock coverage, images, brands, categories, tags and specifications, plus what your imports and exports did in the last 7 days | Everyone |
| `Catalog` | Your products and variants, and the brands, categories, tags and specifications that describe them | Everyone |
| `Assets` | Your images, video, audio and documents, in one library | Everyone |
| `Reports` | Ten reports on how complete your catalog is | Everyone, and two of them come and go |
| `Uploads` | Your imports and exports, with data sources beside them | Data sources need Manager |
| `Integrations` | Everywhere you publish to, and the settings for each connected account | Admin only |

As an Editor or a Manager you see five entries instead of six. `Integrations` is Admin-only, and below that role it disappears from your sidebar entirely. For the header, the avatar menu and the rest of the frame around these pages, see [the interface](/pim/interface).

<Accordion title="Why two of the ten reports are sometimes not on the Reports page">
  You are not shown a report that could only ever be empty. The Integrations report needs the Admin role and at least one connected account. The Data sources report needs the Manager role and at least one data source. The other eight are always there.

  Both appear the moment their condition is true, with no reload and nothing for you to switch on.
</Accordion>

## What a catalog is made of

A product is the record you work with. Everything else is either inside one of your products or describes it.

### Products and variants

A product is one thing you sell, whether that is a single item or a family of sizes and colors.

Give a product options, size or color or anything you name yourself, and every combination of your option values becomes a variant. A product you give no options has no variants.

<Info>
  Once a product has options, its identifiers, prices, costs, stock, dimensions and customs fields leave the product and move onto each variant. Those fields are not lost. They are one level down.
</Info>

That single rule explains most of what surprises people in the editor. Anything describing the thing you sell is written once on the product. Anything telling two versions of it apart goes on the variant.

| What | Where it is kept |
| --- | --- |
| Title, description and the SEO fields | The product, always |
| Status and condition | The product, always |
| Categories, brands and tags | The product, always |
| Specifications | The product, always |
| Identifiers, prices, costs, stock, dimensions and customs | The product while it has no options, and each variant once it has them |
| Images and files | Both. A variant can have its own primary image and gallery, and only a product can have files a shopper downloads |

The split runs one way only, so you never give a variant a title, a description or specifications of its own. For what an option does to a product, see [variants](/pim/catalog/variants). For the editor itself, including the four statuses and where you set them, see [products](/pim/catalog/products).

### Specifications, categories, brands and tags

You have four ways to describe and group the same catalog, and they do different jobs.

- **Specifications.** The attributes you describe things with, defined once in a group and reused from then on. A group you give no categories applies to every product. A group you give categories covers only the products in those categories, so which specifications a product gets changes when you change its categories.
- **Categories.** The only grouping that nests. A name has to be unique among its siblings, not across your whole catalog.
- **Brands.** Who makes the product. A brand name is unique across your organization, and a product can have more than one, of which the first is its primary brand.
- **Tags.** Free labels, for filtering a table and for picking things out in bulk.

Categories, brands and tags are independent of one another, and one product can have all three at once. Start with your categories, because your specifications follow them.

### Assets

Your images and files are in one flat library for the whole organization, which you open from `Assets` in the sidebar. Attaching one to a product never copies it. So a single photograph of yours can be on 200 products, and deleting it takes it off all of them.

The library takes images, video, audio, documents, archives and 3D models, and anything it does not recognize is filed as other. Select an image and click `Optimize` to resize it, remove its background or enlarge it. You always get a new image back, and the one you uploaded is never changed. [Assets](/pim/assets) covers the library and [the optimizer](/pim/assets/optimizer) covers what each transform does.

## How information gets into the catalog

Your information arrives by one of four routes. Getting the wrong one of the last two costs you data rather than time, so read the last column before you choose.

| Route | Who can start it | When it runs | A blank cell in your file |
| --- | --- | --- | --- |
| **Typing it in yourself** | Editor and above | Whenever you save | Not applicable |
| **Pulling from a connected integration** | An Admin connects it once | On its own, from then on | Not applicable |
| **Importing a file** | Manager and above | Once, when you start it | Keeps the value you already had |
| **A data source** | Manager and above | On the schedule you set, forever | Clears the value you already had |

Whichever route wrote a value, your catalog remembers which one it was. The products table has `Created by` and `Updated by` columns naming the person when a person was involved. Otherwise they name the thing that was: `Import`, `Data source`, `Integration` or `System`.

**Pick a route by how often the same information comes to you.** Type it in for a handful of products, and for the gaps a bulk load left behind. Connect an integration when a store already has your products. Import a file when a supplier sends you one that is not coming again. Set up a data source when that same supplier sends you the same file every week, because it is the only route that runs without you.

### Typing it in yourself

Click `Catalog` in the sidebar, then the `Create product` button above the products table. The editor opens with everything empty, and saving puts one product in your catalog.

Three fields are marked required and only one of them wants your attention. You write `Title`. `Slug` writes itself from your title until you edit it yourself, and `Condition` arrives already set to `New`.

Typing it in is the only route you can take alone as an Editor. It stops scaling somewhere past a few dozen products, which is what your other three routes are for.

### Pulling from a connected integration

The moment you connect an integration it starts a one-time import, and your catalog fills with what that integration already has. Most catalogs start here, because a store that already has your products fills your catalog faster and more cleanly than typing it in.

After that first sync you get no button, because reading is continuous. Some integrations report your change within seconds of it happening, and every connected integration is read again every 30 minutes regardless. Reading pauses while one of your imports is running, so a sync and an import never fight over the same rows.

When the same product was edited on both sides, the newer edit is the one kept. Price is your exception. Once a connected account is building its published price out of your fields, prices stop coming back for products you already have. Your price is the one that counts.

How much comes back to you is decided by the integration. Some send you product edits, and some send only the numbers they own. A counter where someone rings up a sale in person reports that stock movement, so the rest of your integrations see it. For what each integration sends you back, see [pull](/pim/integrations/pull).

### Importing a file

An import takes you through a wizard. You choose what you are importing, upload a CSV or XLSX file, decide how your rows are matched against what you already have, map your columns onto catalog fields, and start it. A preview shows the first rows of your file while you map them. Beside that preview, the `First row is a header` switch handles a file with no header row.

<Accordion title="What happens when your file names a brand or a category you do not have yet">
  The wizard asks you, on the `Options` step, under `Missing references`. Each kind of reference gets its own row of choices.

  For `If Brand does not exist:` and `If Tag does not exist:` you can pick `Create automatically`, and your import makes the missing one for you. For a category, a specification group, a specification definition or a specification value you do not get that choice, and your only answers are `Skip with warning` and `Fail the row`.

  So load your categories and your specifications before the products that name them, or those rows arrive without them.
</Accordion>

An import cannot be undone. You get no rollback and no trash, and canceling one that is already running keeps every row it has written so far. Cut a short slice off your file, import that, read the results, then send the rest. [Imports](/pim/uploads/imports) covers the wizard step by step.

### A data source

A data source is a supplier feed on a schedule you set, and it runs unattended from then on. You get field priorities of your own, deciding which one counts when two feeds describe the same product. You also get a history recording what each run matched and what it could not.

<Warning>
  A blank cell in a column your feed still sends clears what your catalog had. An import leaves that same cell alone. Confusing the two costs you data on the first run.
</Warning>

Data sources are under `Uploads` behind the Manager role, so as an Editor you never see the section at all. A feed delivers the same CSV and XLSX your imports take. [Data sources](/pim/uploads/data-sources) covers the schedule, the priorities and the history.

## How your catalog gets to an integration

You never press a publish button. What leaves your catalog is built from your catalog, and saving a product is what sets it going.

### What decides that a product goes out

Your product goes out when the integration can recognize it, and what it recognizes is your SKU. The first push uses it to find a listing that already exists, so you adopt that listing instead of creating a duplicate. Every sync after it uses the same SKU to work out what the integration is still missing.

A variant you leave without a SKU gives an integration nothing to match on, and it stays behind. That is why filling in your SKUs is the first thing to do on a catalog you have just imported.

Two things change which of your identifiers does that work. On a marketplace where every seller offers against one shared listing, the key is the ASIN, and you record it as an identifier on the variant against the marketplace it is for. Each connected account also has an `Identity` setting naming which of your identifiers it gets as its SKU, so you can point an account at your part number instead. [Identifiers](/pim/catalog/identifiers) covers all of them.

### What each connected account controls

Your publishing settings are set on the connected account and not on the product, so one catalog can behave differently in two places without being duplicated. Two Shopify stores under your organization publish different prices from the same products.

<Accordion title="Every group of settings a connected account has">
  The settings dialog shows you five groups, and a group appears only when that integration really honors it.

  | Group | What it decides |
  | --- | --- |
  | `Product page` | Where a shopper is sent on your own site, for an integration that advertises your product without hosting it |
  | `Pricing` | Which of your price fields becomes the published price, the adjustment and rounding applied to it, the MAP floor it cannot go under, and the strike-through price beside it |
  | `Inventory` | How much of your stock that integration can show, as a safety buffer and a maximum |
  | `Lifecycle` | What happens over there when you delete the product here |
  | `Identity` | Which of your identifiers arrives as the SKU |

  You need the Admin role to open the dialog, and the same role to save it.
</Accordion>

Every control, the value it starts on and the order your published price is built in are in [integration settings](/pim/integrations/settings). Saving those settings gives you `Re-sync now`, which is the one place in the PIM where you start a push yourself.

### Taking one product out of one integration

Open the product, then point at the integration logo at the top of the product dialog. A panel opens listing every connected account, and each account has a switch beside its name. Turn that switch off and this one product leaves that one integration while it stays in your catalog. Your brands and categories have the same switch wherever the integration keeps an object of its own to switch off.

<Note>
  Turning the switch off asks what should happen over there: delete it, archive it, or leave it as it is. It stops publishing, not reading, so a listing you leave alone keeps sending its own edits back to you.
</Note>

The same panel is where you read how a product is doing on each account. `Not in integration` means it never went out, and `Sync off` means you switched it off there yourself. `Failed` and `Rejected by the integration` both mean it went out and something came back. [Sync issues](/pim/integrations/sync-issues) covers what each one wants from you.

How much of your product an integration accepts is decided on its side, not yours. One takes your descriptions, your images and your specifications, and another takes an offer and no product wording at all. So a description you correct goes to every integration that stores descriptions, and changes nothing in the one that does not. That is not a failure and it raises no error. For what each one accepts, field by field, see [push](/pim/integrations/push).

## What the PIM does not do

- **It never reacts to a competitor.** The PIM builds the price it publishes out of your own fields. Moving your price in response to another seller is the Repricer's job, and the two are separate products with separate connections.
- **It does not take orders.** A sale never reduces a number here directly. The integration reduces its own count, and your catalog reads the new number back.
- **You cannot type into every stock field.** On-hand stock is consolidated from your connected integrations, and supplier stock is written by your feed. Fallback stock is the one of the three that is yours.
- **Nothing can be undone.** You get no trash, no restore and no version history on a product, an image or an import.
- **Bulk actions are a fixed set.** `Update status`, `Update tags`, `Update integration sync` and `Delete`. You get no bulk edit of price, cost, brand or category, and no editing directly in the table.
- **No report leaves the product.** You cannot export, print, schedule or email a report. An export is how you get catalog data into a file.
- **Nothing arrives inside the app.** There is no notification bell, inbox or history. The PIM emails you about a connection that needs attention, a sync error, a finished export and a finished import, and you can turn off any of those four in your settings.
- **There is no public API, no webhooks and no audit log.** Imports and exports are how you move data in and out.

## Questions people ask when they start

<AccordionGroup>
  <Accordion title="My product is not showing up on my store">
    Open the product and point at the integration logo at the top of the product dialog. The panel that opens tells you what is happening on each account.

    Four causes cover most of it. The variant has no SKU. None of the account's price sources has a value for it, which blocks the first push instead of publishing a zero. You switched its switch off for that account, which the panel reports as `Sync off`. Or your product is still `Draft`, which does go to the store, as a draft no one shopping can see.
  </Accordion>

  <Accordion title="I deleted a product by mistake. Can I get it back?">
    No. Deleting is permanent, and the confirmation tells you so before it runs: no trash, no restore, no version history. The same is true of a variant and of an image.

    Rebuild it yourself, or import it again if the file you loaded it from is still around.
  </Accordion>

  <Accordion title="Why can I not type a number into the stock field?">
    Two of your three stock numbers are not yours to write. On-hand stock is added up from the locations on your connected integrations, and supplier stock is written by the feed that delivers it.

    Fallback stock is the one you type, and it is what ships when your other two are empty. [Inventory](/pim/catalog/inventory) explains where each number comes from.
  </Accordion>

  <Accordion title="Can I change the price on a lot of products at once?">
    Not from the table. Your bulk actions cover status, tags, integration sync and delete, and nothing else.

    The way to move many prices is a round trip. Export the products you want as a file, edit the price column in a spreadsheet, and import that file back.
  </Accordion>

  <Accordion title="The price on my store does not match the price in the PIM">
    That is the connected account's publishing settings working as you set them. Each account picks which of your price fields to publish, then applies an adjustment, a rounding rule and a MAP floor to it, in that order.

    To see which of the four is moving your number, click `Integrations` in the sidebar, then the card, then `Manage accounts`, then the account, then `Settings`.
  </Accordion>

  <Accordion title="My import finished but some products are missing">
    Your rows fail one at a time. The imports table counts errors and warnings separately, and the results file names every row that failed, with the reason.

    One behavior surprises people. When a row fails, the other rows of that same product are blocked with it, so a single bad variant can block the others with it.
  </Accordion>

  <Accordion title="Can two of us work on the catalog at the same time?">
    Yes. Open the same product as a teammate and you see them at the top of the dialog, with a mark on anyone who is currently editing rather than reading.

    If you both save, the second save is rejected with a message saying the product changed and asking you to reload. Nothing you did is overwritten silently.
  </Accordion>

  <Accordion title="I ended up with the same brand twice. Can I merge them?">
    Yes, for your brands and for your categories. Open `Catalog`, then `Brands`, select the rows you want to fold together, and click `Merge` in the bar above the table. Choose the one to keep, and every product moves across to it.

    The merge runs on its own and tells you how many records and products it moved when it finishes.
  </Accordion>

  <Accordion title="I got an email asking me to reconnect an integration">
    Its credentials expired, or someone revoked them on the other side. Nothing publishes or reads through that integration until you reconnect it, and it never repairs itself.

    Click `Integrations` in the sidebar, click the card, then `Manage accounts`, then the account, then `Reconnect`. Reconnecting is Admin-only.
  </Accordion>
</AccordionGroup>

## Where to go next

<Columns cols={2}>
  <Card title="Products" icon="package" href="/pim/catalog/products">
    The editor, the table, and what options do to both.
  </Card>
  <Card title="The interface" icon="layout-dashboard" href="/pim/interface">
    The sidebar, the header, the avatar menu, and your own settings.
  </Card>
  <Card title="Imports" icon="upload" href="/pim/uploads/imports">
    Load a file, and read the results before you send the rest.
  </Card>
  <Card title="Integrations" icon="plug" href="/pim/integrations">
    Connect an account, and set what it gets.
  </Card>
</Columns>
