Published 2026-06-25
How Pikapet unified Shopify and Square loyalty (case study)
How a Melbourne pet retailer unified 4,500+ loyalty profiles across Shopify online and Square in-store — architecture, staff scripts, and lessons for hybrid retailers.
By Lance · Founder, SamePoints (Shopify + Square loyalty)
Short answer: Pikapet — a premium pet retailer in Melbourne with Shopify online and Square in-store at QV Centre — unified loyalty by replacing split systems with one payment-webhook ledger. Today 4,500+ customer profiles share one balance visible on the Shopify site, with Square earn flowing in automatically when staff capture phone at checkout. SamePoints is the product that grew out of that deployment.
This is the merchant-facing case study behind the homepage quote: "On busy weekends someone would ask if we had a membership — and we had to say it only counted on the website."
Store profile
| Brand | Pikapet — premium pet food and accessories |
| Online | Shopify storefront |
| In-store | Square POS, QV Centre Melbourne |
| Challenge | Online-only loyalty while foot traffic asked about membership at the till |
| Outcome | One balance on website; Square payments earn into same ledger |
Inventory sync was solved by other apps. Loyalty was not — until we built the pipe documented in From n8n to SamePoints.
The pain (before sync)
Three recurring moments:
- The membership question — weekend queue, customer asks if in-store purchases count. Staff could only offer website-only points. Visible disappointment.
- Split profiles — same person as
email@shopifyonline and anonymous Square payment in-store. - Refund anxiety — partial returns on heavy SKUs; manual spreadsheets do not reverse points fairly.
Alternatives evaluated:
| Option | Why we passed |
|---|---|
| Square Loyalty | Separate program; no Shopify balance; extra subscription |
| Smile.io on Shopify | Strong for online; no Square payment earn on free/paid tiers we tested |
| Manual CSV exports | Broke every busy Saturday |
We needed Shopify + Square sync loyalty — not another marketing hub.
What we built (high level)
Shopify orders/paid ──┐
├──► Ledger (Postgres) ──► Shopify metafields
Square payment.updated ┘ │
└──► Gift card at threshold (optional)
Principles:
- Payment webhooks, not Square Loyalty API — avoids double earn
- Postgres ledger as source of truth; Shopify metafields as display layer
- Refund-safe — proportional point reversal on Shopify and Square refunds
- Phone-first matching for AU in-store (phone guide)
Same architecture now ships as SamePoints on the Shopify App Store. Technical deep dive: n8n → product story.
Rollout timeline (operator view)
Phase 1: Online-only baseline (Shopify)
- Points per dollar on paid orders
- Theme wallet on customer account (show points guide)
- Gift card auto-issue at threshold — not discount codes (why gift cards)
Phase 2: Square connect
- OAuth Square in app Settings (setup docs)
- Confirmed Square Loyalty turned off (unified balance checklist)
- Webhooks:
payment.updatedcompleted + refund events
Phase 3: Staff behaviour
Printed script at till:
"Same rewards as our website — what's your mobile? I'll add it before we tap."
Not optional on loyalty asks. Without identity, payment completes but no earn row attaches.
Phase 4: Historical cleanup
- Imported legacy balances from prior tooling
- Merged duplicates where email and phone split one household
- Daily reconcile for missed Shopify webhooks (reconciliation docs)
Results (qualitative + operational)
We report operational metrics, not guaranteed ROI:
| Signal | Observation |
|---|---|
| Loyalty profiles unified | 4,500+ customers in one ledger |
| Points in circulation | 650,000+ points tracked (earn minus redemptions/refunds) |
| Till conversation | "Online only" script removed |
| Support theme | "Wrong balance" tickets dropped after merge pass |
| Customer-facing surface | One number on Shopify account / Rewards launcher |
Numbers reflect Pikapet's deployment scale as of product launch marketing — your store will differ. The pattern — sync beats split — is what generalizes.
What we deliberately did not build
Aligned with SamePoints positioning:
- No built-in ESP or Smile-style email suite — Shopify gift-card notification + merchant Klaviyo/Flow
- No VIP tiers or referral engine in v1 — sync accuracy first
- No Square Customer Display loyalty injection — Square does not expose that surface to third-party apps
Honesty here increases trust with hybrid merchants evaluating apps.
Lessons for other Shopify + Square retailers
1. Pick one earn authority
If the website shows the balance, the website's ledger must own earn from both channels. Two programs = two truths.
2. Identity is the product
Technology is table stakes. Phone at Square checkout is the behavioural product. Train it like opening the till.
3. Refunds are loyalty moments
Pet SKUs get returned (wrong size, pet refused new food). Automatic reversal beats awkward manual adjustments. See Shopify refunds + loyalty.
4. Display on Shopify, earn everywhere
Customers check balance on the Shopify theme wallet, not on Square Customer Display. Staff direct shoppers to phone browser or account page when asked at till.
5. Migrate before you market
If you are on Smile or Square Loyalty, migrate balances first, then announce "one program everywhere."
Comparison: before vs after
| Before | After | |
|---|---|---|
| Online earn | Yes | Yes |
| In-store earn | No / separate program | Yes — Square payments |
| Customer sees | Website only | One balance on site |
| Staff script | "Online only" | "Same mobile as website" |
| Refunds | Manual / inconsistent | Ledger automation |
| Double earn risk | Square Loyalty + app | Square Loyalty off |
If you are a pet store (or any hybrid retailer)
You do not need Pikapet's exact SKU mix to copy the playbook:
- Read why pet stores lose loyalty with Square + Shopify
- Install SamePoints from Shopify Admin (free tier: 300 processed syncs/month)
- Connect Square; disable Square Loyalty
- Enable Rewards launcher in theme editor
- Run one-week staff drill on phone capture
Broader AU context: omnichannel loyalty for Australian merchants.
FAQ
Is Pikapet still using SamePoints?
Yes — SamePoints began as their production integration and remains the reference deployment for Shopify + Square hybrid loyalty.
Can I get the same results without a physical store?
Shopify-only merchants use SamePoints for online earn, refund-safe ledger, and gift cards. Square is optional — connect when you add in-store.
Did Pikapet use Square Loyalty?
No. Square Loyalty was turned off to prevent a second points currency. Payment webhooks feed the same ledger as Shopify orders.
How long did rollout take?
Online baseline in days; Square staff habit + duplicate merge took two to three weeks of part-time ops attention — not a six-month IT project.
What is SamePoints?
SamePoints is a Shopify app that syncs loyalty across Shopify paid orders and optional Square completed payments into one refund-safe ledger, displayed via Shopify customer metafields and theme wallet sections. Optional auto gift cards at your threshold.
Start free on Shopify Admin or read the Square setup guide. Built because nothing else synced Pikapet's till and website — now available to any merchant with the same pain.
Related articles
- From n8n to SamePoints — building Shopify + Square loyalty
How we built omnichannel loyalty for a Melbourne pet retailer — Docker, n8n, Postgres, metafields, webhooks, and why gift cards beat discount codes.
- Why pet stores lose loyalty with Square POS and Shopify
Pet retailers on Shopify online plus Square in-store often run two loyalty ledgers. Learn why repeat visits drop and how sync loyalty fixes the till-to-website gap.
- Omnichannel loyalty for Australian Shopify and Square merchants
How Australian retailers unify Shopify online sales and Square in-store payments into one loyalty program customers actually trust.
Ready to unify Shopify and Square loyalty? Install the app, connect Square in Settings, and verify events in Logs.