# Shopify

### Overview

The Shopify integration imports your sales history, current inventory levels, and product catalog into Moselle. Once connected, data syncs automatically on a daily basis.

***

### Connect Shopify

1. Log in to Moselle and click your avatar in the top right corner
2. Select **Settings** from the dropdown menu
3. Click the **Integrations** tab
4. Select **Shopify** and click **Connect**
5. You will be redirected to Shopify to install the Moselle app
6. Click **Install** on the Moselle app page
7. Enter your Shopify login credentials

Once connected, your sales and inventory begin importing and appear on the Catalog page.

#### Multiple Stores

You can connect multiple Shopify stores to a single Moselle account. Repeat the connection process for each store.

***

### Data Sync Details

**Sync Frequency** — Shopify data syncs daily overnight (EST).

**Sales Attribution** — By default, Moselle uses **gross sales**. Your administrator can switch to **net sales** if needed. See [Revenue Calculation Methods](#revenue-calculation-methods) below for details.

**SKU Matching** — Shopify listings automatically link to Moselle items when SKUs match exactly. Non-matching SKUs require manual linking.

***

### App Permissions & Legacy Installs

If you installed the Moselle app on Shopify before **mid-2025**, your integration might lack the specific permissions required for newer inventory features. This can cause inventory syncs to fail even if sales data is updating correctly.

**The Fix:** To resolve this, you must **approve the updated permissions**:

1. Go to **Settings > Integrations** in Moselle.
2. Locate the Shopify integration and click **Connect** again.
3. Shopify will show a screen with the updated permissions. Click **Install App** or **Update App** to grant the new inventory scopes required.

***

### Troubleshooting

| Issue                                     | Cause                                                    | Solution                                                                                                          |
| ----------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Sales numbers don't match Shopify exactly | Timezone differences and gross vs. net sales definitions | Expected behavior — see [Revenue Calculation Methods](#revenue-calculation-methods) above to align your settings. |
| Listings not linking automatically        | SKUs don't match between Shopify and Moselle             | Manually link listings or update SKUs to match                                                                    |
| **Inventory not syncing**                 | Missing permissions (Legacy Install)                     | Click **Connect** again in Settings to approve updated permissions (see above).                                   |
| Missing historical sales data             | Shopify listing was deleted                              | Contact Moselle support — deleted listings lose variant IDs and require manual repair                             |

***

### Revenue Calculation Methods

{% hint style="info" %}
**Quick Answer:** Moselle supports two Shopify revenue methods — **gross** (default, before discounts) and **net** (after discounts). Your administrator can switch between them at any time.
{% endhint %}

#### Gross Revenue (Default)

**Gross revenue** is the total sales amount before any discounts are applied. This is the default setting for all Shopify stores connected to Moselle.

**Example:** A customer buys 2 items at $50 each with a 20% discount code. Gross revenue is **$100** (the full price before the discount).

This method is ideal if you want to track total potential revenue before promotional activity.

#### Net Revenue

**Net revenue** is the sales amount after all discounts are subtracted, including:

* **Line-level discounts** (automatic discounts, product-specific promotions)
* **Order-level discounts** (checkout promo codes)

**Example:** Using the same scenario above, net revenue is **$80** (after the $20 discount).

#### Why It Matters

The revenue method you choose affects:

* **Historical sales data** displayed across Moselle
* **Forecast revenue projections** used for planning
* **Comparison with Shopify reports** — match Moselle to Shopify's "Gross Sales" or "Net Sales" metrics

#### How to Change the Revenue Method

1. Contact your Moselle administrator or support team
2. Specify which Shopify store(s) need the change
3. After configuration, a backfill recalculates your historical sales data automatically

{% hint style="info" %}
**Note:** After changing the revenue method, historical sales numbers are recalculated to ensure consistency across all your data.
{% endhint %}

#### Matching Shopify Reports

| Moselle Setting         | Compare With in Shopify                   |
| ----------------------- | ----------------------------------------- |
| Gross revenue (default) | **Gross Sales** metric                    |
| Net revenue             | **Net Sales** or **Product Sales** metric |

Minor variances may occur due to timezone differences between Moselle and Shopify.

***

### Important

**Do not delete Shopify listings.** Deleted listings lose their variant IDs, which breaks historical sales and inventory data. If listings are deleted, contact Moselle support to repair the affected data.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.moselle.io/getting-started/onboarding/setup-integrations/shopify.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
