Skip to main content

User Journey Flow


Executive Summary​

The Actual Activation Platform enables mobile applications to reward users for scanning receipts, discovering promotional offers from participating retailers and provides rewarded engagement opportunities. The SDK provides multiple earning opportunities through receipt scanning, coupon clipping, watching rewarded ads (Boosters), and completing product photo tasks (User Generated Content) — creating an engaging rewards ecosystem that monetizes user shopping activity.


User Journeys Overview​

The SDK supports five distinct user journeys, each representing a different way users can engage and earn rewards:

JourneyDescription
Offer Discovery & ClippingBrowse and clip available offers
Receipt ScanningScan receipts to earn on qualifying purchases
Receipt BoostersWatch ads for bonus rewards
Product Capture (UGC Tasks)Photograph products for extra rewards
Missed EarningsCorrect receipt data for potential credits

Visual Flow Diagrams​

Activation Screen Navigation Map

Screen Navigation Map​

Activation Screen Navigation Map

Error Flows​

A receipt that can't be processed doesn't end the journey. Each problem raises its own screen offering a review request, and the shopper returns to the offer wall — or, for a missing field, continues on to their Receipt Summary. The checks run in two tiers: on device before the scan is submitted, and on the server after. See Error Flows for the full behavior.

Activation Error Flows

Client-Side Offer Feed​

With the Client-Side Offer Feed, offer discovery can start in your app's own UI instead of the offer wall. Your app loads the feed and renders it. A tap hands the shopper to the SDK's offer details or group list. Closing those screens hands the shopper back to your app. See Starting from your app's own UI for each step.

Client-Side Offer Feed flow

Reward Earning Opportunities​

Activation Reward Earning Opps


Reward Callback Contexts​

ContextTriggered ByPayloadReward Timing
ScanFinishedReceipt processing completesScan results + base reward
base_scan
Instant
PromoProducts qualify for promotionsPromotional reward total
promo
Pending review — minutes to days
BoostUser completes rewarded ad/CPA offerBoost reward amount
boost
Instant
BarcodeCollectionUser completes UGC product capture. iOS only for now — Android will emit it once User Generated Content is supported on Android.Task reward amount
barcode_collection
Instant
BoostCreditEarnedUser completes a Google rewarded boost (hard currency mode only)Earned amount held for future scanApplied on a later scan via BoostCreditApplied
BoostCreditAppliedReceipt summary opens with hard currency credits assigned to this scan (hard currency mode only)Credit amountInstant

On iOS (1.12.0+), the base reward a ScanFinished scan earns is your app's amount, unless Actual has configured an amount for the receipt's store. In that case Actual's amount replaces yours, on the Receipt Summary and in the base_scan webhook. See Store-specific base scan reward.

Hard Currency Mode​

Hard currency mode is enabled per-app by a BlinkEngage admin — no host-app configuration is required. When active, the SDK fires BoostCreditEarned after a Google rewarded boost completes instead of the immediate Boost callback. The earned amount is held and surfaced on a later scan as BoostCreditApplied. When the app is not in hard currency mode, Google rewarded boosts follow the immediate Boost path.


Error Flows Summary​

A receipt problem raises a screen, not a dead end. Every row below offers the shopper a way forward — usually a retake, always a review request. See Error Flows for how the checks are ordered and when the reward lands.

ScenarioWhat the shopper seesWhat they can doWhere it ends
Photo can't be readInvalid-receipt screen with a checklist of what to checkRetake the photo, or submit it for review as-isOffer wall
Date or total missingA short form asking only for what's missingFill it in and submit, or retake the photoReceipt Summary — the scan continues to processing
Store name missing (only)Nothing — the scan is treated as completeNothing to do; the store is read during reviewReceipt Summary, store left blank
Receipt older than the rewards windowReceipt-too-old screen with a date-correction formRequest a review with the correct date (no retake — the date has already been read)Offer wall
Receipt already submittedReceipt Summary with a duplicate banner, rewards suppressedDispute the match with an optional commentReceipt Summary
Receipt carries an actionable fraud flagReceipt Summary with an invalid banner, rewards suppressedDispute it with an optional commentReceipt Summary
A submission limit was hitFrequency-cap screen naming each limit and its valueDispute the limitOffer wall

These remaining cases are genuine failures rather than review flows — there is nothing for a reviewer to decide:

JourneyError ScenarioUser Message
Receipt ScanningNetwork timeout"Unable to process. Please try again."
Receipt BoostersAd failed to loadBooster not shown (graceful degradation)
Product Capture (UGC)Barcode timeout"Barcode not captured. Try again."
Product Capture (UGC)Upload failed"Something didn't work. Please try again."

Step-by-step User Journeys​

1. Offer Discovery & Clipping​

Goal: Users browse available offers and save them for future shopping trips.

StepUser ActionActual Experience
1Opens the rewards sectionOffer Wall displays with personalized offers
2Browses offers by store or categoryOffers organized into sections (Featured, All Offers, by Retailer)
3Taps "More Stores"Modal shows all participating retailers with offer counts
4Selects a specific retailerFiltered list shows only that retailer's offers
5Taps on an offer cardDetail sheet shows requirements, reward value, qualifying products
6Taps "Clip" buttonOffer saved to account; button changes to "Clipped"
7Returns to Offer WallClipped offers show checkmark indicator

Outcome: User has saved offers that will automatically apply when they scan a qualifying receipt.

Starting from your app's own UI (Client-Side Offer Feed)​

Offer discovery doesn't have to start in the offer wall. With the Client-Side Offer Feed, your app shows the offers in its own UI and hands the shopper to the SDK on a tap. The flow diagram shows the same steps.

StepWhoWhat happens
1Your appThe screen that shows offers appears and asks the SDK for the feed.
2SDKFetches this user's curated offers from Actual and returns them as ranked groups, with reward values already in your currency. If the user's registration is still in progress, the request waits for it.
3Your appRenders the groups with its own cards, and the shopper browses.
4Shopper, your appThe shopper taps an offer or a group's "See all". Your app hands the tapped offer or group to the SDK.
5SDKOpens the offer's details, or the group's full list of offers.
6ShopperClips the offer or scans a receipt, exactly as in the offer wall.
7ShopperCloses the SDK's screens and is back on your screen.
8Your appRefreshes the feed when it may be stale, for example when the screen returns to the foreground.

The Client-Side Offer Feed is available on iOS from 1.14.0; Android support is coming in a future release. On iOS, your app hands the shopper back and forth like this:

iOS (1.14.0+)
Load the feedCall loadOfferFeed(completion:) on BlinkEngageSDK.shared
Hand back a tapPresent or push the screen returned by offerDetailsViewController(for:) or offerGroupViewController(for:)
NavigationYour app's navigation shows the SDK's screen. Dismissing it returns the shopper to your screen.
Staying currentReload the feed when it may be stale. The entry points return nil for an offer or group that is no longer in the latest feed.
Reporting interactionsReport each offer that appears, each tap, and each "View all" with reportOfferFeedEvent(_:)
Feed turned off for your apploadOfferFeed fails with error code 2 (feed unavailable)

See iOS Client-Side Offer Feed for the full integration.


2. Receipt Scanning (Core Flow)​

Goal: Users scan a store receipt to earn rewards on qualifying purchases.

StepUser ActionActual Experience
1Taps "Scan Receipt" buttonCamera activates for receipt capture
2Photographs the receiptReceipt is checked on device before it is submitted
3(only if something's wrong)A screen explains the problem and offers a retake or a review request — see below
4Waits on loading screenBrief ad displays while system processes receipt
5Views Receipt SummaryScreen shows: total rewards earned, qualifying products, bonus opportunities
6Sees celebratory animationConfetti and sound confirm rewards earned
7Reviews product listEach product shows reward status and any bonus opportunities
8Taps "Continue"Session completes; rewards credited to account

Outcome: User earns points for qualifying purchases found on their receipt.

If something's wrong with the receipt​

Step 3 is the branch. Nothing here ends the journey — each case offers a retake, a review request, or both, and a retake reopens the camera on the same receipt rather than starting over.

ProblemShopper's next stepThen
Photo can't be readRetake, or send it for review as-isBack to the offer wall
Date or total missingType in what's missing, or retakeContinues to the Receipt Summary
Receipt too old, limit hit, duplicate, or fraud flagRequest a review, optionally with a commentOffer wall, or a summary with rewards suppressed

A scan that ends at a review request earns nothing yet — the reward is granted only if a reviewer accepts, and arrives later by webhook. See Error Flows Summary for every case and Error Flows for the mechanics.


3. Receipt Boosters (Rewarded Ads)​

Goal: Users earn bonus rewards by watching ads or completing partner offers after scanning a receipt.

StepUser ActionActual Experience
1Completes receipt scanReceipt Summary displays with scan rewards
2Sees Booster cards appearUp to 3 bonus offers slide in from top (after 2-second delay)
3Views Booster optionsEach card shows: brand logo, title, description, reward amount
4Option A: Taps reward button
4a(If Rewarded Ad)Full-screen video ad plays
4b(If CPA Offer)Partner offer modal displays with "Redeem" option
5Completes the ad/offerConfetti animation plays; bonus points added
6Sees updated totalPoints counter animates incrementally to new total
7Option B: Taps "Skip"Booster dismissed; next booster shown (if available)
8Exhausts all boostersMessage: "No more boosts available at this time"

Boost Types:

TypeUser Action RequiredReward Timing
Rewarded Video AdWatch complete videoInstant credit
CPA OfferAccept partner offer (e.g., sign up)Instant credit

Outcome: User earns bonus points on top of their scan rewards.


4. Product Capture (UGC Tasks)​

Goal: Users photograph specific products to earn additional rewards and help improve product data.

StepUser ActionActual Experience
1Views Receipt SummaryProducts with UGC tasks show blue highlight and camera icon
2Taps camera button on productProduct Capture screen opens (full-screen modal)
3Step 1 of 2: Scans barcodeCamera auto-detects product barcode
4Positions barcode in frameSystem recognizes UPC; shows confirmation badge
5Step 2 of 2: Takes product photoUser photographs front of product
6Reviews captured photoPreview displays with "Retake" or "Submit" options
7Taps "Submit"Loading spinner while image uploads
8Submission succeedsReturns to Receipt Summary; confetti plays; points added
9Product shows completedBlue highlight remains; reward badge shows "+X pts"

Error Handling:

ScenarioUser Experience
Barcode timeout (10s)Message: "Barcode not captured. Make sure camera is focused."
Upload failsError screen with "Try Again" or "Back to Rewards" options

Visual Guidance Throughout:

  • Step indicator shows "Step 1 of 2" → "Step 2 of 2"
  • Product name badge visible throughout
  • UPC badge appears after successful barcode scan
  • Clear instructional text at each step

Outcome: User earns task-based rewards while contributing valuable product data.


5. Missed Earnings (Corrections)​

Goal: Users correct receipt data when products weren't properly recognized.

Missed earnings vs. a review request

Both send a correction to a human reviewer, but they answer different questions. Missed earnings is for a receipt that processed fine yet paid less than the shopper expected — a product the scan didn't recognize. A review request (Error Flows) is for a receipt the SDK couldn't accept in the first place — unreadable, incomplete, too old, or flagged. A receipt can go through both.

StepUser ActionActual Experience
1Notices missing products on Receipt Summary"Missed Earnings" button visible in header
2Taps "Missed Earnings"Edit screen opens showing receipt data
3Reviews trip infoStore name, date, and product list displayed
4Taps "Edit" buttonFields become editable
5Corrects store nameDropdown shows suggested retailers
6Corrects purchase dateDate picker opens (future dates disabled)
7Taps "Add Missing Product"Barcode scanner opens
8Scans product barcodeProduct added to list with "Pending Review" label
9Taps "Submit"Corrections queued for manual review
10Sees confirmationProducts show "Pending Review" status

Outcome: User submits corrections for manual review; credits applied if approved.