<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ayra Blog: Retention</title><description>How Shopify merchants measure and improve retention: repeat purchase rate, lifetime value, churn and the systems behind the numbers.</description><link>https://ayra.one</link><language>en</language><atom:link href="https://ayra.one/rss/retention.xml" rel="self" type="application/rss+xml"/><item><title>Repeat purchase rate on Shopify: how to measure it and what moves it</title><link>https://ayra.one/blog/repeat-purchase-rate-shopify</link><guid isPermaLink="true">https://ayra.one/blog/repeat-purchase-rate-shopify</guid><description>What repeat purchase rate is, the formula, how to read it from Shopify&apos;s own reports, why benchmarks mislead, and the five levers that reliably move it.</description><pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Repeat purchase rate is the retention metric most Shopify merchants look at first, and the one most often misread. The number itself is simple. The decisions around it, which customers, which window, which denominator, are where stores go wrong. This article covers the definition, the calculation, where to find it in Shopify, why benchmarks mislead, and what actually moves it.&lt;/p&gt;
&lt;h2 id=&quot;what-repeat-purchase-rate-is&quot;&gt;What repeat purchase rate is&lt;/h2&gt;
&lt;p&gt;Repeat purchase rate is the percentage of customers who have placed more than one order. Written out:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;repeat purchase rate = customers with 2+ orders / all customers with 1+ orders × 100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the whole formula. The variables are in the words “customers” and “orders”, because both depend on a time window and on how you count people.&lt;/p&gt;
&lt;p&gt;Three choices change the number materially:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The window.&lt;/strong&gt; All-time repeat rate is a different metric from twelve-month repeat rate, which is different again from “customers acquired in Q1 who reordered within 90 days”. Longer windows always look better, because customers have had more time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The denominator.&lt;/strong&gt; “All customers” includes people who bought once three years ago. A cohort denominator, customers who placed their first order in a given month, is the one you can act on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity.&lt;/strong&gt; Guest checkouts, a second email address and a phone-only POS sale can all turn one person into three customers. Every split inflates the denominator and deflates the rate.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;ay-callout border-l-[3px] px-5 py-4 text-[0.95em] border-success/40 bg-success-soft&quot; role=&quot;note&quot;&gt; &lt;p class=&quot;ay-eyebrow !text-[11px] text-fg&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;text-accent-fg&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z&quot;/&gt;&lt;path d=&quot;M20 3v4&quot;/&gt;&lt;path d=&quot;M22 5h-4&quot;/&gt;&lt;/svg&gt; Write your definition down&lt;/p&gt; &lt;div class=&quot;mt-2 [&amp;&gt;*+*]:mt-3&quot;&gt;&lt;p&gt;Decide the window and the denominator once, write them into the report title, and keep them. A repeat rate that drifts because someone changed the window is worse than no repeat rate at all.&lt;/p&gt;&lt;/div&gt; &lt;/aside&gt;
&lt;h2 id=&quot;repeat-purchase-rate-versus-returning-customer-rate&quot;&gt;Repeat purchase rate versus returning customer rate&lt;/h2&gt;
&lt;p&gt;Shopify’s own reporting uses the phrase &lt;strong&gt;returning customer rate&lt;/strong&gt;. In Shopify’s definition, a returning customer is one who placed an order in the period and had placed at least one order before it. That makes returning customer rate the share of &lt;em&gt;orders in a period&lt;/em&gt; that came from existing customers, which is not the same as the share of &lt;em&gt;customers&lt;/em&gt; who ever reordered.&lt;/p&gt;
&lt;p&gt;Both are useful. Returning customer rate tells you how much of this month’s business came from people you already had. Repeat purchase rate tells you how good you are at turning first orders into second ones. Mixing them up is the most common reason two people at the same company quote different numbers for “retention”. Shopify documents its customer reports in the &lt;a href=&quot;https://help.shopify.com/en/manual/reports-and-analytics/shopify-reports/report-types/default-reports/customers-reports&quot;&gt;Help Center&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-to-read-it-from-shopify&quot;&gt;How to read it from Shopify&lt;/h2&gt;
&lt;p&gt;You do not need an app to get a first number. Shopify Analytics exposes the returning customer rate directly, and the customer reports let you rebuild a cohort view by hand.&lt;/p&gt;
&lt;div class=&quot;ay-steps my-8&quot;&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open Analytics.&lt;/strong&gt; In the Shopify admin, go to Analytics. The overview shows &lt;strong&gt;Returning customer rate&lt;/strong&gt; for the selected date range, with a comparison to the previous period.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set a sensible range.&lt;/strong&gt; Pick a full month or quarter. A seven-day range will swing wildly with a single campaign.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Reports, then Customers.&lt;/strong&gt; The &lt;strong&gt;Customers over time&lt;/strong&gt; report splits new and returning customers by day, week or month. This is the series to chart.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build a cohort.&lt;/strong&gt; Use the &lt;strong&gt;First-time vs returning customer sales&lt;/strong&gt; report, or export orders with the customer ID and first order date, and group customers by the month of their first order. For each cohort, count how many placed a second order within 30, 60 and 90 days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segment by first product.&lt;/strong&gt; Group the same cohort by the product in the first order. The spread between products is usually larger than any month-to-month change in the headline number.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;The export step is tedious, which is why most stores stop at the headline number. It is also where the useful information is.&lt;/p&gt;
&lt;h2 id=&quot;why-benchmarks-mislead&quot;&gt;Why benchmarks mislead&lt;/h2&gt;
&lt;p&gt;Every retention article offers a benchmark, and almost none of them agree, because they are measuring different things. A benchmark built on all-time repeat rate across every store on a platform will be higher than a 90-day cohort benchmark for a single category. A consumables brand with a monthly replenishment cycle and a furniture brand with a seven-year one are not comparable on any window, and a blended industry average tells neither of them anything.&lt;/p&gt;
&lt;p&gt;Rather than quote a number here that would be wrong for your store, a more reliable approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compare the store to itself.&lt;/strong&gt; Trend the same cohort metric month over month. A change in your own number under a fixed definition is real; a gap to someone else’s average may not be.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compare products to products.&lt;/strong&gt; The first product a customer buys predicts repeat behavior more than almost anything else you can measure early. Rank your entry products by 90-day repeat rate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compare channels to channels.&lt;/strong&gt; Customers acquired through referrals, subscriptions and organic search often repeat at different rates from paid social. Keep the window fixed and the comparison becomes meaningful.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want external context, use sources that publish their definition alongside the figure, and check that the definition matches yours before you compare.&lt;/p&gt;
&lt;h2 id=&quot;five-things-that-move-it&quot;&gt;Five things that move it&lt;/h2&gt;
&lt;p&gt;These are the levers we have seen move repeat rate consistently across the stores we have worked on. None of them is a trick, and each one is more effective when it reads the same customer record as the others.&lt;/p&gt;
&lt;h3 id=&quot;1-follow-up-on-delivery-not-on-order&quot;&gt;1. Follow up on delivery, not on order&lt;/h3&gt;
&lt;p&gt;Most post-purchase flows fire on a timer from the order date. The customer’s experience starts when the parcel arrives. A review request or a “how is it going” message timed from the delivery event lands when the product is in hand, and it is suppressed automatically if there is an open support ticket. Timing from fulfillment events is one of the simplest changes with a visible effect on second orders.&lt;/p&gt;
&lt;h3 id=&quot;2-give-the-customer-a-reason-to-come-back-before-they-need-one&quot;&gt;2. Give the customer a reason to come back before they need one&lt;/h3&gt;
&lt;p&gt;Points, store credit and tier progress are reasons to return that exist before the product runs out. The important part is that the reason is visible: in the account, at checkout and in the follow-up message, with the same balance everywhere. A loyalty balance the customer cannot see does not change behavior.&lt;/p&gt;
&lt;div class=&quot;not-prose my-8&quot;&gt;&lt;a href=&quot;/features/loyalty&quot; class=&quot;group ay-card ay-card-link flex h-full flex-col gap-5 p-6&quot;&gt; &lt;div class=&quot;flex items-center justify-between&quot;&gt; &lt;span class=&quot;ay-icon-tile&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;8&quot; width=&quot;18&quot; height=&quot;4&quot; rx=&quot;1&quot;/&gt;&lt;path d=&quot;M12 8v13&quot;/&gt;&lt;path d=&quot;M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7&quot;/&gt;&lt;path d=&quot;M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5&quot;/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;span class=&quot;inline-flex items-center gap-1.5  border px-2.5 py-1 font-mono text-[10px] uppercase tracking-[0.1em] border-accent/40 bg-accent-soft text-accent-fg&quot;&gt; &lt;span class=&quot;size-1.5  bg-accent&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt; Private beta &lt;/span&gt; &lt;/div&gt; &lt;div&gt; &lt;h3 class=&quot;text-xl text-fg&quot;&gt;Loyalty &amp;amp; Rewards&lt;/h3&gt; &lt;p class=&quot;mt-2 text-fg-muted&quot;&gt;Points, store credit and VIP tiers that know who the customer is.&lt;/p&gt; &lt;/div&gt;  &lt;span class=&quot;ay-link text-sm&quot;&gt;Explore Loyalty &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12h14&quot;/&gt;&lt;path d=&quot;m12 5 7 7-7 7&quot;/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;/a&gt;&lt;/div&gt;
&lt;h3 id=&quot;3-make-the-second-order-offer-specific&quot;&gt;3. Make the second-order offer specific&lt;/h3&gt;
&lt;p&gt;A blanket 10% off for everyone is easy to run and easy to ignore. An offer that references what the customer bought, what they wishlisted, or what sold out and is now back is noticeably different. The information to do that exists in most stores already; it is just spread across apps.&lt;/p&gt;
&lt;h3 id=&quot;4-time-replenishment-to-the-product&quot;&gt;4. Time replenishment to the product&lt;/h3&gt;
&lt;p&gt;For consumables, repeat rate is mostly a timing problem. If a product lasts about six weeks, the reminder should arrive in week five, not week two and not week ten. Subscriptions solve this structurally; for everything else, a replenishment flow keyed to the product’s actual cycle does most of the work.&lt;/p&gt;
&lt;h3 id=&quot;5-remove-the-friction-you-cannot-see&quot;&gt;5. Remove the friction you cannot see&lt;/h3&gt;
&lt;p&gt;A customer who has to re-enter an address, hunt for their order status, or email support to use a reward is a customer who will consider buying elsewhere. The account hub, order tracking and reward redemption at checkout are retention features even though none of them looks like a campaign.&lt;/p&gt;
&lt;h2 id=&quot;how-ayra-reports-it&quot;&gt;How Ayra reports it&lt;/h2&gt;
&lt;p&gt;Ayra’s &lt;a href=&quot;/features/analytics&quot;&gt;Retention Analytics&lt;/a&gt; module reports repeat purchase rate and returning customer rate side by side, with the definitions printed on the report, so the two are never confused. Cohorts are built automatically by first-order month and by first product, with 30, 60 and 90-day windows, and revenue from each repeat order is attributed to at most one module or flow, so loyalty, flows and reviews cannot each claim the same second order. The same profile that powers the report powers the actions above, which is the point: the metric and the levers read the same customer.&lt;/p&gt;
&lt;p&gt;If you want to see your own numbers under these definitions, join the &lt;a href=&quot;/#waitlist&quot;&gt;waitlist&lt;/a&gt;. If you are weighing a loyalty app that ships its own retention reporting, our &lt;a href=&quot;/compare/loyaltylion&quot;&gt;comparison with LoyaltyLion&lt;/a&gt; covers where it still wins.&lt;/p&gt;</content:encoded><category>Retention</category><category>repeat-purchase-rate</category><category>retention-metrics</category><category>shopify-reports</category><category>analytics</category><author>hello@ayra.one (Ahmad)</author></item><item><title>Back-in-stock alerts: a checklist before you switch them on</title><link>https://ayra.one/blog/back-in-stock-alerts-checklist</link><guid isPermaLink="true">https://ayra.one/blog/back-in-stock-alerts-checklist</guid><description>Back-in-stock alerts only work when the inventory signal, the customer record and the send rules agree. Seven things to check before the first alert goes out.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A back-in-stock alert looks like the simplest message a store sends: an item is available again, tell the people who asked. In practice it sits on top of three systems that rarely agree, which is why so many stores switch alerts on and then quietly switch them off. This is the checklist we run through with merchants before the first alert goes out.&lt;/p&gt;
&lt;h2 id=&quot;check-the-inventory-event&quot;&gt;Check the inventory event&lt;/h2&gt;
&lt;p&gt;Which event fires the alert? A purchase order received at a warehouse is not the same as a variant becoming purchasable online. Decide whether a single unit counts, or whether you want a minimum quantity before you tell anyone. Confirm which locations count, especially if one location only serves retail.&lt;/p&gt;
&lt;h2 id=&quot;check-the-customer-record&quot;&gt;Check the customer record&lt;/h2&gt;
&lt;p&gt;The person who clicked “notify me” as a guest and the person who logs in a week later are usually the same shopper. If your alert tool keeps its own list, it cannot see the order history, the tier or the open support ticket that should change what you send. Resolve the request to one profile first.&lt;/p&gt;
&lt;h2 id=&quot;check-the-send-rules&quot;&gt;Check the send rules&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Who gets the alert when there are five units and forty requests?&lt;/li&gt;
&lt;li&gt;Which channel goes first, and how long before the next one?&lt;/li&gt;
&lt;li&gt;Does the alert carry an incentive, and does that incentive stack with something the customer already has?&lt;/li&gt;
&lt;li&gt;When does the request expire?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Write the answers down before the tool asks you for them in a settings screen.&lt;/p&gt;
&lt;h2 id=&quot;check-what-happens-next&quot;&gt;Check what happens next&lt;/h2&gt;
&lt;p&gt;An alert that converts should credit the restock, not the email that happened to arrive the same afternoon. If you cannot say which message earned the order, you cannot tune the rules later. Decide how attribution works before you need it.&lt;/p&gt;</content:encoded><category>Retention</category><category>back-in-stock</category><category>inventory</category><category>alerts</category><author>hello@ayra.one (Ahmad)</author></item></channel></rss>