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

# Refund Rate, Shopify

> Refunded orders / total orders. Persistent >5% signals product quality or expectation mismatch. How to read it, why it matters, and how to act on it.

**Metrics type:** [Key Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> Refunded orders / total orders. Persistent >5% signals product quality or expectation mismatch.

## At a glance

> The percentage of orders in the period whose `displayFinancialStatus` resolved to `REFUNDED`. The blunt count-based view of how often money goes back out the door, not how much.

|                               |                                                                                                                                                                                                                                                                                                       |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**            | `COUNT(orders WHERE displayFinancialStatus = REFUNDED) ÷ COUNT(orders) × 100`. Each fully-refunded order counts as 1, regardless of order value.                                                                                                                                                      |
| **Partial refunds**           | **NOT counted.** A £200 order refunded for £40 stays in `PARTIALLY_REFUNDED` state and does NOT trip this metric. Use [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value) for the £-leakage view that catches partials.                                                                      |
| **VAT / tax treatment**       | Not applicable. This is a count ratio, not a money figure. The orders being counted may include or exclude VAT depending on `Order.taxesIncluded`, but the rate itself is currency-agnostic.                                                                                                          |
| **Shipping**                  | Not applicable (count metric). The underlying `totalPrice` includes shipping but it doesn't affect the rate.                                                                                                                                                                                          |
| **Discounts**                 | Not applicable (count metric).                                                                                                                                                                                                                                                                        |
| **Refunds**                   | This IS the refund metric. Only orders flipped to `REFUNDED` in Shopify count; orders in `PARTIALLY_REFUNDED`, `PENDING`, or `VOIDED` are excluded from the numerator.                                                                                                                                |
| **Cancelled / voided orders** | Excluded from the numerator (`VOIDED` is a separate status), but they DO sit in the denominator, which inflates the denominator and slightly lowers the rate. See [Cancellation Rate](/nerve-centre/kpi-cards/shopify/cancellation-rate) for the void-side view.                                      |
| **Currency**                  | Multi-currency safe, this is a ratio not a sum. A store taking GBP, EUR, and USD orders gets one valid rate.                                                                                                                                                                                          |
| **Channels / sources**        | **Not filtered.** Online Store, Shop POS, Buy Button, Shop App, TikTok Shop, B2B / wholesale orders all contribute. POS refunds (in-store returns) push the rate up disproportionately for hybrid retail brands; B2B refunds are rare but each one moves the needle on a small-volume wholesale book. |
| **Time window**               | `30D vsP` (default 30D vs the prior 30D)                                                                                                                                                                                                                                                              |
| **Alert trigger**             | `>5%`, sustained refund rate above 5% triggers the `refund_rate` sentiment key                                                                                                                                                                                                                        |
| **Roles**                     | owner, operations                                                                                                                                                                                                                                                                                     |

## Calculation

```
COUNT(displayFinancialStatus=REFUNDED) / COUNT(_id)
  WHERE date BETWEEN [period_start, period_end]
```

## Worked example

A US homewares brand on Shopify Advanced. Period: 12 Mar 26 to 11 Apr 26 (30D), comparing against the prior 30D (10 Feb 26 to 11 Mar 26).

| Status (in window)             | Order count | Share    | Note                                            |
| ------------------------------ | ----------- | -------- | ----------------------------------------------- |
| `PAID`                         | 2,140       | 84.3%    | Clean orders, no refund activity                |
| `PARTIALLY_REFUNDED`           | 184         | 7.2%     | Damaged-in-transit replacements, partial £ back |
| `REFUNDED`                     | 192         | 7.6%     | Full refunds, this is the numerator             |
| `VOIDED`                       | 22          | 0.9%     | Cancelled before payment captured               |
| **Total orders (denominator)** | **2,538**   | **100%** |                                                 |

```text theme={null}
Refund Rate  =  192 ÷ 2,538 × 100  =  7.56%
```

vs the prior 30D where the rate was 4.9% (108 / 2,204). The card flags a **+2.66 ppt rise** and trips the `>5%` sentiment alert. Five things to notice:

1. **The £ leakage is bigger than the count suggests.** 7.2% of orders are *partially* refunded, those don't show in this rate but they're real cash going back. Always pair this card with [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value), which sums `totalRefunded` across all refund states.
2. **The headline number jumped because the denominator shrank.** Order count dropped from 2,204 to 2,538 doesn't explain the spike on its own; the numerator nearly doubled (108 to 192). Something changed.
3. **Likely cause: a single SKU.** Drilling into [Top Refunded Products](/nerve-centre/kpi-cards/shopify/top-refunding-customers) would typically show one or two SKUs accounting for 40 to 60% of refunds. A common pattern for this homewares vertical is a glass / ceramic item arriving broken; the brand replaces (partial) or refunds (full) at the customer's choice.
4. **Channel mix matters.** If 30% of refunds come from POS returns (customers walking back into the store), the online refund rate is structurally lower than the headline. The card doesn't split by channel today, but a manual filter in Shopify Admin → Orders by *Sales channel* gives the same view.
5. **vsP is the diagnostic, not the headline.** A flat 7.6% week-over-week is just "this is the brand's natural rate." A sudden jump of >2 ppt is the signal Vortex IQ Nerve Centre is engineered to catch, the alert is calibrated to the *change*, not the absolute number.

## Sibling cards merchants should reference together

Refund Rate is a count ratio. It hides a lot. Pair it with these to make decisions:

| Card                                                                             | Why pair it with Refund Rate                                                                                                                                             |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value)                     | The £ view. Catches partial refunds that this card misses. A flat refund rate but rising refund value means partials are growing, possibly a damaged-in-transit pattern. |
| [Refund Count](/nerve-centre/kpi-cards/shopify/refunded-orders)                  | The raw numerator. Useful when order count is shifting fast (sale week, viral moment), the rate can move just because the denominator changed.                           |
| [Top Refunded Products](/nerve-centre/kpi-cards/shopify/top-refunding-customers) | Tells you *which* SKUs are driving refunds. 80% of refunds usually come from 20% of SKUs; this card surfaces them.                                                       |
| [Cancellation Rate](/nerve-centre/kpi-cards/shopify/cancellation-rate)           | Cousin metric. Cancellations (`VOIDED`) happen before payment captures; refunds happen after. Both signal customer dissatisfaction but call for different fixes.         |
| [Total Orders](/nerve-centre/kpi-cards/shopify/total-orders)                     | The denominator. Always sanity-check the denominator before reading the rate, a small-volume week can produce noisy rates from 2 or 3 refunds.                           |
| [Refunds Over Time](/nerve-centre/kpi-cards/shopify/refunds-over-time)           | Daily / weekly trend. Catches step-changes (a bad batch landing on Monday) that the 30D average smooths out.                                                             |
| [Stripe Refund Rate](/nerve-centre/kpi-cards/stripe/refund-rate)                 | Cross-check against the payment processor. If Stripe's rate is materially different, the gap is informative (gift cards, manual refunds, COD orders).                    |

## Reconciling against the vendor's own dashboard

**Where to look in Shopify Admin:**

[Reports → Returns over time](https://admin.shopify.com/analytics/reports/returns_over_time) under the *Sales* category. Set the same date range you've selected here, and look at the *Returns* count alongside *Net sales*. The closest one-to-one comparison is Shopify's own *Refund return rate* tile in the same report (calculated as returns ÷ orders).

Other Shopify Admin views that *look* like the same number but aren't:

* **Home → Average return rate widget**: this is a *lifetime* rolling figure, not a 30D snapshot. It will read lower than this card if your refund rate has been climbing recently.
* **Orders → Filter "Refunded"**: counts every order ever refunded, not just orders created in the window. Useful for ops, useless for trend reconciliation.
* **Reports → Refunds by product**: this is a £-value view, not a rate. It pairs with [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value), not this card.
* **Settings → Returns → Return rate**: only available on Shopify Returns Beta accounts; uses a different denominator (fulfilled orders, not all orders).

**Why our number may legitimately differ from Shopify Admin:**

A small gap is normal. The usual suspects:

| Reason                    | Direction            | Why                                                                                                                                                                                                                                                                                             |
| ------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Time zone**             | Boundary days        | Shopify reports run in the shop's configured time zone (Settings → General); Vortex IQ uses UTC for period boundaries. Refunds processed near midnight on the boundary days fall on different sides.                                                                                            |
| **Status definition**     | Theirs higher        | Shopify's *Returns over time* report counts both `REFUNDED` and `PARTIALLY_REFUNDED` as a "return". Vortex IQ counts only `REFUNDED` for this rate. To match Shopify's number, use the *Refund Count* card and divide by *Order Count* manually.                                                |
| **Multi-currency**        | Either               | If multi-currency selling is enabled, Shopify's UI reports in shop currency. The rate is currency-agnostic so this rarely causes divergence, but the underlying refund counts can differ if some orders are excluded from one report's currency filter.                                         |
| **Refund-period overlap** | Theirs lower         | A refund issued on 12 Apr 26 against an order placed on 28 Feb 26. Vortex IQ counts that order as REFUNDED in the period when the order was created (Feb), so the rate goes up retroactively. Shopify's report can attribute refunds to either order date or refund date depending on the view. |
| **Draft / test orders**   | Ours slightly higher | Shopify Admin can hide test orders. Vortex IQ does not yet filter `Order.test`.                                                                                                                                                                                                                 |

**Internal identity (within Shopify):**

`shopify.refund_rate = shopify.refund_count ÷ shopify.order_count × 100`

These three cards are mathematically tied. If they don't match it's a sampling or rounding artefact, not a real disagreement.

* [`shopify.refund_count`](/nerve-centre/kpi-cards/shopify/refunded-orders)
* [`shopify.order_count`](/nerve-centre/kpi-cards/shopify/total-orders)

**Cross-connector reconciliation. Stripe vs Shopify:**

[`stripe.stripe_refund_rate`](/nerve-centre/kpi-cards/stripe/refund-rate) should sit close to this card for stores that route most payments through Stripe / Shopify Payments (which is Stripe under the hood). Expected gaps:

| Card                                                                      | Expected relationship                                          | What causes legitimate divergence                                                                                                                                                |
| ------------------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`stripe.stripe_refund_rate`](/nerve-centre/kpi-cards/stripe/refund-rate) | Stripe ≈ Shopify, often within ±0.5 ppt for Stripe-only stores | Stripe sees only Stripe-routed refunds. PayPal refunds, gift-card returns, manual / COD refunds, and Klarna / Afterpay reversals are invisible to Stripe but counted by Shopify. |
| [`paypal.pp_refund_value`](/nerve-centre/kpi-cards/paypal/refund-value)   | PayPal subset of Shopify                                       | Only PayPal-checkout refunds. Subset by definition.                                                                                                                              |

**Net of all processors:** if you sum Stripe refund count + PayPal refund count + manual refunds, the total should match Shopify's `refund_count`. A persistent gap > 5% means a payment processor is missing from the Vortex IQ workspace, or one is double-counting (rare; usually a misconfigured webhook).

***

<details>
  <summary><em>Same-metric documentation cross-reference (for agencies running multiple platforms)</em></summary>

  The same definition of Refund Rate lives on other commerce platforms. This is **not a reconciliation**, your Shopify store doesn't have a parallel store on BigCommerce or Adobe Commerce to compare numbers against. These cross-links exist so agencies running multi-platform client books can navigate between identical metrics across the docs.

  * [`bigcommerce.refund_rate`](/nerve-centre/kpi-cards/bigcommerce/refund-rate)
  * [`adobe_commerce.refund_rate`](/nerve-centre/kpi-cards/adobe-commerce/refund-rate)
</details>

## Known limitations / merchant FAQs

**Why is my Refund Rate higher than Shopify's "Average return rate"?**
The Shopify Home dashboard tile is *lifetime* (often calculated over all orders ever placed), so it benefits from years of low-refund history pulling the rate down. This card is a 30-day window; recent refund spikes are not yet smoothed out by historical baseline. Use Shopify Admin → *Reports → Returns over time* with the same date range you've selected here for an apples-to-apples reconciliation, not the dashboard tile.

**Does this card include partial refunds?**
**No.** Only orders that flipped fully to `displayFinancialStatus = REFUNDED` count in the numerator. Orders sitting in `PARTIALLY_REFUNDED` are excluded, even if 90% of the order value has been returned. To capture the £-leakage from partials, watch [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value) which sums `totalRefunded` across every refund-bearing order regardless of status.

**My refund rate spiked but I don't see a problem in any specific SKU. Why?**
Three usual causes that hide at the SKU level: (1) a delivery carrier issue causing damage in transit, look at refund tags / reasons in Shopify Admin; (2) a sizing or expectation gap from a recent ad creative (people bought based on a misleading image), check ad set landing pages; (3) an internal payment-processing glitch where Shopify auto-refunded some duplicate-charge orders, look at *Settings → Payments → Activity log*. The headline rate moves before any single SKU does.

**Why doesn't the Stripe refund rate match this card?**
Stripe sees only Stripe-routed refunds, which is most of your money but not all. PayPal refunds, gift-card returns, manual cash refunds, and Klarna / Afterpay reversals don't appear in Stripe. Expect Stripe's refund rate to read slightly LOWER than Shopify's, often 0.5 to 2 ppt lower depending on PayPal share. A Stripe rate that matches Shopify exactly suggests the merchant runs Shopify Payments only.

**Does multi-currency affect the rate?**
Not directly, this is a count ratio. But if your store sells across GBP, EUR, and USD, returns from one currency tend to cluster (EU stores see higher refund rates than US for fashion, lower for electronics). Per-currency refund rates are on the roadmap; for now use Shopify Admin's currency filter to slice manually.

**B2B / wholesale orders, do they count?**
Yes. Every order in the index contributes to both numerator and denominator. B2B orders are usually low-volume (fewer wholesale buyers than retail), high-value (large basket sizes), and rarely refunded (returns happen via credit-note rather than refund). So they barely move the rate. The exception is a one-time large B2B refund (a single £15,000 wholesale order returned), which on a small-volume week can spike the rate by 2 to 4 ppt on its own.

**My subscription store, do recurring billings count?**
Yes. Each Shopify Subscriptions billing event is a separate order. Customers cancelling a subscription mid-cycle and receiving a partial pro-rata refund show up in `PARTIALLY_REFUNDED` (excluded). Customers cancelling within the refund window and getting a full refund show up in `REFUNDED` (included). Subscription churn that doesn't trigger a refund (just a future cancellation) is invisible to this card; pair with [Churn Risk](/nerve-centre/kpi-cards/shopify/customer-churn-risk) for that view.

**The card says ">5%" alert, is that the right threshold for my industry?**
5% is a coarse default for direct-to-consumer brands. Apparel and footwear typically run 15 to 30% even in healthy operations (sizing returns); homewares and consumables run 2 to 5%; electronics 5 to 10%. The threshold is configurable per workspace in *Nerve Centre → Alerts*. The right number is whatever signals "abnormal for THIS brand", typically baseline + 2 standard deviations.

**Action playbook when this card alerts:**

1. Open [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value) and [Top Refunded Products](/nerve-centre/kpi-cards/shopify/top-refunding-customers), look for SKU concentration.
2. Check [Refunds Over Time](/nerve-centre/kpi-cards/shopify/refunds-over-time) for a step-change date, ties to a specific batch / shipment / ad campaign.
3. Pull refund reasons from Shopify Admin → *Orders → Refunded*. Three most common: damaged in transit, sizing, doesn't match description.
4. If concentrated on one SKU: pause its ads, audit listing photos and copy, talk to the supplier.
5. If spread across SKUs but tied to a date: investigate carrier / warehouse / payment-processor incident.
6. If spread across SKUs and time: brand-level expectation gap, audit recent creative and merchandising.

***

### Tracked live in Vortex IQ Nerve Centre

*Refund Rate* is one of hundreds of KPI pulses Vortex IQ tracks across Shopify and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English.

[Start for free](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
