| Accrual against trade pricing (not catalogue) | Wrong pricing, 200-400% over-credit | Correct ex-GST, post-discount subtotal | The single most common bug in B2B Shopify loyalty. SaaS apps read line_item.price (catalogue), custom build reads the actual order subtotal after SparkLayer / BSS / B2B pricing has been applied. |
| Quarterly reset with per-account caps | Often unsupported | Native config | B2B businesses run quarterly accrual with per-account caps. Custom build supports this natively. |
| Bonus-category multipliers (1.5x or 2x on tagged products) | Limited or per-product surcharge | Product-tag driven, no extra fees | Apply the multiplier via Shopify product tags. Tag set in admin, multiplier applied automatically. |
| Shopify webhook retry handling | Often missing or naive | Idempotent from day one | Every order ID processed exactly once. Redeliveries (which are normal Shopify behaviour, not exceptional) do not double-credit. |
| GST handling | Often divided regardless of tax flag | Respects taxes_included flag | Accrue against ex-GST subtotal. Detect taxes_included correctly. Avoids the "divided GST in the wrong direction" bug that haunts naive implementations. |
| Refund and cancellation netting | Often manual or absent | Automatic on refunds/create and orders/cancelled webhooks | Refund or cancel an order, points reverse automatically. Same idempotency discipline. |
| Finance reconciliation | Manual export, no audit trail | CSV export with full audit | Finance team reconciles in 30 min per quarter. Every credit, every refund, every redemption traceable to an order ID. |
| Cost as the program scales | Per-customer or per-redemption SaaS surcharge | $0 ongoing software fees | You own the code. Hosting is pass-through (typically $20-50/month). No per-customer or per-redemption surcharge as the program grows. |