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

# Categories

> Categories are the groups a shopper walks down on your storefront, with Electronics above Phones and Phones above Smartphones.

A category is a group you put products into, and your categories go inside each other. You might have `Phones` inside `Electronics`, and `Smartphones` inside `Phones`. A phone you sell goes in the last one. That chain is what a shopper walks down on your storefront, and it is the only part of your catalog that nests this way. Your brands, tags and specification groups are flat lists.

Most people build categories for one of three reasons. You want the shape of your catalog to match the way people shop it. You want that same shape to go out to the stores you sell through. Or you want to find a slice of your products later.

Each category has a name, a description, a thumbnail, a banner, two fields for search engines and a slug. Every product you put in it shares that group.

Your categories do a second job that is easy to miss. **A category decides which specifications a product is asked for.** Move a product into a different category and the specifications it is expected to fill in can change with it. That is covered further down.

You find your categories under `Catalog`, in `Categories`. The `Create category` button is at the right end of the toolbar above the list. The table under it lists every category you have, one row each, with its full path and a count of the products in it. Click a row and that category opens so you can edit it.

## Before you start

Two things can stop you. Everything else on this page can wait until you need it.

### What your role lets you do

| Role | Create and edit a category | Duplicate, merge and delete | Change which accounts get it |
| --- | --- | --- | --- |
| Admin | Yes | Yes | On one category, or on a selection |
| Manager | Yes | Yes | On one category, or on a selection |
| Editor | Yes | No | On one category at a time |

Below Manager, you get no buttons at the end of a row, no checkboxes down the left of the list, and no selection bar. The actions you cannot run are simply not there. Your role is set in [team, roles and permissions](/team#what-each-pim-role-can-do).

### Merging and deleting cannot be undone

<Danger>
  A category you delete is gone, and a merge deletes every category you merged away. Neither has an undo, there is no trash, and nothing keeps a copy. Export your categories first if you want one.
</Danger>

## How to create a category

<Steps>
  <Step title="Open the category dialog">
    From `Catalog`, select `Categories`, then click `Create category` at the right end of the toolbar above the list. A dialog opens over the page with the category's fields running down it.
  </Step>

  <Step title="Name it">
    Type into the `Name` field at the top of the dialog. The `Slug` field at the bottom fills itself in as you type.
  </Step>

  <Step title="Choose where it goes">
    Click the `Parent Category` field in the middle of the dialog. A picker opens showing your whole tree. Click one category in it to put your new one under that, or leave the field empty to put your new one at the top level.
  </Step>

  <Step title="Add a description and images">
    Write a description in the editor under `Name`. Below `Parent Category` you get three drop areas, labeled `Thumbnail`, `Banner` and `Resources`. You can skip all of them.
  </Step>

  <Step title="Save it">
    Fill in `Meta Title` and `Meta Description` near the bottom if you want them, then click `Create`.
  </Step>
</Steps>

That is the whole flow. Your category appears in the list right away, in its place under its parent, and a small message confirms it was created. If you have connected a store that keeps categories of its own, your category starts going there on its own.

Only `Name` and `Slug` are required. A category with nothing else on it still groups your products and still goes to your stores. Everything below explains the dialog, the list, the tree and the actions at the end of every row. You do not need any of it to create one.

## Every option in detail

You get the same dialog whether you are creating a category or editing one. It opens from `Create category` above the list, or from clicking a row. The button at the bottom reads `Create` on a new category and `Update` on one you already have.

Every category has its own web address. A link to one still works after a reload, and you can send it to someone on your team.

Closing the dialog with unsaved edits asks you to confirm first. You can either throw your edits away or go back to editing, and clicking outside the dialog or pressing Escape asks you the same thing. There is no draft for you to come back to.

### What goes in each field

The fields run down the dialog in this order.

| Field | Required | What you can put in it |
| --- | --- | --- |
| `Name` | Yes | The category's own name, with a counter under the box |
| The description editor | No | Formatted text, including images you drop into it |
| `Parent Category` | No | One category from the picker, or nothing |
| `Thumbnail` | No | One image |
| `Banner` | No | One image |
| `Resources` | No | Files of any kind, kept alongside the category |
| `Meta Title` | No | The title a search engine shows, with a counter |
| `Meta Description` | No | The snippet a search engine shows, with a counter |
| `Slug` | Yes | The web address, rewritten into slug form when you save |

Each counter turns orange at a length you can go past. On `Meta Title` that is 60 characters, and on `Meta Description` it is 160. Those are the lengths search engines usually show before they cut a title or a snippet off. Nothing stops you going further, and the color changing is all that happens. The limits table further down has the hard caps.

The three drop areas keep their English names whatever language you read the app in. Use `Resources` for anything you want kept alongside the category that is not one of the two images, such as a sizing chart or a supplier document. Where those files are kept, and how you reuse one, is covered in [assets](/pim/assets).

**Your category names have to be unique among siblings, not across your whole catalog.** You can have the same `Accessories` under `Phones` and under `Laptops` at once. Each one is only compared against the categories that share its parent. Your top-level categories are compared against each other the same way, so two of those still cannot collide. Your slugs work the same way and are checked separately.

<AccordionGroup>
  <Accordion title="What happens when the name or the slug is already taken">
    A check runs a moment after you stop typing, and it marks the field before you get as far as clicking `Create`. The message names the exact place it looked. You get either "already exists under" and the parent's name, or "already exists at the root level" for a category with no parent. Your slug gets its own version of the same message.

    `Create` and `Update` stay gray while that check is running. They also stay gray until you have actually changed something, so you cannot save a dialog you opened and did not touch.

    If the check cannot answer at all, your save still goes through and the conflict is caught as it is written. You get the same message either way.
  </Accordion>

  <Accordion title="Saving while someone else has the same category open">
    You see a small marker in the dialog header naming anyone else viewing or editing the same category. So you usually know before it becomes a problem.

    If someone else saves while your dialog is open, your save is rejected rather than writing over theirs. A banner appears at the top of your dialog saying the category changed, with a `Reload` action. Clicking it pulls in their version and throws your unsaved edits away.

    If you had no unsaved edits, your dialog updates itself with no message, and the fields they changed flash blue as the new values appear.
  </Accordion>
</AccordionGroup>

### Where the slug comes from

Your slug is the part of a web address that names the category. Your stores build their category page addresses out of it, so it matters more than it looks.

**Your slug follows the name while you are creating a category, and never after that.** It stops following the moment you type into the `Slug` field yourself. On a category that already exists, changing the name leaves the slug alone completely.

So renaming `Shoes` to `Footwear` keeps the slug at `shoes`. A link someone already has pointing at `shoes` keeps working.

If you do want the address to change, edit the `Slug` field yourself. On a Shopify store, your old address is redirected to the new one for you.

### Putting a category under another one

`Parent Category` is the whole of your tree. There is nothing else for you to set. Leave the field empty and your category goes at the top level. Click the field, pick a category in the picker, and your category goes under that one instead.

**Changing `Parent Category` on a category that already exists moves it, and everything under it moves too.** Move `Phones` from `Electronics` to `Gadgets` and `Smartphones` moves with it. So does everything under `Smartphones`. The full path of every category in the branch is rebuilt when you save, so the `Path` column in your list catches up immediately.

The picker shows your whole tree. The category you are editing is grayed out, along with everything under it. That is deliberate. Putting a category inside one of its own children would make a loop with no top, so you can see those rows for orientation but you cannot click them.

<Accordion title="How deep you can nest categories">
  Nothing in the category dialog caps your depth, and normal catalogs never come close to any of the numbers below.

  Your `Path` column stops building the breadcrumb after 20 levels and marks that it stopped. A move whose chain of parents runs past 30 levels is rejected outright. In practice you only see that if something is already wrong with the branch.

  A store can be stricter than the PIM. BigCommerce takes 8 levels. A category of yours that is deeper stops with a message saying so, on that store only. It stays exactly where you put it here.
</Accordion>

### Reading the categories list

Your list is a plain table, one row per category, and it does not fold or unfold.

| Column | What it shows you |
| --- | --- |
| The first, unlabeled column | The category's thumbnail, or a dash |
| `Name` | The category's own name, without its parents |
| `Slug` | The slug |
| `Path` | The full chain, as `Electronics > Phones > Smartphones` |
| `Products` | How many products you have in the category |
| `Created at` and `Created by` | When the row was made, and who made it |
| `Updated at` and `Updated by` | When it last changed, and who changed it |

**There is no drag-and-drop tree here.** No folders for you to open and close, and no dragging one row onto another to move it. If you came looking for one, it is not hidden behind a setting.

You read your hierarchy from the `Path` column instead. Your list is sorted by `Path` from the start, so children are always directly under their parent until you sort it another way.

To move a category, open it and change `Parent Category`. That is the same thing a drag would have done for you.

Your `Products` count includes every product in the category whatever its status. Your archived and draft products are counted too.

### Finding the category you want

The search box above your list matches on the name, the slug, the description and the path all at once. Typing a parent's name finds its children as well, because the parent's name is part of every child's path.

For anything narrower, click `Filters` above the list and build a condition there. You can filter on `Name`, `Slug`, `Path`, the description, `Products` as a number, and the four audit columns. Two more filter fields are not columns and never show you anything in a row:

- **`Is Leaf`.** Set it to `Yes` and you get the categories with nothing under them. That is usually the set your products should actually be in.
- **`Is Root`.** Set it to `Yes` and you get your top-level categories.

Both are dropdowns with `Yes` and `No`. How you build a condition, and how you keep one for next time, is covered in [filters](/pim/filters) and [saved views](/pim/saved-views).

### Putting products in a category

You put a product in a category from the product, never from the category. Open the product, find its `Taxonomy` section, and click the `Categories` field there. The picker that opens is the same tree, and you can check as many categories as you want on one product.

Nothing in your categories list assigns anything. Check some row checkboxes and the selection bar that appears gives you `Merge`, `Update integration sync` and `Delete`. That is the entire list. You get no bulk edit here, and no way to move a set of products from one category to another. Merging is the only action on this page that touches which products are where.

**The order you pick categories in on a product decides which one counts as first.** Your `Categories` column on the products table prints them all but sorts by the first one. A store that can only accept one answer gets your first one. Nothing labels it on screen, so the only way you change it is to reorder the field on the product itself.

At volume, your categories arrive with a products import instead. The `Categories` column in your file takes full paths, one per category, written the way your `Path` column shows them.

A path that is not in your catalog yet is handled the way you tell the import wizard to handle it. On the step that asks what to do about things it cannot find, you choose between skipping the row with a warning, creating the category automatically, and rejecting the row. [Imports](/pim/uploads/imports) covers that step.

### Choosing which specifications a product is asked for

<Info>
  A specification group with no categories on it applies to every product. A group with categories applies only to products in one of them, and you can exclude a single specification for particular categories.
</Info>

**The match is on the category your product is actually in, never on its parents.** A group you scoped to `Electronics` does not apply to a product filed only under `Electronics > Phones`. That is true even though `Phones` is inside `Electronics`.

So scope your groups to the categories your products are really in, which is usually the ones at the bottom of your tree. [Specifications](/pim/catalog/specifications) has the full rule.

This is why a category change can change what a product is expected to have, without telling you. Move a product from one category to another and the specifications it is asked for move with it.

### Loading and saving a whole tree

Your tree has its own import and its own export, separate from the products ones. A categories import maps nine columns: `Category Path`, `Category Name`, `Description`, `Thumbnail URL`, `Banner URL`, `Resource URLs`, `Slug`, `Meta Title` and `Meta Description`.

**Order your file from the top down: parents first, then their children.** A row asking for a category under a parent your file has not created yet cannot be placed. It fails with a message naming the missing parent, and that is the most common reason a categories import comes back with errors.

An import can also move your categories, not only create them. In update mode, mapping the `Category Path` column moves each category to wherever the file says it should be, which is the fastest way to reshape a large tree.

A categories export is already in the top-down order for you. It writes parents above their children, sorted by path, so a file you exported can go right back in.

Your export gives you one extra column, `Category Level`, that an import ignores. How deep a category goes is calculated from its parent and never read from your file. Which columns you get, and how you run an export, is in [exports](/pim/uploads/exports).

### Duplicating a category

`Duplicate` is the first item in the menu at the end of a row. You also get it in the menu in the top right of the category dialog.

You get a copy under the same parent, named with `(Copy)` on the end and with `-copy` on the end of its slug. If that name is taken, you get `(Copy 2)` and upward. A long name is trimmed so the suffix still fits.

Your copy brings the description, the two meta fields and the assets. **It brings neither the child categories nor the products**, so your duplicate arrives empty with nothing under it. Use it as a starting point for a category shaped like an existing one, not as a way to clone a branch.

### Merging two categories into one

**Merging is the only way you can get products off a category.** There is no reassign-then-delete anywhere in your taxonomy. So a category you no longer want, but that 400 products are still in, gets merged into the one you are keeping rather than emptied and deleted.

You keep one category out of a merge. Every other category in it is deleted, and their products, their children and their specification scoping move to the one you keep.

<Steps>
  <Step title="Start the merge">
    Click `Merge` in the menu at the end of a row. You can also check two or more row checkboxes and click `Merge` in the selection bar that appears, or use the menu in the top right of the category dialog.
  </Step>

  <Step title="Say which category you keep">
    Starting from a row, the step is called `Select to Merge`: the row you came from is the survivor, and you get a picker for choosing what to fold into it. Starting from the selection bar, the step is called `Select Survivor`: you get a list of the categories you checked with a radio button on each.
  </Step>

  <Step title="Read the impact summary">
    Both routes end on `Preview Impact`. It lists the category you are keeping, then the categories to be deleted with a line through their names, then a panel called `Impact summary` counting what your merge is about to do.
  </Step>

  <Step title="Confirm it">
    Click `Merge` at the bottom right, then confirm on the dialog. It tells you the action is irreversible and names your survivor.
  </Step>
</Steps>

Your merge then runs in the background, and you get a message as soon as it is queued. You can keep working. Another message tells you when it has finished, with how many categories were merged and how many products moved.

Read `Impact summary` before you confirm, because it is the only preview you get.

| Row | What it counts |
| --- | --- |
| `Products affected` | Products moving to your survivor, and how many were already in both |
| `Children to re-parent` | Categories that will move up under your survivor |
| `Spec groups reassigned` | Specification groups scoped to a category being deleted |
| `Spec exclusions reassigned` | Specification exclusions pointing at one of them |
| `Asset assignments deleted from losers` | Images and files you simply lose instead of them moving over |

A product already in both categories keeps its earlier position. That can move it up your survivor's list and change which of its categories counts as first.

You can rename your survivor on the way through. Click `Rename` next to it on the impact screen, type the new name, and click `Save`. Your name is checked against its siblings while you type, and `Merge` stays gray while the editor is open. A rename leaves the slug, the parent and the depth alone, so links pointing at your survivor keep working.

Two findings warn you and let you continue anyway. One appears when an import is running, because rows in that file can fail and need re-importing after that. The other appears when the categories you are folding in are not all at the same level of the tree as the one you are keeping.

Two findings stop your merge before it starts. The first is a category you are folding in that is above the one you are keeping, which would leave the tree with nowhere to put it. Move it out of that branch first.

The second is a slug collision between the children being moved. They can collide with children your survivor already has, or with each other, and you get each colliding slug listed. That check reads slugs, not names.

<Danger>
  A merge is permanent. Every category except your survivor is deleted, and their images and files go with them rather than moving to the survivor.
</Danger>

### Deleting a category

`Delete` is the last item in the menu at the end of a row, and in the menu in the top right of the category dialog. Two things block your delete outright, in this order:

- **The category still has children.** The message tells you how many. Delete or move them first.
- **Products are still in the category.** The message tells you how many. Merge it into another category instead, or take the products out one by one.

Neither is a warning you can click through. A category has no archived state and no draft state, so once you delete one it has nowhere to come back from.

Your confirmation dialog names the category and then lists everywhere it disappears from. It starts with `PIM` and names every connected account the category is live on, because your delete goes to your stores too. If it is not on any store, the dialog tells you that instead.

**Deleting a whole selection works differently, and it works from the bottom up.** Check a parent together with all of its children and the whole branch goes in one action. Deleting that parent on its own would have been rejected. Any row it still cannot take reports why it was skipped, either because children were left behind, or because products are still in it, or both.

On a very large selection, a parent and its children can be handled in separate rounds, and your parent comes back blocked. Run the delete again and it finishes the job.

### Working on a lot of categories at once

Check a row checkbox and you get a selection bar with `Merge`, `Update integration sync` and `Delete` on it. `Select all` in that bar takes every row your filter matches, not just the page you are looking at. Your set is fixed when you confirm, so a category someone creates while it runs is never included.

Above 100 rows in that mode, your work moves to the background, with its own progress bar and a `Cancel` you can use. A selection you built by checking boxes always runs there and then, however many rows you checked.

Only one bulk action runs for your organization at a time. Start a second while one is going and you are told to try again shortly. [Bulk actions](/pim/bulk-actions) covers the shared behavior.

### Stopping a category from going to one account

Every connected account that can take your categories shows as a badge in the header of the category dialog. Hover a badge and a panel opens with a `Sync` switch on it. Turn that switch off and the account stops getting this category.

**Turning it off is not a pause, it is a removal.** A category has no life of its own on a store the way a product does. There is nothing there to keep except the group itself, so the only choice you get is deleting it from that store, and the dialog says so before you confirm. Turn the switch back on later and your category is created there again.

To do the same to a whole selection, check the rows and click `Update integration sync` in the selection bar. You get a list of your connected accounts, and you choose per account whether it starts syncing, stops syncing, or is left unchanged. Nothing is pre-selected for you, and `Apply` stays off until you touch at least one account.

### Limits

| What | Limit |
| --- | --- |
| Category name | 100 characters |
| Slug | 200 characters |
| Meta title | 200 characters |
| Meta description | 300 characters |
| Files under `Resources` | 250 |
| Depth shown in the `Path` column | 20 levels |
| Deepest level a move is allowed to go | 30 levels |
| Depth BigCommerce accepts | 8 levels |
| Category name length on BigCommerce | 50 characters |
| Rows in one checkbox selection | 10,000 |
| Bulk actions at once | One per organization |

### What you cannot do with a category

| You cannot | Do this instead |
| --- | --- |
| Drag a category onto another one to move it | Open it and change `Parent Category` |
| Add products to a category from the categories list | Open each product and use its `Categories` field |
| Move a set of products from one category to another | Merge the two categories, or re-import the products |
| Delete a category that has children or products | Move the children out, or merge the category away |
| Get a deleted or merged category back | Export your categories before you start |
| Have two siblings share a name or a slug | Rename one, or move it under a different parent |
| Send a category to Amazon or to Google | Nothing: those two work from your products only |

## What a category becomes on each integration

What your categories turn into depends on what the store has of its own. A store that keeps real, nesting categories gets your tree the way you built it. A store whose grouping is flat gets one group per category, with the shape of your tree recorded alongside so a storefront can rebuild it. A marketplace selling against someone else's catalog gets nothing about your categories at all.

| Integration | What your category becomes there |
| --- | --- |
| Square | A category in your Square catalog, nested the way you nested it |
| Shopify | One collection per connected account, flat, with your tree written onto it |
| BigCommerce | A category in your BigCommerce tree, nested the way you nested it |
| Amazon | Nothing |
| Google | Nothing |

Amazon and Google are not gaps waiting to be filled in. On Amazon you manage your offer against a listing someone else owns, so you have no product content to place in a category. Google Merchant Center decides its own product classification, and the PIM deliberately sends none.

### On Square

A category is a category. Square categories nest, have a page address, and have their own place in the Square dashboard, so yours arrive as themselves.

They are created when you push a product that is in them, parents first. A category no product is in yet has nothing on the Square side.

After that, your name, your page address built from the slug, your page title and your page description are kept in step with what you have here. That work happens on the next push of a product in the category. So a rename you make today shows up when that category next has something to publish.

Square is also the one integration that adds to your tree. The catalog read when you first connect, and any re-sync you start later, creates a category here for each Square category on a product it is importing, nested to match.

It looks for a category of the same name in the right place first and reuses that one. A new one takes the Square page address as its slug, and the Square page title and description as its meta fields. Deleting the category here later deletes the Square one, as [the Square integration](/integrations/square) describes.

### On Shopify

Your category becomes a collection, one per connected account, created as soon as the category exists and before any product goes into it.

The address comes from your slug with `cat-` on the front, so the category `shoes` becomes the collection `cat-shoes`. A brand of the same name becomes `brand-shoes` instead, so the two never collide.

The push sends your name as the title, plus your description, your meta fields, your banner image and which products are in it. When a category has no banner, your thumbnail goes instead. So a category you only gave a thumbnail still goes to the store with an image.

A Shopify collection has no parent of its own. So the shape of your tree is written onto it as a set of fields the PIM owns: what kind of thing it is, its identifier there, its parent, its direct children, its depth and its path. You cannot edit any of them from the Shopify admin, and they are rebuilt on every push.

Moving a category re-pushes everything under it, because the depth and the path of every one of those changed. One move near the top of your tree queues a collection update for the whole branch hanging below it. That is normal and it settles on its own.

Sometimes the address your category wants is already taken by a collection the PIM cannot prove is its own. The push then fails with `The handle 'cat-shoes' is already used by another collection in Shopify. Use a unique slug for this category.` It never silently settles for a numbered variation, so the fix is yours: give the category a different slug.

<Warning>
  Shopify addresses are flat and your slugs are only unique per parent. `Accessories` under `Phones` and `Accessories` under `Laptops` both want the same collection address, and the second one pushed reports the conflict. Give one of them a different slug.
</Warning>

Doing that before you connect a store saves you a failed push and a sync error to clear.

Membership goes one way. On every push, the products that go in your collection are decided and the difference is written. That is never read back, so a product you add to the collection inside Shopify is not a product the PIM knows about. A read from Shopify leaves your categories alone entirely: it creates none, and it never changes which categories a product is in.

### On BigCommerce

Your category becomes a category in your BigCommerce tree, nested the way you nested it, with the address built from your slug. The push sends your name, your description, your page title and your meta description, and your category is created visible.

Three things about BigCommerce matter before you connect one.

**BigCommerce takes 8 levels.** A category of yours that is deeper stops with a message saying it is nested too deeply, and it stops for that one category only. Everything above it still goes to your store, and your tree here is untouched.

Your category name is also cut to 50 characters on the BigCommerce side. The name you have here is not changed.

**Parents go first, and that is handled for you.** A category whose parent has not got to BigCommerce yet cannot be created there. The parent is queued instead and your child is tried again shortly. You may see it wait for a moment, and you do not have to do anything.

If BigCommerce already has a category of the same name in the same place, and the PIM cannot claim it, your push stops and says so. Rename one of the two, and [the BigCommerce integration](/integrations/bigcommerce) has the rest.

### The Shopify Category field is not one of your categories

<Info>
  `Shopify Category` on a product is not one of the categories on this page. It is one choice out of Shopify's own published list of product types, which is re-read from Shopify every week.
</Info>

You find it in the `Taxonomy` section of the product dialog, right under the `Categories` field, behind its own picker. It tells Shopify what kind of thing your product is. Shopify publishes that list in English only, so the names in the picker stay English whatever language you read the app in.

The two never touch each other. Setting it does not put your product in any of your categories, and your categories never write it. The first sync from a Shopify store can fill it in, because the store sends back the classification it has. So a product you imported from one may arrive with it already set.

## When something goes wrong

### Checking whether your category got to a store

Open your category and look at the badges in the dialog header. You get one badge per connected account, and hovering one opens a panel with that account's status, when it was last pushed, and the text of any error.

| Status | What it means |
| --- | --- |
| `Synced` | Your category is live on that account and up to date |
| `Not in integration` | Nothing has been created there yet |
| `Pending creation` and `Creating…` | Your first push is queued or running |
| `Pending update` and `Updating…` | A change you made is queued or running |
| `Removing…` | It is being deleted from that account |
| `Failed` | Your push was rejected, and the panel shows you the message |
| `Sync off` | You turned the `Sync` switch off for that account |
| `Account paused` | The account is paused, so nothing is being sent |
| `Needs re-authentication` | You have to renew the connection to that account |

A `Failed` badge on one account never blocks your others. Fix what the message asks for and your next push clears it. For every error across your whole catalog at once, see [integrations](/pim/integrations).

### Messages in the category dialog

| What you did | What you get |
| --- | --- |
| Typed a name a sibling already uses | A message naming the parent it checked, or saying it checked the root level |
| Typed a slug a sibling already uses | The same message, about the slug |
| Cleared the slug and tried to save | A message saying the slug is required |
| Saved after someone else did | A banner saying the category changed, with a `Reload` action |
| Tried to close with unsaved edits | A dialog with `Discard` and `Keep editing` |

### Messages when you delete or merge

| What happened | What you get |
| --- | --- |
| Your category still has children | A message counting them and blocking the delete |
| Products are still in your category | A message counting them and blocking the delete |
| A row in a bulk delete could not be taken | That row reports children, products, or both |
| A merge is already running on one of these | `Merge` is off, and tells you so when you hover it |
| Someone changed a category mid-merge | A message asking you to reload and try again |
| A category was deleted before the merge ran | A message asking you to reload and try again |
| The new name you typed is already taken | A message asking you for a different name |
| The merge ran too long and was started again | A message asking you to try again |

Nothing is retried for you after a failed merge, and nothing was half done. A merge either completes or leaves both categories exactly as they were. Start it again once you have fixed what the message named.

### Messages from a categories import

Five of the six things that go wrong here are about the order of your file or the shape of your tree.

| What your file asked for | What it means |
| --- | --- |
| A category under a parent that is not there yet | Sort your file top down, roots first |
| A move under a parent that is not there yet | The same, or fix the path in your file |
| A category as its own parent | Your path points at the row itself |
| A move into the category's own branch | Your target is one of its own children |
| A category that is already there | Use update mode to change it instead of creating it |
| A name a sibling already uses | Pick a different name, or move it elsewhere |

Every one of these fails only the row it is on. The rest of your file still imports, and you re-import the failed rows once you have fixed them.

## Where to go next

<Columns cols={2}>
  <Card title="Products" icon="package" href="/pim/catalog/products">
    The dialog where a product gets its categories, and the order that sets the first one.
  </Card>

  <Card title="Specifications" icon="ruler" href="/pim/catalog/specifications">
    How a specification group is scoped to categories, and what an exclusion changes.
  </Card>

  <Card title="Imports" icon="upload" href="/pim/uploads/imports">
    Loading a whole tree from a file, and what happens to a row it cannot place.
  </Card>

  <Card title="Integrations" icon="plug" href="/pim/integrations">
    Per-account settings, and where a sync error shows up across every category at once.
  </Card>
</Columns>
