TrackBack

PRD: TrackBack — resolve missing, pending and cancelled cashback in seconds

Author: Shraman Hazra · Status: Prototype built, ready for validation · Last updated: 27 Sep 2026 Links: Working demo · Wallet explainer · Ops console · Impact & eval · Source

Unofficial concept. I don't have CashKaro's internal data. Every number below is either from public Play Store reviews (sourced, reproducible) or an explicitly labelled assumption that I'd replace with real data in week one.


1. TL;DR

When cashback doesn't track, users raise a ticket, wait 8–10 days, get asked for screenshots, and often end up with a cancellation that has no explanation. That loop generates 54% of all negative CashKaro reviews in the last nine months (344 of 633 substantive 1–3★ reviews).

TrackBack replaces the loop with three things:

  1. Claim copilot (user): share an order screenshot or email → an LLM reads it → a rules engine checks it against the visit log and store rules → the user gets a definitive answer in seconds: filed for you, wait, we'll re-check automatically, add one thing, or no, and here's the exact rule.
  2. Wallet explainer (user): every pending or cancelled cashback shows which step it's at, what the store is waiting for, and what happens next. Dates never move silently.
  3. Ops console (internal): agents only see claims that need judgment (high value or risk), with evidence and a drafted reply already there. Reason codes roll up into a list of product fixes that would stop claims happening at all.

In a 1,000-claim simulation, 95% of claims are settled without a person, and there are 0 false auto-files across a 400-scenario test suite.


2. Problem

2.1 Evidence

I pulled the 6,000 most recent CashKaro Play Store reviews (India, English, 17 Dec 2025 – 26 Sep 2026) and keyword-coded the 633 negative reviews with real text into themes (multi-label, Hinglish variants included; hand-checked precision 37/40). Code: research/themes.py.

ThemeShare of negative reviews
Cancelled / rejected cashback24%
Stuck in pending / confirmation date moved21%
Cashback never received16%
No reason given / support unhelpful14%
Order didn't track, had to raise a ticket11%
Surprise T&C / not eligible5%
Amount lower than promised4%

Any claim-lifecycle theme: 54%. Negative volume is steady at 50–90 a month, while total reviews grew 5× from June to August 2026. This is structural, not a spike. CashKaro replies to 97% of negative reviews, so the team clearly cares; the gap is in the product loop, not in effort.

What users say, paraphrased:

2.2 Why it happens (root causes)

Most "missing" cashback isn't a bug. It's attribution mechanics the user can't see:

MechanicWhat the user experiences
Store only credits orders within N hours of the visit"I came through the app yesterday and it didn't track"
Store app was already open, so the handoff dropped"Tracked on web, never in app"
Another site or coupon extension was visited after us (last-click wins)"Cancelled: not attributed to CashKaro"
Items were in the cart before the visit"Cancelled: product was already in cart"
Outside coupon used at a store that voids cashback on them"Cancelled with a vague reason"
Store credits only the first item of a cart"Only one item tracked"
Store's final report arrives after the return window plus a validation lag"Pending for 2 months, date keeps moving"
Store rejects without a reason code"Rejected, no explanation"

Insight: users experience all of these as one thing, "CashKaro didn't pay me", because the product never tells them which one it is. The cost is trust, which is the entire product for a cashback app.

2.3 Who's affected


3. Goals and non-goals

Goals

  1. Give every "didn't track" a definitive, explained answer in under a minute for ≥90% of cases.
  2. Remove the ticket for every claim where the rules already decide the outcome.
  3. Make every pending/cancelled state self-explaining: reason + next step + date.
  4. Turn claim data into product fixes that prevent claims (nudges, store-page rules).

Non-goals (v1)


4. Solution

4.1 Principles

  1. AI reads, rules decide, AI words. An LLM extracts order fields from messy screenshots, forwarded emails, SMS and Hinglish messages, and may rephrase messages. Eligibility and amounts come from a deterministic engine that's testable and explainable to a store.
  2. Every "no" names the rule and has a human route. No dead ends.
  3. Don't make a user wait for a "no". Rule checks run before the 72-hour tracking-delay check.
  4. Dates never move silently. A moved date always comes with the reason.
  5. Assemble evidence once. The claim sent to the network carries the click ID, timestamps and eligible value, so it doesn't bounce back asking for screenshots.

4.2 Claim flow

Order screenshot / email / SMS
      │  LLM (JSON validated against a schema) — or rule-based parser as fallback
      ▼
Extracted fields ── sanity checks (order-ID format per store, items vs total, date range)
      │  user confirms / edits
      ▼
Rules engine (visit log + wallet + store rules + user history)
      │
      ├─ AUTO_FILE       → pre-filled claim sent to the affiliate network
      ├─ WAIT            → auto re-check when the tracking delay ends; user does nothing
      ├─ NEEDS_INFO      → ask for exactly one thing (e.g. the invoice)
      ├─ NOT_ELIGIBLE    → the exact rule, in plain language, + what to do next time
      ├─ HUMAN_REVIEW    → ops queue with evidence + drafted reply
      └─ ALREADY_TRACKED → open the wallet explainer for that order
      ▼
Message: approved template (EN / Hinglish) — optionally reworded by the LLM,
         rejected if it introduces any number/date/amount not in the template

4.3 Decision spec

Checks run in this order; the first failing hard rule decides.

#CheckFails →Rationale
1Store, order ID, date, amount, items presentNEEDS_INFOAsk for one thing, not a form
2Order not already in walletALREADY_TRACKEDDuplicate tickets are pure waste
3Raised within store's claim window (10–15 days)NOT_ELIGIBLENetwork won't accept later
4Visit through us before the order, within the store's attribution windowNOT_ELIGIBLECore attribution rule
5Order not cancelled/returned (exchange per store rule)NOT_ELIGIBLENo sale, no commission
6At least one item in an eligible categoryNOT_ELIGIBLEStore-level exclusions
7No outside coupon at stores that void on themNOT_ELIGIBLEStore-level rule
8Store's tracking delay (48–72 h) has passedWAITIt may still track by itself
9Invoice attached if order ≥ ₹5,000NEEDS_INFONetworks reject large claims without one
10Cashback ≤ ₹1,000 and no risk signalHUMAN_REVIEWProtect money and the network relationship
—All passAUTO_FILE

Risk signals: account flagged by trust & safety; <30% approval on ≥8 past claims; account <14 days old claiming >₹300. Thresholds live in one POLICY object so ops can tune them from override data.

Store rules (windows, lags, exclusions, coupon policy, multi-item tracking, caps) are config per store, owned by partnerships, not code.

4.4 Wallet explainer

For each wallet entry: a 4-step timeline (tracked → return window closes → store's final report → ready/cancelled), a one-sentence why, and a what next. Store cancellation codes map to plain language plus an appeal button where an appeal can succeed (returned-but-kept, cancelled-but-delivered, rejected-without-reason). Overdue entries escalate to the network automatically, then to a person after 7 days.

4.5 Ops console


5. User stories and acceptance criteria

#StoryAcceptance criteria
U1As a shopper whose order didn't track, I want to share my order confirmation and get an answer immediatelyScreenshot/email/SMS accepted; fields shown for confirmation; decision in <10 s p95; message in EN or Hinglish
U2As a shopper, if my claim is valid I don't want to send anything elseAUTO_FILE sends click ID, timestamps, eligible value; user sees expected cashback, store answer date and confirm date
U3As a shopper who claims too early, I don't want to come back laterWAIT schedules a re-check at order + tracking delay and files automatically if still untracked
U4As a shopper whose claim isn't eligible, I want the specific reason and what to do next timeMessage names the rule with the numbers (e.g. "visit was 31 h before; Flipkart credits 24 h"); link to a person
U5As a shopper with pending cashback, I want to know why and whenTimeline + why + next; moved date shows old and new dates and reason
U6As a support agent, I only want claims that need judgmentDefault queue = HUMAN_REVIEW; evidence and draft reply present; one-click actions
U7As an ops lead, I want to tune rules from evidenceOverrides logged with reason; thresholds configurable
U8As a PM, I want to prevent claims, not just process themReason-code volume dashboard mapped to product fixes

6. Prioritisation

RICE on the candidate solutions. Reach is per quarter, relative and illustrative; I'd re-score with real funnel data.

CandidateReachImpactConfidenceEffort (pw)ScoreCall
Wallet explainer (reason + next step + date)600k180%3160kShip first: no network dependency, broadest reach
Day-4 "your order hasn't tracked" nudge + auto re-check150k160%190kShip with the explainer
Claim copilot with auto-file150k270%635kCore bet: needs network claim API / bulk-upload agreement
"Your visit expires in 3 h" nudge300k0.550%237.5kAfter data shows CLICK_OUTSIDE_WINDOW volume
Promised-amount lock at click time50k150%46kSeparate PRD

Sequencing: explainer + re-check first (weeks 1–4), then copilot for Amazon and Flipkart (largest claim volume), then the long tail of stores. The prototype builds all three to prove the system works end to end.


7. Metrics

TypeMetricTarget
North star% of missing-cashback cases resolved with no ticket raised≥ 70% in 90 days
PrimaryMedian time from "didn't track" to definitive answer< 1 min for ≥ 90% (today 8–10 days per reviews)
PrimarySupport tickets tagged missing/pending/cancelled per 1,000 orders−50%
GuardrailNetwork rejection rate on auto-filed claims≤ manual baseline
GuardrailDispute/reopen rate on NOT_ELIGIBLE≤ 5%
GuardrailFalse auto-files found in audit (weekly 1% sample)0 tolerance; any → pause auto-file for that store
Lagging1–2★ reviews mentioning lifecycle themes per 1,000 reviews−40% in 2 quarters
Lagging30-day repeat purchase through app after a claim+ vs control

Experiment design


8. Risks and mitigations

RiskMitigation
Wrong "no" destroys trustEvery no names a rule + human route; dispute rate is a guardrail; boundary cases in the test suite
Fraud: fabricated screenshotsVisit log is the source of truth, not the screenshot; risk signals route to humans; invoice above ₹5k; network is the final validator
Flooding networks with claims hurts the relationshipOnly well-formed claims are filed (fewer than today's manual forwards); per-store daily cap; rejection-rate guardrail
LLM misreads a fieldStructured output, per-store ID formats, items-vs-total check, user confirms fields; AI never sets eligibility or amount
LLM rewrite changes a numberGuardrail rejects any rewrite with a number not in the approved template; falls back to template
Store rules change silentlyRules as config owned by partnerships; alert when a store's auto-file rejection rate drifts
API outage / cost / rate limitsRule-based parser fallback (93.6% field accuracy on test set); provider-agnostic layer (Groq free tier or Claude); one call per claim

9. Validation plan (first 30 days if I joined)

  1. Week 1 — backtest. Pull 3 months of historical missing-cashback tickets with their eventual network outcome, plus click logs. Run the engine offline. Report agreement with real outcomes by store and reason, and especially any case the engine would auto-file that the network rejected. This validates the spec, which the current suite (generated from the same spec) can't.
  2. Week 1 — talk to 10 users who raised a ticket last month and 5 support agents. Test the wallet explainer copy in Hindi and English.
  3. Weeks 2–3 — shadow mode. Engine runs on live claims; agents see its suggestion but act as today. Measure agreement and time saved.
  4. Week 4 — ship the wallet explainer + auto re-check to 10% of users (no network dependency).
  5. Weeks 5–8 — auto-file pilot on Amazon for 10% → 50%, gated on the guardrails.

10. Open questions for the CashKaro team

  1. Which affiliate networks accept programmatic missing-claim submission vs. manual upload, and what are their response SLAs?
  2. What share of today's tickets are resolved in the user's favour? (Sets the baseline for the rejection guardrail.)
  3. Do we receive cancellation reason codes from networks, and how granular are they?
  4. Is the click log joinable to orders at sub-ID level for all major stores?
  5. Who owns store rules today: partnerships, ops, or engineering?

11. What's built vs. what's mocked

PieceStatus
Review scrape + theme codingReal. 6,000 reviews, reproducible scripts
Rules engine, status explainer, messages (EN + Hinglish)Built. Unit-tested; 400-scenario suite + 16 boundary cases
LLM extraction (text + screenshot) + guarded rewriteBuilt. Groq (gpt-oss-120b text, Qwen vision) when GROQ_API_KEY is set, Claude when ANTHROPIC_API_KEY is set; parser fallback otherwise. 92.3% of test documents fully right vs 84.6% for the parser
Visit logs, wallet, users, store rulesMocked. Illustrative data shaped like real affiliate programs
Network claim submissionMocked. Payload is built; no network is called
Ops console actions, override logBuilt in-session (no persistence in the demo)
Impact numbersSimulated on an assumed claim mix, stated in the code