> ## 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.

# Repeat Customer Rate, OpenCart

> Share of OpenCart customers in the window with more than one completed order, the core loyalty signal. Tracked live in Vortex IQ Nerve Centre. How to read it, why it matters, and how to act on it.

**Card class:** [Hero](/nerve-centre/overview#card-classes-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> The share of customers in the window who have placed more than one completed order, the single clearest signal of loyalty and retention health.

## At a glance

> Repeat Customer Rate is the proportion of your customers who have come back to buy again. It is the loyalty number that matters most because winning a repeat order is far cheaper than acquiring a new customer, and a healthy repeat rate is the foundation of predictable revenue. A falling rate is an early warning that something after the first purchase, product, delivery, email, or service, is failing to bring people back. This card reads the rate over a 30-day window against the prior period so you see the direction, not just the level.

|                             |                                                                                                                                                                                                                          |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **What it measures**        | Customers with more than one completed order ÷ total customers, expressed as a percentage.                                                                                                                               |
| **Customer source**         | Registered customers live in `oc_customer`; orders in `oc_order` link to a customer (and carry an email for guests).                                                                                                     |
| **What counts as "repeat"** | A customer with two or more completed orders. The completed-order qualifier excludes pending, failed, and cancelled orders from the loyalty signal.                                                                      |
| **Guest checkouts**         | OpenCart allows guest orders that may not create an `oc_customer` record. Repeat detection across guest orders relies on matching email; pure-guest stores will read lower until accounts or email-matching are in play. |
| **Order status filtering**  | Only completed orders qualify; an order stuck in Pending or one that was Cancelled does not make a customer "repeat".                                                                                                    |
| **Currency / refunds**      | Not applicable to the rate itself. This is a count-based loyalty metric.                                                                                                                                                 |
| **Multi-store**             | Customers and orders carry a `store_id`; by default the rate is computed across the whole estate.                                                                                                                        |
| **Time window**             | 30D vsP (30 days against the prior period)                                                                                                                                                                               |
| **Alert trigger**           | `< 25%`                                                                                                                                                                                                                  |
| **Roles**                   | owner, marketing, finance                                                                                                                                                                                                |

## Calculation

```
repeat_customers / total_customers * 100
  repeat_customers = COUNT(customers WITH >1 completed order)
  WHERE order date BETWEEN [period_start, period_end]
```

## Worked example

A Dutch coffee-subscription-adjacent store on OpenCart 4.x selling beans and equipment. The 30-day window covers 16 Feb 26 to 17 Mar 26, compared against the prior 30 days. The store added a post-purchase email flow midway through.

| Segment                              | Customers | Repeat (2+ completed orders) | Read                       |
| ------------------------------------ | --------- | ---------------------------- | -------------------------- |
| Beans buyers (consumable, reorder)   | 1,200     | 540                          | 45%, strong                |
| Equipment-only buyers (one-time)     | 800       | 64                           | 8%, expected for durables  |
| Total                                | 2,000     | 604                          |                            |
| **Repeat Customer Rate (this card)** |           | **30.2%**                    | up from 26.1% prior period |

What's interesting here:

1. **30.2% clears the 25% alarm, and the trend is the good news.** The rate rose from 26.1% to 30.2% across the two windows. The vsP comparison is what turns a static "30%" into "improving", which is the read the owner actually acts on.
2. **The blended rate masks two very different products.** Consumable beans reorder at 45%; one-time equipment sits at 8%. A blended 30% is healthy precisely because the consumable base carries it. If beans loyalty slipped, the equipment drag would expose it fast.
3. **The email flow plausibly drove the lift.** The post-purchase flow launched mid-window, and the repeat rate climbed in the same period. The card cannot prove causation, but it is the place the effect of a retention initiative shows up first.
4. **Guest checkouts could be hiding repeats.** If the store accepts guest orders, a customer who bought twice as a guest may not be detected as repeat unless emails are matched. The owner encourages account creation partly to make this number trustworthy.

## Sibling cards merchants should reference together

| Card                                                                                                                | Why pair it with Repeat Customer Rate                                                                                     |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| [Total Customers](/nerve-centre/kpi-cards/opencart/total-customers)                                                 | The denominator base. Repeat rate is only as meaningful as the customer count behind it.                                  |
| [New Customers (30D)](/nerve-centre/kpi-cards/opencart/new-customers-30d)                                           | The acquisition counterpart. A flood of new customers can mechanically depress the repeat rate even when loyalty is fine. |
| [Average Order Value](/nerve-centre/kpi-cards/opencart/average-order-value)                                         | Repeat customers often spend more per order; read the two together to size loyalty's revenue value.                       |
| [Newsletter Opt-In Rate](/nerve-centre/kpi-cards/opencart/newsletter-opt-in-rate)                                   | Email-engaged customers repeat more; opt-in health is a leading indicator of repeat rate.                                 |
| [Refund Rate](/nerve-centre/kpi-cards/opencart/refund-rate)                                                         | Refunds erode loyalty; a rising refund rate often precedes a fall here.                                                   |
| [High-Value Customers Unengaged on Email](/nerve-centre/kpi-cards/opencart/high-value-customers-unengaged-on-email) | Pinpoints the loyal-but-at-risk segment whose churn would hit this rate hardest.                                          |

## Reconciling against OpenCart

**Where to look in the OpenCart admin:**

Customers → Customers lists registered accounts, the base for the denominator. Reports → Customers → Customer Orders shows orders and totals per customer, which is the closest native view to "who ordered more than once". Reports → Customers → Customers Online and the Sales reports help you cross-check counts. Each customer's order history (via Sales → Orders filtered by customer) confirms how many *completed* orders an account has, which is the qualifier this card uses.

OpenCart admin views that *look* like the same number but aren't:

* **Customers → Customers total** counts all registered accounts, including those who never completed an order, so it is not the denominator of completed-order repeat rate by itself.
* **Reports → Customers → Customer Orders** can include all order statuses, not just completed ones; this card counts only completed orders toward "repeat".
* **A guest-order email appearing twice** in the orders list is a repeat purchase, but if no `oc_customer` account exists, the native customer reports may not link them as one repeating customer.

**Why our number may legitimately differ from the OpenCart admin:**

| Reason                                                                                                                                               | Direction of divergence                     |
| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| **Timezone.** The window is evaluated in UTC by default; OpenCart timestamps follow the store timezone. Boundary-day orders fall on different sides. | ±1 day's orders at the boundary             |
| **Multi-store.** Customers and orders carry a `store_id`; the rate is computed across all storefronts unless filtered.                               | Either direction                            |
| **Guest vs registered.** Repeat detection across guests relies on email matching; native reports key on the account record.                          | Card may differ from an account-only report |
| **Completed-only qualifier.** This card counts only completed orders as repeat-qualifying; an admin report including all statuses counts more.       | Card lower than an all-status report        |
| **Window definition.** "Repeat in the window" depends on how order dates fall in the 30-day period versus a lifetime customer view.                  | Either direction                            |
| **API / DB sync lag.** A second order placed in the last minute may not yet be reflected.                                                            | Self-resolves at next sync                  |

**Cross-connector note:** if you run an email platform, its "returning purchaser" or "second-purchase" segment should track this card. A divergence usually means the email tool is keying on a different definition of repeat (any order vs completed order) or is missing guest purchases that OpenCart records by email.

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

  The same definition of repeat customer rate exists on other commerce platforms. This is **not a reconciliation**, your OpenCart store has no parallel store elsewhere to compare against. These links help agencies running multi-platform client books navigate between equivalent metrics.

  * [`shopify.repeat_customer_rate`](/nerve-centre/kpi-cards/shopify/repeat-customer-rate)
  * [`bigcommerce.repeat_customer_rate`](/nerve-centre/kpi-cards/bigcommerce/repeat-customer-rate)
</details>

## Known limitations / merchant FAQs

**Why does my repeat rate drop when I run a successful acquisition campaign?**
Acquisition adds first-time customers to the denominator faster than they can become repeat. A big new-customer intake mechanically pushes the repeat rate down for a window even though loyalty has not worsened. Read it alongside [New Customers (30D)](/nerve-centre/kpi-cards/opencart/new-customers-30d) to separate the two effects.

**Do guest checkouts count as repeat customers?**
Only if their orders can be matched, usually by email. OpenCart allows guest orders that may not create an `oc_customer` record, so a customer who bought twice as a guest can read as two separate one-time buyers unless email matching links them. Encouraging account creation makes this number more accurate.

**What counts as a "repeat" order, exactly?**
Two or more *completed* orders by the same customer. Orders stuck in Pending, or that were Cancelled or failed, do not qualify a customer as repeat. This keeps the loyalty signal clean: an abandoned second attempt does not inflate it.

**Why is my rate lower than my email tool's "returning customer" figure?**
The two usually use different definitions. Email platforms often count any second order regardless of status, and may segment differently. This card counts completed orders only and matches OpenCart's customer and order records. The gap is a definitional one, not an error.

**Is a low repeat rate always bad?**
Not for every catalogue. Stores selling durable, one-time goods (furniture, equipment) naturally run lower than consumables or replenishables. Judge the rate against your own category and trend, which is why the card shows 30D vsP rather than an absolute target alone.

**How can I lift this number?**
Post-purchase email flows, loyalty incentives, and reliable fulfilment are the usual levers. Watch the rate's vsP trend after any retention initiative; this card is where the effect surfaces first. Pair it with [High-Value Customers Unengaged on Email](/nerve-centre/kpi-cards/opencart/high-value-customers-unengaged-on-email) to target the customers most worth re-engaging.

**Does it count across all my storefronts?**
Yes by default. Customers and orders carry a `store_id`, and the rate is computed across the whole estate unless you filter to one store.

***

### Tracked live in Vortex IQ Nerve Centre

*Repeat Customer Rate* is one of hundreds of KPI pulses Vortex IQ tracks across OpenCart 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.
