> ## Documentation Index
> Fetch the complete documentation index at: https://docs.exclusivo.one/llms.txt
> Use this file to discover all available pages before exploring further.

# Importing a shop

> Bringing a Shopify or Etsy catalogue across, and re-running it safely.

**Catalogue → Import a shop.** Either connect the account, or upload the export
file.

| From    | How                                                            |
| ------- | -------------------------------------------------------------- |
| Shopify | Connect the account, use a custom app token, or upload the CSV |
| Etsy    | Connect the account, or upload the CSV                         |

If a connect button is greyed out, that source isn't configured on our side yet.
CSV import still works either way.

## You can run it more than once

Every imported product remembers where it came from. Run the import again and:

* **Nothing changed** — skipped entirely. No writes, no re-downloading images.
* **The text changed** — text updated, your hosted images left alone.
* **The images changed** — images fetched again.

So you can keep re-importing as your old shop changes, without ending up with
three copies of everything.

<Note>
  The importer only ever fills in its own fields. Anything you set up in Stashed
  afterwards — a revenue split, a bundled download, which warehouse something
  ships from — survives a re-import untouched.
</Note>

## If you're importing a Shopify CSV

Shopify's export has one row per **variant**, and only the first row of each
product carries the product-level columns. We group them back together for you,
but it's why the row count and the product count won't match.

Two other things in that file that would bite if we took them literally:

* `Option1 Name: Title` with `Value: Default Title` is Shopify's way of writing "this product has no options". It doesn't become an option group.
* Variants Shopify wasn't tracking stock for export with `Variant Inventory Qty: 0`. Taken at face value that would arrive with your whole catalogue out of stock.

## If you're importing an Etsy CSV

<Warning>
  Etsy's CSV doesn't include the listing ID, so there's nothing stable to match a
  re-run against. We fall back to the SKU, then the title.

  Which means: **rename a listing on Etsy, re-import, and you get a duplicate.**

  Connecting your Etsy account instead of using the CSV fixes this, because the
  API gives us real listing IDs.
</Warning>

Etsy variations don't carry a price per combination, so they come across as
options without prices. Building out every combination would invent a hundred
variants you never made.

## While it's running

Big catalogues import in chunks, so nothing times out. Leave the tab open until
it says it's finished — close it and it stops where it got to, and reopening the
import page picks up where it left off.

You'll get counts at the end: created, updated, skipped, and anything that
needed a warning.

## Once it's done

<AccordionGroup>
  <Accordion title="Check your stock levels">
    Especially after a Shopify CSV. Make sure things you don't track stock for
    haven't landed as out of stock.
  </Accordion>

  <Accordion title="Check your weights">
    Live carrier rates need them and not every export includes them.
    → [Shipping](/stashed/money/shipping)
  </Accordion>

  <Accordion title="Check the product types">
    A download that's arrived as a physical product will start asking for
    shipping. → [Products](/stashed/catalogue/products)
  </Accordion>

  <Accordion title="Add redirects for your old URLs">
    If you're moving a live shop, people have linked to those addresses.
    → [Redirects](/stashed/storefront/redirects)
  </Accordion>
</AccordionGroup>

## Your credentials

Connected accounts are stored encrypted, and the connect flow is tied to your
shop and your login, so nobody can attach their shop to your account or the
other way round.
