What is FIFO?
FIFO stands for First In, First Out: when a shopper redeems points, the oldest available points are applied first. This helps keep your program transparent, accurate, and easy to maintain.
Benefits for Retailers
Encourages Timely Redemption – Shoppers are motivated to use their points before they expire, increasing engagement and preventing long-term point accumulation that could lead to financial liabilities.
Reduces Liability Risks – Loyalty points represent a future cost to the retailer. By expiring older points first, businesses can manage and predict financial obligations more effectively.
Prevents Hoarding & Overspending – FIFO discourages shoppers from stockpiling points indefinitely, helping retailers control excessive redemptions that could strain profitability.
Enhances Shopper Experience – A transparent system where older points are used first ensures fairness and avoids shopper frustration over unexpected expirations.
Improves Program Efficiency – FIFO logic simplifies program management, ensuring a consistent flow of point usage and making reporting and accounting more straightforward.
How FIFO Logic Works in AIQ
When FIFO is enabled in your loyalty settings:
Each time a shopper earns points (via sale, boost, manual adjustment, etc.), an accrual event is logged with a timestamp and expiration.
On redemption, AIQ will automatically use the oldest available points first, moving in order until the full reward is covered.
Example:
A shopper has 250 points total: 100 points from January and 150 points from March.
They redeem 120 points in April. FIFO pulls: 100 from January (now gone) + 20 from March (130 left).
What Happens on Merges?
AIQ uses contact ID (not phone/email) as the single source of truth. That means:
When profiles merge, point histories and expiration dates remain accurate.
Expired points stay expired. Active points stay active.
You won't see "phantom" redemptions or duplicated points.
Where Can I View FIFO Activity?
You will see an updated timeline which shows which accrual event(s) a redemption reduces points from.
Each accrual will show when those points are set to expire.
FIFO points reporting will be available through Alerts & Reporting. For more information, see our Points Reporting documentation.
📋 Looking for pre-FIFO redemption point values?
After switching to FIFO, point values tied to redemptions that occurred before the migration will no longer appear directly in the shopper's loyalty timeline. Redemption entries from that period will show 0 in the points column.
To view how many points were tied to each redemption prior to the FIFO switch, use the View Legacy Timeline option. Access it by navigating to the shopper's History tab, clicking the ⋯ (three-dot menu) in the top right of the points timeline, and selecting View Legacy Timeline.
Migration Scenarios
What Happens When You Enable FIFO
When you switch to FIFO, AIQ rolls over each shopper's current point balance into the FIFO system as of the FIFO start time.
If point expirations were not enabled before, the rolled-over balance will start fresh (the migration date becomes "Day 1" of the expiration window).
If point expirations were enabled before, whatever expires before the FIFO start time will be removed first, and the remaining balance rolls into FIFO.
If You Want to Expire Points Older Than 365 Days Before Enabling FIFO
FIFO does not retroactively evaluate when existing points were originally earned. Use this workflow:
Set point expiration to 365 days (without FIFO)
Allow expirations to process so older points are removed
Enable FIFO to roll over the remaining balance
How Expiration Works After FIFO Is Enabled
Once FIFO is enabled, points are tracked per earning event:
Each time points are earned, AIQ creates an accrual event with its own expiration date (e.g., 365 days after that event).
Redemptions subtract from the oldest unexpired event first.
If an event reaches its expiration date with points still remaining, those points expire.
If You Want a Hard Cutoff Date
If you want all points earned before a specific date to expire immediately, use a points reset date (set to 365 days ago), then enable FIFO with a 365-day expiration window.
Good to Know
FIFO logic must be enabled in your Loyalty Settings.
Expiration windows are still set by you (e.g., 90 days after earning). FIFO just ensures the oldest points are used before they expire.
⚠️ FIFO vs. Legacy behavior differs for multipliers
Legacy loyalty: When a multiplier applies, the original sale event is zeroed out and a separate boost entry holds the full multiplied point value.
FIFO loyalty: The sale event retains its normal point value — it is NOT zeroed out. The multiplier is handled differently and the sale line is preserved.
If you are on FIFO and seeing unexpected zero-point sale entries from a multiplier, contact AIQ Support.
Frequently Asked Questions
Does making a purchase reset the expiration countdown in FIFO?
No. In FIFO, each batch of points expires on its own fixed schedule regardless of new purchases. New purchases earn their own points with their own expiration date, but do not reset the countdown on older points.
What is a "Rollover" point?
Rollover points are pre-FIFO balances that were carried over when FIFO was enabled on your account. They represent points shoppers had already earned before the switch, preserved so they didn't lose their balance.
Why don't my shopper's past purchases or redemptions show points next to them after switching to FIFO?
After enabling FIFO, transactions that occurred before the switch date will not show individual points next to each sale. This is expected behavior — all points earned prior to the switch are bundled together and carried over as a rollover balance on the shopper's Persona. The shopper has not lost any points; they are simply represented as a single total rather than broken out per transaction.
Sales made on or after the FIFO enable date will track and display points normally, showing points earned next to each individual transaction.
How does FIFO affect the "When points will expire" audience requirement?
The "When points will expire" audience requirement behaves very differently under FIFO compared to classic (modern) expiration.
Classic mode: Each contact has one sliding expiration date — their last sale date + N days. Simple, one date per person.
FIFO mode: Points expire lot-by-lot. The requirement uses the expiration date of the oldest lot that still has a remaining balance. Each contact surfaces exactly one date to the audience trait — the date their next batch of points expires.
The date shifts over time: As a shopper redeems, their oldest lots are consumed first. Once a lot hits zero, it drops out and the next-oldest lot becomes the qualifying date. Shoppers can move in and out of this audience naturally as they earn and redeem.
Point types with expiration turned off are invisible: If you have disabled expiration for a specific point type (e.g. rollover, visit, adjustment), those points will never surface in this requirement — even if the shopper has a large balance of that type.
Expiration set to 0 = no one matches: If your program's expiration window is set to 0 (no expiration), no shopper will ever match this audience.
Pre-FIFO points only count if rolled over: Only points earned after the FIFO start date are tracked with individual expiration dates. Pre-FIFO balances only count if they were carried over as a rollover event.
ℹ️ If a shopper's "points will expire" date looks wrong or they're not entering the audience as expected, check: (1) whether the relevant point type has expiration enabled, (2) whether their oldest lot with a balance has been exhausted, and (3) whether your program's expiration window is greater than 0. These are not bugs — they are expected FIFO behaviors.
Should I use a Flow or a regular campaign with the "When points will expire" audience?
A Flow is the better fit. Because each shopper's expiration date is different and shifts as they earn and redeem, a Flow reaches each person at the right moment relative to their own expiration date. A regular campaign only sends to whoever matches at the moment you hit send — you'd constantly miss shoppers whose dates have moved.
Use a Flow when your goal is to warn shoppers X days before their points expire. Use a regular campaign only for a one-time blast to everyone currently expiring within a fixed window.
Does FIFO affect the {{loyaltyPoints}} personalization macro?
No. The {{loyaltyPoints}} macro continues to work normally when FIFO is enabled — it reads the shopper's total balance through the FIFO engine. Retailers can use it in campaigns exactly as before.
Need Help?
If you need assistance, reach out to AIQ Support anytime via chat widget within your AIQ Dashboard.