What Smile.io actually costs over time
Smile.io charges $49–599/mo. That sounds manageable month to month — until you run the math. Over a year that comes to $588–$7,188/year. Stretched over five years — a reasonable lifespan for a healthy Shopify store — the total reaches $2,940–$35,940. None of that money builds equity in your store. None of it makes the software yours. It buys access, and access ends the moment you stop paying.
As your store grows, Smile's bill grows with it — regardless of whether the loyalty features change. You're paying for the same points system at $49/mo when small and $599/mo when successful.
What a custom points, tiers & referral rewards app actually includes
The assumption most merchants make is that replacing Smile.io requires a developer, a long timeline, and a significant budget. That was accurate until AI builders trained on actual Shopify documentation changed the economics. A Shopivibe-generated points, tiers & referral rewards app ships as a complete, deployable application — not a prototype. OAuth, Shopify Billing API, webhook handlers, and App Bridge come built in before you describe a single feature specific to your store.
The comparison table above breaks down exactly what you get. Specifically: Monthly fee, Scales with order volume, Points & tiers, Referral program, Custom branding. These are not paid add-ons or plan upgrades — they're the baseline of every app built through Shopivibe.
When the math tips in favor of building
At $49–599/mo, the payback period on a custom build is typically three to six months — after which every month is margin recovered rather than rent paid. The rule most merchants use: if you've been paying for Smile.io for longer than six months and it costs more than $50/month, building your own version is almost always the cheaper option over a two-year window.
Beyond the cost math, there's a strategic case for ownership. Smile.io holds your points, tiers & referral rewards data — customer records, transaction history, any accumulated state — in their infrastructure. If a vendor raises prices, gets acquired, or shuts down, migrating that data is painful by design. Owning the code means owning the data, and the ability to extend or change the logic without asking permission or paying for a higher tier.
When to keep paying instead
Not every store should replace Smile.io. If you're in the first few months of trading and still validating your product, app costs are a minor variable compared to everything else on your plate. If the app costs under $30/month and works perfectly, the time investment isn't worth it. The decision becomes clear when Smile.io is a meaningful recurring line item, when you've hit a plan ceiling, or when you want the points, tiers & referral rewards experience to feel fully native to your brand rather than a vendor widget embedded in your store.
See how Shopivibe pricing works or browse all the apps you can replace to map out what your full replacement stack would look like, or explore all Shopify points, tiers & referral rewards apps.
What a Shopify points, tiers & referral rewards app actually has to do
A Shopify loyalty app needs read_orders, read_customers, and write_customers scopes at minimum. Points are awarded on orders/paid events (full payment received) and reversed on refunds/create. The write_customers scope lets the app store current point balances as customer metafields — readable from the Storefront API so balances appear in customer account pages without additional server requests. Referral tracking uses the customers/create webhook to detect new customer signups via referral links. Reward redemption generates discount codes via Shopify's discountCodeCreate mutation — each reward creates a unique single-use code with a configurable expiry. The three mandatory GDPR webhooks are required.
The data model behind points, tiers & referral rewards on Shopify
The core table is PointsLedger — an append-only log of all point transactions: customer_id, event_type (earn/redeem/expire/adjust), points_delta, balance_after, reference_id (order GID or discount code GID), and created_at. Never store a mutable balance field — always derive current balance from the ledger sum. This prevents race conditions on concurrent orders. A Tier table defines membership levels: name, minimum_points, multiplier, benefit_list. A Reward table defines redemption options: name, points_cost, discount_type (percentage/fixed/free_shipping), discount_value, max_uses_per_customer. A ReferralCode table links each customer to their unique referral URL and tracks conversions.
Edge cases most points, tiers & referral rewards apps get wrong
- Partial refund proportionality: if an order is partially refunded, points should be deducted proportionally — not fully revoked or ignored entirely
- Cancelled vs refunded: orders/cancelled and refunds/create are different webhook topics; point reversal logic must handle both without double-deducting from the same order
- Tier demotion grace period: when points expire or are deducted, a customer may drop below a tier threshold — whether to demote immediately or use a 30-day grace period is a business rule that must be configurable
- Discount code uniqueness: each reward redemption must generate a unique code — reusable shared codes allow one customer to share their reward with everyone
- B2B customer exclusion: wholesale customers or company accounts typically shouldn't earn loyalty points; the app must check customer tags or Shopify company membership before awarding
- Point expiry jobs: if points expire after a period of inactivity, a scheduled background job must run and log expiry events to the ledger — not a one-time batch process
Migrating off Smile.io without losing data
Exporting your data: Smile.io provides a customer data export via their API (GET /v1/customers with with_balances=true parameter). The export includes customer email, current point balance, tier level, and referral stats. Contact Smile support to request a full historical transaction export if you need the complete ledger.
Mapping to your new app: Match Smile customers to Shopify customers by email address. Import current balances as a single 'adjust' ledger entry per customer — this preserves the balance without importing full transaction history. Tier assignment follows automatically from balance thresholds if your tiers use the same point values.
Parallel-run period: Run both systems for one billing cycle (typically one month). New points from orders go to the new app; Smile tracks points on any orders placed before the cutover date. Merge final balances at cutover, then disable Smile.
Frequently asked questions
Where are loyalty point balances stored?
Point balances are stored in your app's database as an append-only ledger. The current balance is also written to a Shopify customer metafield so it's readable from storefronts and customer account pages via the Storefront API without an additional round-trip.
How do reward discount codes work technically?
Each reward redemption calls Shopify's discountCodeCreate mutation to generate a unique, single-use discount code. The code is valid for a configurable period (typically 30 days) and can be scoped to a minimum order value.
Can customers earn points on subscription renewals?
Yes — the billing_attempts/success webhook fires on each successful subscription charge. The loyalty app listens to this event and awards points per renewal cycle, separate from the initial order.
What happens to existing Smile.io points when I switch?
Smile.io provides a customer data export including current point balances. These are imported as a single balance-adjustment entry per customer. The migration is invisible to customers — their full balance carries over.
Can loyalty tiers be based on spending rather than points?
Yes — the tier system can use cumulative spend from Shopify order history instead of earned points. The read_orders scope provides full order history for calculating spend-based tiers at migration and ongoing.