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

# Exports

> An export turns any part of your catalog into a spreadsheet file that you can download and open in Excel or Google Sheets.

An export turns part of your catalog into a spreadsheet file. You choose what goes in it, the PIM builds the file, and you download it. You can then open it in Excel, Google Sheets, Numbers, or anything else that reads a spreadsheet.

Most people export for one of three reasons: to look at their data outside the PIM, to send a list to someone who does not have an account, or to make a lot of edits in a spreadsheet and send the file back through [imports](/pim/uploads/imports).

You will find all of this under `Uploads`, in the `Exports` tab. The `Create export` button above the table opens a dialog over the page with four steps in it. The table under it lists every export your team has run, with a status on each one.

There is a second, smaller thing also called an export: instead of a spreadsheet about your images and documents, you can download the actual files in a ZIP. That works differently and it has its own section further down.

## Before you start

Three things matter before your first export. Everything else on this page can wait until you need it.

### What your role lets you do

Whatever your role, you can create an export, cancel it, rename it, save a template and download a file. Nothing on this page is above your level.

There is one thing to know if you are an Editor. You can export but you cannot import, so you see the `Create export` button and no `Create import` button beside it. Roles are set in [team, roles and permissions](/team#what-each-pim-role-can-do).

### Your file is deleted after 14 days

<Warning>
  14 days after an export finishes, the PIM deletes the file and removes its row from the table. Nothing counts down and nothing warns you first. If you still need the file, run the export again.
</Warning>

This matters more than it sounds. An export is not a backup and it is not storage. Treat it as something you make, download, and keep somewhere yourself.

### Only one export runs at a time

Your whole organization shares one lane. If someone starts an export while yours is still running, theirs waits in line and starts when yours is done. Downloads of asset files wait in the same line.

## How to export

<Steps>
  <Step title="Open the export dialog">
    From `Uploads`, select the `Exports` tab and click `Create export` above the table. The dialog asks how you want to start. Click `Continue` under `Start from scratch`, or pick one of your team's saved templates.
  </Step>

  <Step title="Choose what to export">
    The first screen inside the dialog is called `Entities`. It shows eight cards, one for each kind of record. Click `Products`, or click any combination of cards you want in the same export.
  </Step>

  <Step title="Choose your columns">
    On `Configure`, every column is already checked, so your job here is unchecking the ones you do not need. If you only want part of your catalog, click `Add filters`.
  </Step>

  <Step title="Choose the file format">
    On `Options`, pick `CSV` or `XLSX`. You can leave the other settings on this screen alone the first time.
  </Step>

  <Step title="Name it and export">
    On `Review`, read the summary, give the file a name if you want one, and click `Export`.
  </Step>
</Steps>

That is the whole flow. Your export appears at the top of the table right away, moves through a few statuses while it builds, and shows a `Download` button when it is ready. You also get an email when it finishes.

Everything below explains those four screens one at a time. You do not need any of it for a simple export.

## Every option in detail

The dialog has four screens of its own: `Entities`, `Configure`, `Options` and `Review`. The sections below follow them in order. Two of the screens do enough work to be split in half, so a couple of step numbers appear twice.

You can always click `Back`, or click an earlier step marker at the top of the dialog, to change something. You cannot skip ahead to a screen you have not filled in yet.

### Step 1: Choose what to export

`Entities` shows eight cards. Each card is one kind of record in your catalog, and each one becomes its own sheet of data. Pick one card or pick several.

| Card | One row is |
| --- | --- |
| `Products` | One variant, or one product. See why one product becomes several rows |
| `Brands` | One brand, with its slug, websites, description, SEO fields and image links |
| `Categories` | One category, parents before children, with its full path and level |
| `Tags` | One tag, with its name and description |
| `Spec Groups` | One group, with the categories it applies to |
| `Spec Definitions` | One definition, with its group and its required and unique flags |
| `Spec Values` | One allowed value, with its definition and group |
| `Assets` | One row per assignment. A file used on 3 products gives you 3 rows |

Picking several cards does not mix them together. You get one file per card, delivered inside a single ZIP.

The `Next` button stays gray until you have picked at least one card.

### Step 2: Choose your columns

`Configure` is where you decide which columns end up in your file. Every column is checked when you arrive, so the work here is taking things out, not putting things in.

If you picked more than one card on the previous screen, this screen handles one card at a time. Use the dropdown next to the dialog title to switch between them.

Here is what you are looking at:

| What you see | What it does |
| --- | --- |
| Groups you can open and close | Columns are sorted into groups like `Basics` and `Pricing`. Only one group opens at a time, and `Show` and `Hide` are on the right of each one, next to a count of how many columns you kept |
| A `Search` box | Type to narrow the list. Groups with no matching column disappear while you type |
| `Select all` and `Clear all` | Check or uncheck everything the search is currently showing you, not everything on the card |
| A grayed-out column | You cannot remove it, because one of your filters uses it. Delete the filter first |
| `No matching fields` | Your search matched nothing. Clear the box and try a shorter word |
| `Select at least one column to export.` | You unchecked everything on this card. Check something, or go back and unpick the card |

The `Next` button stays gray until every card you picked still has at least one column checked.

<AccordionGroup>
  <Accordion title="The full list of column groups, in the order they appear">
    `Basics`, `Hierarchy`, `Taxonomy`, `Identifiers`, `Assets`, `Pricing`, `Inventory`, `Variants`, `Specifications`, `Dimensions`, `File`, `Assignments`, `SEO`, `Customs`, `Extra`, `Audit`.

    You only see the groups that make sense for the card you are on, so a `Tags` export shows far fewer than a `Products` export. A column the dialog cannot place in any group is filed under `Other`.
  </Accordion>

  <Accordion title="Where your column headers come from">
    Your file gets the same column names you see in this list. Check `Barcodes` here and your spreadsheet has a column called `Barcodes`.

    Those names are written in whatever language the app was in when you clicked `Export`. The same setup gives one person `Precio` and another person `Price`, so agree on a language before you share a file with your team.
  </Accordion>

  <Accordion title="How column order is decided">
    Columns come out in the order you selected them. If you uncheck a column and check it again, it moves to the end of the file.

    You cannot drag columns into a different order and you cannot rename them here. If the order matters, rearrange it in your spreadsheet app after that.
  </Accordion>
</AccordionGroup>

System columns, such as record IDs and timestamps, are not in this list. They start off, and you turn them on in step 3 under `Advanced`.

### Step 2: Filter your rows

Without filters you get the whole table. Filters are how you export a slice of it instead, like only your active products or only the brands with no products attached.

Click `Add filters` on the same `Configure` screen. A panel called `Export filters` opens, and every card you picked keeps its own separate filters.

| What you click | What it does |
| --- | --- |
| `Add condition` | Adds an empty filter row. You always start with one already there |
| `Filter by` | A dropdown listing the columns you can filter on. Pick one |
| `Condition` | A dropdown of comparisons, like `contains` or `is empty`. The choices change depending on the column you picked |
| `Value`, or `From` and `To` | Type what you are looking for. Conditions like `is empty` and `is true` need no value, so these boxes do not appear |
| `Match` | Set it to `All conditions` to require every filter, or `Any condition` to accept any one of them |
| `Remove filter` | Deletes that one filter row |
| `Apply` | Saves your filters. It stays gray until at least one row is complete |
| `Cancel`, clicking outside the panel, or pressing Escape | Asks you whether to discard your filter changes before closing |
| The × next to `Add filters` | Clears every filter on the card you are currently looking at |

The conditions you get depend on what kind of column you picked:

| Kind of column | Conditions you get |
| --- | --- |
| Text | `contains`, `does not contain`, `starts with`, `ends with`, `equals`, `is empty`, `is not empty` |
| A number or a count | `equals`, `greater than`, `greater than or equal`, `less than`, `less than or equal`, `is empty`, `is not empty` |
| Money | The same as a number. Type the amount the way you would type it in the app |
| A fixed list, like `Status` or `Condition` | `is any of`, `is none of`, `equals` |
| Yes or no, like `Has Variants` | `is true`, `is false` |
| A date | `before`, `after`, `between` |
| A list of things, like `Brands` or `Categories` | `is any of`, `is empty`, `is not empty` |
| Asset size | `equals`, `does not equal`, `is any of`, across nine size ranges from `< 100 KB` up to `> 100 MB` |

A filter row you only half filled in is thrown away when you click `Apply`, and nothing tells you it happened. If your results look wrong, reopen `Export filters` and check that every row still has all three parts.

<Note>
  Filters you set on your products page do not come with you. The export dialog has its own filters and reads nothing from your catalog tables, and those tables cannot export a selection on their own.
</Note>

Dropdowns that list your own records, such as brands or categories, show up to 500 choices. `Created By` and `Updated By` show up to 1,000. If a card has nothing you can filter on, the panel tells you so instead of showing empty dropdowns.

### Step 3: Choose the file format

`Options` is where you decide what kind of file comes out.

| Setting | Your choices |
| --- | --- |
| `File format` | `CSV` or `XLSX` |
| `Delimiter` | Four choices, listed below. CSV only |
| `Date format` | `SQL (YYYY-MM-DD)` or `ISO 8601 (YYYY-MM-DDTHH:mm:ssZ)` |
| `Compression` | `None`, `GZIP` or `ZIP` |

**Which format should you pick.** Choose `XLSX` if you are going to open the file and work in it, because dates come out as real date cells you can sort and filter. Choose `CSV` if the file is very large, or if you are going to feed it to another system. An `XLSX` takes 1,000,000 rows, and a `CSV` has no row limit at all.

**The delimiter is the character between your values in a CSV.** Your four choices are `Comma (,)`, `Semicolon (;)`, `Tab` and `Pipe (|)`. A comma is the normal one. Pick a semicolon if you or your teammates use a Spanish or European version of Excel, which often expects one. This setting does nothing for an `XLSX`.

**Both date formats include the time**, even though the labels only show the date. `SQL (YYYY-MM-DD)` writes `2026-05-02 14:30:45`, and `ISO 8601 (YYYY-MM-DDTHH:mm:ssZ)` writes `2026-05-02T14:30:45+00:00`. The setting only touches the `Created At` and `Updated At` columns.

**Compression is only yours to choose when you export one card.** Pick a second card and the setting locks itself to `ZIP` and grays out, because you now have more than one file to deliver. Go back to a single card and your earlier choice returns. Nothing gets compressed just because it is large.

<Note>
  Exporting several cards as `XLSX` gives you a ZIP with one `.xlsx` file inside per card, each with its own sheet. You do not get a single workbook with several tabs, and no setting will give you that.
</Note>

### Step 3: Set the advanced options

`Advanced` is at the bottom of the same `Options` screen, with one tab for each card you picked. Most exports never need anything in here, and a card with nothing to set says so.

| Setting | Starts as | What it does |
| --- | --- | --- |
| `Include system fields` | Off | Adds the record ID, `Created At`, `Updated At`, `Created By (UUID)` and `Updated By (UUID)`. Products also get `Variant ID`, and assets also get `Content Hash` and `Object Path` |
| `Include currency overrides` | Off | Adds your per-market prices next to your main prices. Products only, and only while you still have a price column checked |
| `Array separators` | A pipe between values, and `>` between the parts of a category path | Changes the character used when several values share one cell |

**Turn on `Include system fields` when you plan to import the file back.** The IDs it adds are what lets an import find your existing records instead of creating new ones. It is all or nothing per card, so you cannot add just one of those columns.

Despite its name, `Created By (UUID)` gives you a readable name and not an ID. If a person did not make the change, you get the reason instead: `Import`, `Data source`, `Integration` or `System`.

**Turn on `Include currency overrides` if you sell in more than one currency.** Every price column you kept gets a partner column beside it, with something like `EUR=27.50|GBP=24.00` in it. There are five of them: `Price Overrides`, `Cost Overrides`, `Compare Price Overrides`, `MAP Overrides` and `MSRP Overrides`. You only get the partner columns whose price column you kept.

**Array separators are for cells with a list in them.** A product with three tags has to fit them into one cell, so they come out as `Summer|Sale|New`. If your data already contains pipes, change the separator here to something your data does not use. You get one box per list the card can produce, each takes up to 3 characters, and clearing a box puts the default back.

Two details are easy to get wrong. The pipe inside a currency override cell is always a pipe, whatever you set here. And your file does not record which separators you chose, so write them down if you plan to import it again.

### Step 4: Review and name your file

`Review` shows you a panel called `Export summary` before anything runs.

| Row | What it tells you |
| --- | --- |
| `Entities` | The cards you picked |
| `File format` | Your format, plus the delimiter if you chose CSV |
| `Date format` | Which date style you chose |
| `Compression` | What you will actually get, so several cards say ZIP here |
| `System fields` | Whether they are included, excluded, or on for some cards and not others |
| `Filters` | How many filters you set. Hover over the row to read them |

**To name the file yourself**, check `Custom file name (optional)` and type a name of up to 50 characters. You do not type the extension, because the PIM adds it for you.

Your name gets cleaned up before it is used, and this surprises people. Letters, numbers, hyphens, underscores and periods come through as you typed them. Everything else, spaces included, turns into an underscore. Repeated underscores collapse into one, and any at the start or end are trimmed off. So `My Export (2026)` is allowed, and what you get is `My_Export_2026`.

The only place that change is shown to you is the `Will be saved as` line under the box, so read it before you click `Export`. For a ZIP, that line also lists what is inside.

**If you skip the name**, the PIM builds one from what you exported and when.

| You exported | You get a file named like |
| --- | --- |
| One card | `Products_Apr_18_2026_1430.csv` |
| Several cards | `Multi_Export_Apr_18_2026_1430.zip` |
| Asset files | `Assets_Apr_18_2026_1430.zip` |

That first word is always in English, whatever language you use the app in.

Closing the dialog before you finish loses everything you set up. You are asked to confirm first, with `Discard` and `Keep editing`, and clicking outside the dialog or pressing Escape does the same thing. There is no draft to come back to.

### Save a setup as a template

If you build the same export every month, save it once and load it next time. Check `Save as template (optional)` on `Review` and give it a name of up to 50 characters. Anyone in your organization can then load it.

Loading a template fills in the whole dialog and jumps you right to `Review`, so you can check it and click `Export`. Nothing comes with the PIM, so your list is empty until someone on your team saves the first one.

| A template remembers | A template does not remember |
| --- | --- |
| The cards and the columns you picked | The column names, which are read fresh every time you export |
| Your filters | Whatever you typed into the field search box |
| Your separators | |
| `Include system fields` and `Include currency overrides` | |
| The format, delimiter, date format and compression | |
| Your custom file name | |

Because the column names are read fresh, a template you save today keeps giving you current names after someone renames a field or after you switch the app to another language.

<Note>
  A template only fills in the dialog. It never runs on its own, so saving one does not give you a scheduled or repeating export.
</Note>

You cannot edit a template. To change one, delete it with the × next to its name and save a new one. You are asked to confirm the delete, and deleting a template does not touch the exports you already ran with it.

Two things stop you from saving a template. A name someone already used is rejected, and so is a setup that exactly matches a template that already exists, which tells you which one it matches.

### Download the actual files instead of a spreadsheet

Everything above produces a spreadsheet about your records. If what you want is the images and documents themselves, do this instead: go to your [asset library](/pim/assets), select the assets you want, and click `Download`.

The PIM puts those files into a ZIP and it shows up in the same exports table, with `ZIP` in the `Format` column. There is no dialog and nothing to configure.

| Question | Answer |
| --- | --- |
| What each file is called | Its original name, or its display name plus the extension, or the asset ID with `.bin` on the end |
| Two files with the same name | The second gets `-1`, the third gets `-2`, and so on |
| Whether it is compressed | No. Images and PDFs are already compressed, so the ZIP just puts them together |
| A file that cannot be fetched | It is skipped and the ZIP still finishes. You are not told which one was missing |

### Limits

| What | Limit |
| --- | --- |
| File formats | CSV and XLSX. A ZIP of asset files is the only other option |
| Rows in an XLSX | 1,000,000. Anything bigger comes out as a CSV instead |
| Rows in a CSV | No limit |
| Filters per record type | No limit |
| Choices in a filter dropdown | 500. `Created By` and `Updated By` show up to 1,000 |
| Your own file name | 50 characters |
| Template name | 50 characters |
| A name you type into `Rename` | 250 characters |
| A separator you type | 3 characters |
| Variant option columns | 50 pairs |
| Exports at once | One per organization. The rest wait in line |
| How long the file lasts | 14 days |
| How long a download link lasts | 1 hour, and you get a new one on every click |
| How long the image links inside the file last | 7 days |

### What an export cannot do

| You cannot | Do this instead |
| --- | --- |
| See a preview, a row count or a file size before you run it | Run it and read the `Rows` and `Size` columns |
| Schedule an export or repeat it every week | Set up a [data source](/pim/uploads/data-sources#how-to-set-up-a-data-source), which brings data in |
| Re-run or duplicate a finished export | Save a template and start from it next time |
| Retry a failed export | Build it again in the dialog |
| Export the rows you selected or filtered in a catalog table | Use the filters inside the export dialog |
| Get a PDF, JSON, XML or Google Sheets file | Use CSV or XLSX |
| Email the file to someone else, or push it to SFTP or cloud storage | Download it and send it yourself |
| Edit a template | Delete it and save a new one |

## What your file looks like

Two things about the file surprise people the first time. Your row count is higher than your product count, and some columns cannot be sent back in. Both are explained here.

### Why one product becomes several rows

A spreadsheet has one row per line of data, and a product with variants is more than one line of data. So a `Products` export gives you one row per variant, and your row count usually comes out higher than your product count.

- A product with a single variant and no options is **one row**, with everything on it.
- Anything else is **one row for the product, then one row per variant**. A product with 4 variants gives you 5 rows. A product with options but only one variant still gives you 2 rows.

The product row has the shared information, and each variant row has what is different about that variant.

| Columns | Product row | Variant row | Product with no options |
| --- | --- | --- | --- |
| `Slug` and `Currency` | Filled | Filled | Filled |
| `Title` | The product title | The variant name, like `Red / Small` | The product title |
| `Description`, `Status`, `Condition`, `Product Type`, `Brands`, `Categories`, `Tags`, `Specifications`, SEO and notes | Filled | Empty | Filled |
| `Option 1 Name` and the rest | Filled | Filled | Filled |
| `Option 1 Value` and the rest | Empty | Filled | Filled |
| `SKU`, barcodes, prices, stock, dimensions and customs | Empty | Filled | Filled |
| Image and file links | The product's | The variant's, with nothing borrowed from the product | The product's |
| `Product ID` | Filled | Filled | Filled |
| `Variant ID` | Empty | Filled | Filled |

So 100 products where 20 of them have variants gives you well over 100 rows, and the `Rows` column in the table counts rows and not products. If you are not sure which of your products have variants, see [variants](/pim/catalog/variants).

How many option columns you get depends on your biggest product, not on the ones in the file. You get an `Option N Name` and `Option N Value` pair for every option that product uses, up to 50 pairs, and products with fewer options simply leave those columns empty. If no one has ever used options, you will not see a `Variants` group at all.

### How values are written in the file

| Column | What you get in the cell |
| --- | --- |
| A price or a cost | Just the number, with no currency symbol, so `29.99` in dollars, `1500` in yen and `1.500` in dinars |
| `Currency` | Which currency the money columns on that row are in |
| A measurement | The number, in the unit named by the column next to it |
| A unit column | Empty whenever the measurement itself is empty |
| `Track Inventory`, `Is Required` and `Is Unique` | `Yes`, `No`, or nothing |
| `Status` and `Condition` | Capitalized words, like `Active` and `Open Box` |
| `File Size` | Text you can read, like `72 KB`, and not a number you can add up |
| A category | The full path, like `Electronics > Phones > Smartphones` |
| An image, logo, banner or file link | A web link into your [assets](/pim/assets) |
| Anything empty | An empty cell, never the word `NULL` |

A CSV opens correctly in Excel with no extra steps, including accents and other special characters. An XLSX is a single sheet with the header row in bold.

<Warning>
  The image links inside your file stop working 7 days after the file is built. Send someone a CSV and its images break after a week, even though the file itself still downloads for 14 days.
</Warning>

### Which columns you can import back

Most of a products export goes right back in through [imports](/pim/uploads/imports), column names and all. These are the ones that do not.

| Card | Comes out, cannot go back in |
| --- | --- |
| Products | `Currency`, `On-hand Stock`, `Supplier Stock`, `Supplier Cost`, the five currency override columns and the four audit columns |
| Brands, Categories, Tags | Every count column, plus `Parent Category` and `Category Level` on categories |
| Spec Groups, Spec Definitions | `Definition Count`, `Category Count`, `Value Count` and `Excluded Category Count` |
| Spec Values | `Spec Path`, which only exists in exports, and `Product Count` |
| Assets | `MIME Type`, `Kind`, `File Size`, `Width (px)`, `Height (px)`, `File Extension`, `Assignment Count`, `Content Hash` and `Object Path` |

The stock and cost columns come from your feeds and your channels, so no import can write them. [Inventory](/pim/catalog/inventory) explains where each one comes from. The `Title` on a variant row is ignored on the way back too, since the PIM builds that name from the options.

`Product ID` and `Variant ID` are the useful exception. Turn on `Include system fields`, leave those columns in the file, and an import can match your rows to your existing records. That is what makes a full round trip work.

## When something goes wrong

### Watching your export run

Your export appears in the table right away and moves through these statuses:

| Status | What it means |
| --- | --- |
| `Queued` | Something else is running. Yours has not started |
| `Pending` | Yours is next in line |
| `Processing` | Yours is being written. You see a percentage |
| `Completed` | Done, and ready to download |
| `Failed` | Done, with nothing to download |
| `Cancelled` | Done, with nothing to download |

The percentage is the only progress you get, and there is no time estimate. An export still running after 2 hours is marked `Failed` on its own, and the row does not tell you why. Nothing is retried for you, so build it again in the dialog.

Wherever you happen to be in the app, a small message pops up when your export finishes, whether it completed, failed or was canceled.

### Reading the exports table

| Column | What it shows |
| --- | --- |
| `File` | The file name. Quick search only looks in this column |
| `Entity` | What you exported. Hover to see all of them |
| `Filters` | How many filters you used. Hover to read them |
| `Format` | What you actually get: `CSV`, `ZIP/CSV`, `GZ/XLSX` or `ZIP` |
| `Size` | How big the file is, once it is finished |
| `Status` | Where it is, with a percentage while it runs |
| `Rows` | How many rows were written. Hover for a breakdown by card |
| `Created at` | When it was started |
| `Created by` | Who started it |

The `Entity`, `Format` and `Status` dropdowns above the table only list values your team has actually used, so a short list there is normal.

### Rename, cancel and download

| Action | You can use it when | What you get otherwise |
| --- | --- | --- |
| `Rename` | The export has finished | A message telling you to wait for it to complete |
| `Download` | The export finished and the file is still there | A message saying it is not ready, or `Downloading...` while it works |
| `Cancel` | It is queued, pending or running | A message telling you it already completed, failed or was canceled |

Canceling leaves you with nothing to download. The file is only saved at the very end, so you never end up with half of one. If the export happened to finish in the moment you clicked, the PIM tells you the cancel did not go through.

`Rename` opens a small dialog with a `File Name` box, up to 250 characters. You only change the name, never the extension, and a name with no usable characters at all is rejected. Expect one oddity here: an export that came out as a ZIP or a `.gz` still shows `.csv` or `.xlsx` after you rename it.

### Getting your file

Click `Download` in the table and you get a link that works for 1 hour. Click it again later and you get a fresh one, so an expired link is never a problem.

Whoever created the export also gets an email when it is ready, written in their own language. No one else is notified, and there is no way to send the file to an address you type in. So there are exactly two ways to get your file: the button in the table, and the button in that email.

| Part of the email | An export | Asset files |
| --- | --- | --- |
| Subject | `Export ready: {fileName}` | `Your files are ready: {fileName}` |
| Heading | `Export ready` | `Your files are ready` |
| Status | `Complete` | `Complete` |
| Details | `Export type`, `File`, `Rows`, `Organization` | `Export type`, `File`, `Files`, `Organization` |
| Button | `Download export` | `Download ZIP` |

You need to be signed in for the button in the email to work. If the file is already gone, the button just takes you back to the exports table. You can turn this email off under `Export ready` in your notification settings.

### Error messages

| Message | What to do |
| --- | --- |
| `Select at least one column to export.` | Check at least one column, or go back and uncheck that card |
| `This field can't be removed because an active filter depends on it.` | Delete the filter first, then remove the column |
| `A template with this name already exists` | Use a different name, or delete the old template |
| `File name can only contain letters, numbers, hyphens, and underscores` | Nothing you typed was left after the cleanup. Use a letter, a number, a period, a hyphen or an underscore |
| `The export started, but the template could not be saved: {error}` | Your export is fine and still running. Save the template next time |
| `This template has no entities configured. Please choose another template.` | Delete that template and save a new one |
| `Failed to create export job` | Try again. Nothing was queued, so you are not creating a duplicate |
| `Export is not ready for download.` | It has not finished yet, or the file is already past its 14 days |
| `Failed to rename` | Try renaming it again |
| `Failed to delete template` | Someone deleted it before you. Reload the page |
| `An unexpected error occurred` | Reload the page and check the status before trying anything again |

### Two things that happen with no message

Nothing on screen tells you about either of these, so they are worth knowing about.

An `XLSX` over 1,000,000 rows comes out as a `CSV` instead, and the only clue is the `.csv` on the end of the file name.

A filter row you only half filled in is dropped when you click `Apply`. If your results look wrong, that is the first thing to check.

## Where to go next

<Columns cols={2}>
  <Card title="Imports" icon="upload" href="/pim/uploads/imports">
    The same file going the other way, and the four modes it can be read in.
  </Card>

  <Card title="Data sources" icon="rss" href="/pim/uploads/data-sources">
    A file that arrives on its own schedule, and what it does differently.
  </Card>

  <Card title="Variants" icon="layers" href="/pim/catalog/variants">
    Why one product becomes several rows, and what an option is.
  </Card>

  <Card title="Assets" icon="images" href="/pim/assets">
    Where the image links point, and how a bulk download becomes an export.
  </Card>
</Columns>
