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

# Connect Shopify

> Install Zippendo from the Shopify App Store and finish setup in the client so orders sync into your organization.

Connecting Shopify creates an **order channel** for that store. New orders sync into **Orders**, you can book shipments from them, and Zippendo can write fulfillment and tracking back to Shopify when you dispatch.

This walkthrough follows the client UI as it exists today. Connecting always starts in the Shopify App Store — Zippendo does not ask you to type a `myshopify.com` domain.

<Note>
  Live Shopify OAuth (the App Store listing and the Shopify admin consent screen) cannot be completed in the documentation environment. Those steps are described from the install flow in the product. Every Zippendo screen in the connect path is shown below.
</Note>

## What connecting does

After a successful connect, Zippendo:

* Creates a Shopify order channel for the store and shows it under **Order channels → Connected stores**.
* Registers order webhooks so new and updated orders arrive in near real time (`ORDERS_CREATE`, `ORDERS_UPDATED`, `ORDERS_CANCELLED`, `ORDERS_FULFILLED`, `ORDERS_PARTIALLY_FULFILLED`).
* Registers a carrier service named **Zippendo Shipping** so [live checkout rates](/docs/order-channels/shopify-checkout-rates) can appear in Shopify checkout when your plan supports third-party carrier-calculated shipping.
* Enqueues an initial order import based on the import range you chose on the connect screen.
* Turns **Fulfillment sync to Shopify** on by default: when you dispatch a shipment in Zippendo, the Shopify order is marked fulfilled with its tracking number. This does not book the carrier by itself.

You do not configure webhooks yourself in Shopify for this integration.

<Info>
  Already a paying Zippendo customer? Your existing subscription continues unchanged — installing the app does not move your billing to Shopify.
</Info>

## Before you start

* A **Shopify store** and permission to install apps (store owner or a staff account that can approve the scopes below).
* A Zippendo **organization**. If you install the app before you have an account, the connect screen lets you **Create a Zippendo account** or **Sign in**.
* At least one [sender address](/docs/settings/sender-addresses) if you want a default sender on connect. You can skip it and set **Default Address** later.
* A [connected carrier](/docs/tutorials/carriers) and [shipping rules](/docs/tutorials/shipping-rules) if you want checkout rates or method mapping to pre-fill shipments.
* Shopify **third-party carrier-calculated shipping** if you want live rates at checkout (included on Advanced and Plus; other plans may add it). Stores without it still sync orders — use [shipping method mapping](/docs/order-channels/shopify-shipping-method-mapping) instead.

Zippendo requests these Shopify scopes when you install:

* `read_orders` — import orders
* `write_fulfillments`, `write_merchant_managed_fulfillment_orders`, `write_third_party_fulfillment_orders` — write tracking back
* `read_shipping`, `write_shipping` — carrier service / checkout rates
* `read_products` — line-item weight, HS codes, origin, barcode
* `read_customers` — recipient name and email for labels

<Note>
  If your organization uses [brands](/docs/settings/brands), assign the **Brand** after connecting on **Orders & checkout**. The connect flow does not ask for a brand. Shopify store cards in **Connected stores** do not show a brand badge.
</Note>

## Connect the store

<Steps>
  <Step title="Open Available integrations">
    In the sidebar, go to **Order channels**. Open the **Available integrations** tab.

    <Frame caption="Shopify card on Available integrations">
      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/01-available-integrations-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=3d709da1f40381a4cb07be5eb5115f3a" alt="Order Channels Available integrations tab with Shopify, WooCommerce, and Custom channel cards. Shopify shows Import orders from your Shopify store and a Connect Shopify button" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/01-available-integrations-light.png" />

      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/01-available-integrations-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=54cdea70bfd693c6e01aa257189200a1" alt="Order Channels Available integrations tab with Shopify, WooCommerce, and Custom channel cards. Shopify shows Import orders from your Shopify store and a Connect Shopify button" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/01-available-integrations-dark.png" />
    </Frame>
  </Step>

  <Step title="Open Connect Shopify">
    On the Shopify card, click **Connect Shopify**. The modal title is **Connect your Shopify store**.

    <Frame caption="Connect Shopify modal">
      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/02-connect-modal-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=504a955f718aeed5205f48627ec5bf3e" alt="Modal titled Connect your Shopify store with three steps: open the App Store listing, install and approve permissions, then return to Zippendo to choose organization, sender address, and order import" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/02-connect-modal-light.png" />

      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/02-connect-modal-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=ef8d0b8d63272fe64a9602e7f2f045ef" alt="Modal titled Connect your Shopify store with three steps: open the App Store listing, install and approve permissions, then return to Zippendo to choose organization, sender address, and order import" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/02-connect-modal-dark.png" />
    </Frame>

    The modal lists the real next steps:

    1. Open the Zippendo listing in the Shopify App Store
    2. Install the app on your store and approve the permissions
    3. You are redirected back to Zippendo to choose organization, sender address and order import

    Click **Open Shopify App Store** (or **Cancel**). That button opens the listing in a new tab and closes the modal.
  </Step>

  <Step title="Install in Shopify (App Store and OAuth)">
    In the Shopify App Store, install **Zippendo** on the store you want to connect and approve the scopes.

    <Frame caption="Zippendo on the Shopify App Store — click Install, then approve scopes in your own Shopify admin">
      <img src="https://mintcdn.com/zippendo/80e9oqVywBPyYyWf/images/how-to/shopify-settings/10-shopify-app-store.png?fit=max&auto=format&n=80e9oqVywBPyYyWf&q=85&s=5808d15be83f228d22b89d7593bfbc37" alt="Shopify App Store listing for Zippendo with Install, pricing, and shipping features" width="2880" height="2200" data-path="images/how-to/shopify-settings/10-shopify-app-store.png" />
    </Frame>

    Shopify then sends you to Zippendo’s app entry URL. The API verifies the request and, if the shop is not already connected, starts OAuth immediately — there is no extra Zippendo page before Shopify’s consent screen.

    After you approve access, Shopify redirects to Zippendo’s OAuth callback. The callback stores a short-lived pending install (about 30 minutes) and sends you to `/shopify/connect?token=…`.

    Opening `/shopify/connect` without that token shows **Invalid request**:

    <Frame caption="Connect page with no installation token">
      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/03-connect-bridge-invalid-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=dc7305f3e9693a2d3c548581a31355b0" alt="Centered Invalid request card: No installation token was provided. Please start the installation from the Shopify App Store" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/03-connect-bridge-invalid-light.png" />

      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/03-connect-bridge-invalid-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=db33222d5b722189609e1764cafbef30" alt="Centered Invalid request card: No installation token was provided. Please start the installation from the Shopify App Store" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/03-connect-bridge-invalid-dark.png" />
    </Frame>
  </Step>

  <Step title="Sign in or create an account if needed">
    If you are not signed in, the connect page shows the store name and domain and asks you to finish in Zippendo.

    <Frame caption="Connect page when you are signed out">
      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/04-connect-bridge-signin-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=be0120d002b97577ca454a16bf6b423b" alt="Connect Atelier Nordlys card with Create a Zippendo account and Sign in buttons" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/04-connect-bridge-signin-light.png" />

      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/04-connect-bridge-signin-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=1852886c5e49bee80304012a89059622" alt="Connect Atelier Nordlys card with Create a Zippendo account and Sign in buttons" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/04-connect-bridge-signin-dark.png" />
    </Frame>

    Use **Create a Zippendo account** or **Sign in**. After auth you return to the same connect URL.
  </Step>

  <Step title="Choose organization, sender, and import range">
    When you are signed in and belong to an organization, finish the link here.

    <Frame caption="Connect store form after sign-in">
      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/05-connect-bridge-form-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=d789bb661bbb68da84782443d5602d75" alt="Connect Atelier Nordlys form with Default sender address optional, Import existing orders set to Only new orders, and a Connect store button" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/05-connect-bridge-form-light.png" />

      <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/05-connect-bridge-form-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=e3ec978add41518fe7abaf6e7e9c2171" alt="Connect Atelier Nordlys form with Default sender address optional, Import existing orders set to Only new orders, and a Connect store button" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/05-connect-bridge-form-dark.png" />
    </Frame>

    * **Organization** — shown only if you belong to more than one organization.
    * **Default sender address (optional)** — used as the sender when a shipment is created without a matching shipping rule. If you have no addresses yet, you can set one later in **Settings → Addresses**.
    * **Import existing orders** — **Only new orders**, **Import last 30 days**, or **Import from a specific date** (that date cannot be more than one month ago).

    Click **Connect store**. Zippendo creates the channel, registers webhooks and the carrier service, and starts the import you chose.
  </Step>
</Steps>

<Check>
  A successful connect lands you on **Order channels** with the toast **Successfully connected \{shop name}!** and the description **Webhooks have been set up for real-time order sync.**
</Check>

If the pending-install link expired or was already used, the page shows **Installation unavailable** and tells you to reinstall from Shopify.

## After connecting

The store appears on **Order channels → Connected stores**. The card shows the channel name, `*.myshopify.com` domain, **Status: Active**, and **Connected** / **Updated** dates.

<Frame caption="Connected Shopify store on Connected stores">
  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/06-connected-store-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=9264d8ba3fe76dd11170853d7b509b8a" alt="Connected stores tab with Nordlys Webshop Shopify card, status Active, domain nordlys-living.myshopify.com, and connected date" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/06-connected-store-light.png" />

  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/06-connected-store-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=f7c143ad6ff266ebd2a20a779eb77058" alt="Connected stores tab with Nordlys Webshop Shopify card, status Active, domain nordlys-living.myshopify.com, and connected date" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/06-connected-store-dark.png" />
</Frame>

Click the card to open **Shopify Channel** settings. The header includes **Shopify Admin** (opens `https://{shop}/admin`) and two tabs: **Orders & checkout** and **Connection & integration**.

If you uninstall the app in Shopify without disconnecting in Zippendo, the card shows **Uninstalled in app** and status **Uninstalled in app**.

### Orders & checkout

<Frame caption="Order Import Settings and Fulfillment Settings">
  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/07-orders-and-checkout-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=a6835c2d6a9827be3e3b613c6e0c8283" alt="Shopify Channel Orders and checkout tab showing Automatic Order Sync on, Auto-send new orders off, Re-import Orders, and Fulfillment sync to Shopify on" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/07-orders-and-checkout-light.png" />

  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/07-orders-and-checkout-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=e9af171328d8164cc70fe8621437ed57" alt="Shopify Channel Orders and checkout tab showing Automatic Order Sync on, Auto-send new orders off, Re-import Orders, and Fulfillment sync to Shopify on" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/07-orders-and-checkout-dark.png" />
</Frame>

**Order Import Settings**

* **Automatic Order Sync** — import new orders from Shopify via webhooks.
* **Auto-send new orders** — book the shipment with the carrier as soon as a new order arrives. Failed bookings stay visible on the shipment. Off by default.
* **Re-import Orders** — manually import any missing unfulfilled orders.

Click **Save Changes** after you toggle these.

**Fulfillment Settings**

* **Fulfillment sync to Shopify** — mark the Shopify order as fulfilled (with tracking) when you dispatch its shipment in Zippendo. On by default. This does not book or send the shipment itself.

### Default sender, checkout rates, and method mapping

There is no Shopify **location** or **product catalog** mapping in this UI. Sender location is your Zippendo address. Line items come from the order. Shipping is either live checkout rates or a mapped method name.

<Frame caption="Default Address and Checkout Shipping Rates">
  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/09-checkout-rates-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=639b688abec7e478a50090266e8cdd24" alt="Default Shipment Settings with Nordlys Lager – Nordhavn as Default Address, and Checkout Shipping Rates with GLS Hjemmelevering – Danmark selected and Service Points per Checkout set to 6" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/09-checkout-rates-light.png" />

  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/09-checkout-rates-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=07f8d26a09b821f9ae7f0cea1528ea47" alt="Default Shipment Settings with Nordlys Lager – Nordhavn as Default Address, and Checkout Shipping Rates with GLS Hjemmelevering – Danmark selected and Service Points per Checkout set to 6" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/09-checkout-rates-dark.png" />
</Frame>

* **Default Address** — sender used when an order arrives without a Zippendo shipping rate at checkout. A draft shipment is created so you can pick carrier and send.
* **Checkout Shipping Rates** — tick the [shipping rules](/docs/settings/shipping-rules) that should appear at Shopify checkout. If none are selected, every organization rule that matches the destination country is offered. **Service Points per Checkout** (1–20, default 6) is the total pickup locations shown, split across service-point rules.
* After you register the carrier service, add **Zippendo Shipping** in **Shopify Admin → Settings → Shipping and delivery**. See [Live rates in Shopify checkout](/docs/order-channels/shopify-checkout-rates).

<Frame caption="Shipping method mapping, empty until you add a row">
  <img src="https://mintcdn.com/zippendo/IcD59Bdrrm3eHW-8/images/tutorials/connect-shopify/13-method-mapping-light.png?fit=max&auto=format&n=IcD59Bdrrm3eHW-8&q=85&s=46dbc4138c55dec1b01bb8e57dec3fe1" alt="Shipping method mapping section showing No mappings yet and an Add mapping button" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/13-method-mapping-light.png" />

  <img src="https://mintcdn.com/zippendo/IcD59Bdrrm3eHW-8/images/tutorials/connect-shopify/13-method-mapping-dark.png?fit=max&auto=format&n=IcD59Bdrrm3eHW-8&q=85&s=4194aa6a381120db98e261c631d4356b" alt="Shipping method mapping section showing No mappings yet and an Add mapping button" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/13-method-mapping-dark.png" />
</Frame>

**Shipping method mapping** is for stores **without** carrier-calculated shipping. Click **Add mapping**, type the Shopify rate name (for example `GLS Home Delivery`), and pick a shipping rule. Parcel-shop rules also let you choose **Nearest automatically** or **Choose manually**. Full detail: [Shopify without carrier-calculated shipping](/docs/order-channels/shopify-shipping-method-mapping).

### Connection & integration

<Frame caption="Connection details and webhook diagnostics">
  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/08-connection-tab-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=d752394b2a7c13cd98869a9b6d258774" alt="Connection and integration tab showing shop domain, connected date, API scopes, and Webhook Status with Check Status" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/08-connection-tab-light.png" />

  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/08-connection-tab-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=90661a3b9f4d37a52e719d3caea38d33" alt="Connection and integration tab showing shop domain, connected date, API scopes, and Webhook Status with Check Status" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/08-connection-tab-dark.png" />
</Frame>

* **Connection details** — shop domain, connected date, last updated, and the API scopes granted in Shopify.
* **Webhook Status** — **Check Status** lists registered topics. If fewer than five order webhooks are present, **Re-register Webhooks**.
* **Carrier Service** — **Check Status** and **Register Carrier Service** if rates are missing at checkout.

<Tip>
  Use **Connect another store** in the store picker on this page to run the same App Store flow for a second shop. Each store is its own installation.
</Tip>

## How orders arrive

1. A customer places an order in Shopify.
2. Shopify sends an order webhook (or the periodic sync / **Re-import Orders** picks it up).
3. Zippendo creates or updates the order on this channel.
4. If the customer chose a Zippendo checkout rate, the shipment is matched to that rule (and pickup point). If they used a mapped manual rate, the mapped rule is applied. Otherwise a draft shipment uses **Default Address**.
5. You fulfill from **Orders** as usual.

Orders already fulfilled in Shopify import as fulfilled and do not get a new shipment, so they are not double-shipped.

## What you see in Orders

Open **Orders**. Synced Shopify orders use the channel name (the store’s Zippendo channel name). Columns include **Order ID**, **Customer**, **Status**, **Channel**, **Shipments**, and **Created At**.

<Frame caption="Orders list after the store is connected">
  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/10-orders-after-connect-light.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=50c9855bd2be5ac65d6124ed66a676b2" alt="Orders list with All orders heading and rows whose Channel is Nordlys Webshop" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/10-orders-after-connect-light.png" />

  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/10-orders-after-connect-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=c5816670ed9a5e7112c080307c19d3e1" alt="Orders list with All orders heading and rows whose Channel is Nordlys Webshop" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/10-orders-after-connect-dark.png" />
</Frame>

Open an order. **Order Information** includes **Order Channel**. Use **Create Shipment** or **Send order** from here — see [Orders](/docs/tutorials/orders).

<Frame caption="Order detail with Order Channel">
  <img src="https://mintcdn.com/zippendo/IcD59Bdrrm3eHW-8/images/tutorials/connect-shopify/11-order-detail-light.png?fit=max&auto=format&n=IcD59Bdrrm3eHW-8&q=85&s=28b57263ebe90b893e565ff4830f9e7d" alt="Order NL-202609-0143 overview with Order Channel Nordlys Webshop, Processing status, and line items" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/11-order-detail-light.png" />

  <img src="https://mintcdn.com/zippendo/nCpImT05qv67zgRn/images/tutorials/connect-shopify/11-order-detail-dark.png?fit=max&auto=format&n=nCpImT05qv67zgRn&q=85&s=a8d29b67210eae02e13ad6e4895c908d" alt="Order NL-202609-0143 overview with Order Channel Nordlys Webshop, Processing status, and line items" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/11-order-detail-dark.png" />
</Frame>

Statuses you will see include **Pending**, **Processing**, **Partially Fulfilled**, **Fulfilled**, **Cancelled**, and **Error**.

## Disconnect and reconnect

<Frame caption="Danger Zone disconnect">
  <img src="https://mintcdn.com/zippendo/IcD59Bdrrm3eHW-8/images/tutorials/connect-shopify/12-danger-zone-light.png?fit=max&auto=format&n=IcD59Bdrrm3eHW-8&q=85&s=babd7a0ad926f17279b7330f8f9ef9b9" alt="Connection tab scrolled to Webhook Status, Carrier Service, and Danger Zone Disconnect Store" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-shopify/12-danger-zone-light.png" />

  <img src="https://mintcdn.com/zippendo/IcD59Bdrrm3eHW-8/images/tutorials/connect-shopify/12-danger-zone-dark.png?fit=max&auto=format&n=IcD59Bdrrm3eHW-8&q=85&s=7c46794b642d204a2f34495e0e54fbbc" alt="Connection tab scrolled to Webhook Status, Carrier Service, and Danger Zone Disconnect Store" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-shopify/12-danger-zone-dark.png" />
</Frame>

On **Connection & integration**, **Danger Zone** is **Disconnect Store**. The copy is: **Remove this Shopify store connection. Orders will stop syncing and webhooks will be removed.**

Click **Disconnect**. Confirm with **Are you sure you want to disconnect this Shopify store? This will stop syncing orders and remove the integration.** The toast **Shopify store disconnected** confirms it.

<Warning>
  Disconnecting stops order sync and fulfillment write-back. Orders already in Zippendo stay. Reconnect the store if you want sync again.
</Warning>

To reconnect the **same** store to the **same** organization, install Zippendo from the App Store again and finish `/shopify/connect`. An uninstalled row is reactivated in place (settings and orders are kept).

You cannot connect that shop to a *different* Zippendo organization. The shop is claimed by the first org that connected it.

## Common errors

| What you see                                                                      | What to do                                                                                                                                                                                                   |
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Invalid request** / no installation token                                       | Start from the Shopify App Store, not by opening `/shopify/connect` yourself.                                                                                                                                |
| **Installation unavailable** or **This Shopify installation link has expired**    | The pending-install link lasts about 30 minutes. Reinstall the app from Shopify.                                                                                                                             |
| **This Shopify store is already connected to an organization**                    | That shop already has a live install. Open it from **Connected stores**, or disconnect first if you meant to replace it.                                                                                     |
| **This Shopify store is permanently linked to a different Zippendo organization** | The shop was connected to another org first. Use that org, or contact support — you cannot move the claim yourself.                                                                                          |
| **No organization found**                                                         | Create a Zippendo organization, then reopen the connect link.                                                                                                                                                |
| Orders not arriving                                                               | On **Connection & integration**, **Check Status** and **Re-register Webhooks**. Confirm **Automatic Order Sync** is on, then try **Re-import Orders**.                                                       |
| No rates at Shopify checkout                                                      | Confirm carrier-calculated shipping on your Shopify plan. **Check Carrier Service** / **Register Carrier Service**, then add **Zippendo Shipping** in Shopify shipping zones. Or use method mapping instead. |
| **Failed to connect your Shopify store** / **Failed to connect Shopify store**    | Retry the App Store install. If you just disconnected, wait a moment and connect again.                                                                                                                      |

## Next steps

<CardGroup cols={2}>
  <Card title="Orders" icon="clipboard-list" href="/docs/tutorials/orders">
    Open a synced order and create a shipment.
  </Card>

  <Card title="Checkout" icon="credit-card" href="/docs/tutorials/checkout">
    Show Zippendo rules and pickup points at Shopify checkout.
  </Card>

  <Card title="Connect order channels" icon="store" href="/docs/tutorials/connect-order-channels">
    WooCommerce and custom channels alongside this Shopify store.
  </Card>

  <Card title="Shipping method mapping" icon="route" href="/docs/order-channels/shopify-shipping-method-mapping">
    Map manual Shopify rates when you do not have live rates.
  </Card>
</CardGroup>

Field-level: [Shopify settings](/docs/how-to/shopify-settings) · [Get a shipping quote](/docs/how-to/shipping-quotes)
