# Connect Shopify

Link your Shopify store to OLET, approve the access it needs, and map each Shopify location to an outlet

Source: https://getolet.com/resources/help/integrations/connect-shopify/
Updated: 2026-10-15

Connecting Shopify links one Shopify store to your OLET account, so OLET can read your products, your inventory, and your locations.

This feature depends on your plan. Check Settings > Billing to see what your plan includes.

Do this before you start:

- **Create your outlets.** Shopify inventory is matched to the outlet you choose, and you can't choose one that doesn't exist. See [Outlets and registers](/resources/help/setup/outlets-and-registers/).
- **Check your Shopify store sells in US dollars.** OLET supports USD stores only. A store in another currency is refused, and OLET tells you why.

## 1. Start the connection

1. Go to **Integrations** and select the **Shopify** tile.
2. Select **Connect** in the top right. (To connect again later, select **Reconnect** on the **Settings** tab, under **Connection**.)
3. A **Connect Shopify** dialog opens asking for your **Store domain**.

Your store domain is the `.myshopify.com` address, like `my-store.myshopify.com`. It isn't the address customers type. To find it in Shopify, select **Settings** in the bottom-left corner, then **Domains**, and it's listed there.

If you don't know it, paste what you do have: your public store address, or the `admin.shopify.com` link in your browser bar. OLET looks it up and fills the field in, then tells you where the value came from ("Found from ...") so you can check it before continuing.

4. Select **Continue to Shopify**.

## 2. Approve the access Shopify asks for

Shopify takes over at this point and shows you what OLET is asking for. OLET asks to:

- **View products**, so your catalog can be imported.
- **View inventory** and **view locations**, so inventory can be brought across per location.
- **Update inventory**, so in-store sales can be sent to Shopify if you turn on inventory sync later.
- **View orders**, so OLET can see which items shipped or were restocked if you choose OLET to manage inventory.

OLET reads only which items shipped or were restocked, from where, and when. It doesn't read customer names, emails, phone numbers, addresses or notes.

The last two are requested now even though nothing uses them until you turn on [inventory sync](/resources/help/integrations/shopify-stock-sync/). Shopify treats a change to the requested access as a fresh approval, so asking once up front saves you approving the app a second time later.

Approve, and Shopify sends you back to OLET.

**Connected before orders access was added?** Your connection keeps working, but OLET can't read orders yet. In the inventory sync choice, OLET's own option is grayed out with "Reconnect Shopify to let Olet read orders." Reconnect, approve the access to orders on Shopify's screen, and the option becomes available.

## 3. Set up Shopify

A freshly connected store lands on **Set up Shopify**, a short wizard headed "A few decisions, once. Everything here can be changed later." **Skip setup** in the top right leaves it at any point, and then OLET stops sending you back to it.

The steps are:

1. **Products.** **Keep products in sync** is a switch, on by default, with the note "Changes made in Shopify reach Olet within seconds." Below it, a table says which Shopify fields reach OLET and how. **Import product images** is a checkbox you can turn off. Images are the slowest part, and leaving them off now doesn't stop you adding them later without re-importing. The table is explained in [Import from Shopify](/resources/help/integrations/import-from-shopify/).
2. **Preview.** OLET takes a fresh copy of your catalog and works out exactly what would happen. Nothing is written yet. Select **Import these products** when you're happy. The button also starts the import.
3. **Inventory.** Your products are already importing while you answer this. The question is **How should inventory sync?**, and you must answer it: **Shopify**, **Olet**, or **Not now**. Locations are asked here and nowhere else in setup, covered below. Back is turned off on this step, because the import has already started.
4. **Progress.** The import and the first inventory comparison, shown as a short list. You can wait, or select **Finish** and carry on. If something is still running, OLET shows a message when it's done, with an **Open Shopify** button.

Everything the wizard asks can be changed later on the **Settings** tab. The two inventory choices, and the checkbox "Apply the first sync without waiting for my review" (ticked by default), are covered in [Shopify stock sync](/resources/help/integrations/shopify-stock-sync/). What the preview shows and what it refuses is in [Import from Shopify](/resources/help/integrations/import-from-shopify/).

**Reconnecting a store** runs the same wizard with your saved choices filled in. It's titled **Review your Shopify settings** and says "You reconnected Shopify. We'll bring your catalog and inventory up to date using these settings."

## 4. Map your locations to outlets

This is the step people get wrong, and a wrong answer isn't obviously wrong: inventory lands in a shop that didn't receive it, and the numbers look plausible until someone counts.

OLET never guesses. Name similarity is tempting and unreliable, so you pick.

The location table shows one row per Shopify location:

| Location | Address | Olet outlet | Status |
|---|---|---|---|
| Main Warehouse | 14 Dock Road | Select an outlet... | Needs an outlet |
| Bridge Street Shop | 8 Bridge Street | Select an outlet... | Needs an outlet |

Open the dropdown in the "Olet outlet" column and pick the outlet that location's inventory belongs to. Nothing is stored until you select **Save locations**. The button stays disabled until every row has an answer. A "Location mapping saved" confirmation appears when it works.

### A worked example

You have two Shopify locations and two OLET outlets:

- Shopify: **Main Warehouse** and **Bridge Street Shop**
- OLET: **Bridge Street** and **Harbour Road**

Bridge Street Shop is the same physical shop as your Bridge Street outlet, so map it there. The warehouse isn't a shop you sell from at all: open its dropdown and choose **Don't import this location**. Harbour Road doesn't exist in Shopify, so nothing maps to it and its inventory stays exactly as it is in OLET. Then select **Save locations**.

The result:

| Shopify location | Olet outlet | Status |
|---|---|---|
| Main Warehouse | Don't import this location | Not importing |
| Bridge Street Shop | Bridge Street | Importing |

Two rules follow from that example:

- **One outlet per location.** An outlet already claimed by another location won't appear in the second dropdown. Two Shopify locations can't feed the same outlet.
- **"Don't import this location" is a real answer, not a blank.** It's a finished decision. The row shows **Not importing**, and OLET won't nag you about it or raise issues for the inventory it skipped.

While anything is unanswered, a message reads **Finish mapping your locations** and says how many locations still need an outlet: "No inventory is imported until every location has one, or is set to not import." Nothing is imported for a location with no answer. If you try to save with gaps, OLET lists the locations still unanswered.

### When you never see this step

The table appears in setup only when you choose Shopify or OLET to manage inventory on the **Inventory** step. Choose **Not now** and it's skipped.

If you have exactly one Shopify location, exactly one outlet, and no saved answers yet, OLET maps them for you and doesn't ask. If every Shopify location already has an answer from before, the step is skipped too, and your existing answers stand.

You can change any of this later on the **Settings** tab, in the **Locations** card.

## If it goes wrong

The connection can fail before it finishes. OLET tells you why with a "Couldn't connect" message on the integrations directory rather than leaving you guessing.

| What you see | What to do |
|---|---|
| Olet supports USD stores only. This Shopify store sells in *currency*, so it can't be connected. | Nothing to do here. A store selling in another currency can't be connected |
| That connection link expired. Try connecting again. | Start again from **Connect**. The link is only good for a short time |
| We couldn't verify the response from Shopify. Try connecting again. | Start again from **Connect** |
| Shopify didn't grant the permissions Olet needs (*the missing ones are listed*). Add them to the app's configuration, release a new app version, then connect again. | The named permissions are missing from the app's configuration in Shopify. Add them, release a new version of the app, then connect again |
| *Store* is already connected to another Olet account. Disconnect it there first. | Disconnect it from that account first. One Shopify store connects to one OLET account |
| The connection was cancelled before it finished. Nothing was changed. | You declined on Shopify's screen, or closed it. Connect again when you're ready |
| Shopify rejected the connection. Check the app credentials and try again. | Try once more. If it repeats, contact support@getolet.com |

## When a connection stops

Two things stop a working connection, and both show a **Needs attention** card with a **Reconnect** button at the top of every tab:

- **Your Shopify connection expired.** "Syncing stopped *time* ago. Reconnect your Shopify account to resume."
- **The Shopify app was uninstalled.** The same text. This also appears after you disconnect on purpose, because the connection is then closed the same way.

Select **Reconnect**, and your location answers are kept.

## Disconnecting

Go to the **Settings** tab and select **Disconnect** in the **Connection** card. A window asks "Disconnect Shopify?" and explains that OLET will stop syncing with Shopify and the stored credentials will be deleted. Select **Disconnect** to confirm.

**Products already imported stay in your catalog.** Nothing is deleted from OLET, and stock is unaffected. Reconnecting later re-uses your location mapping rather than making you redo it.
