₹ Free Limit Track

Free calls used up → WhatsApp nudge → paid
→

Every row here is one cap hit: an Android user in the capped arm of the usage-cap experiment used their last free call of the week. Days are the IST day comms received that cap hit. "Paid" means a new subscription's first charge within 7 days after the message was sent.

What a capped user experiences

The usage-cap plan, start to finish · Android only · live settings as of 31 Oct

1
Getting on the free plan

Heavy users are moved to a weekly call limit

Equal is free until a user starts using it a lot. When they open the app, we look at how many calls the assistant handled for them in the last 7 days:

  • More than 30 calls → usage cap, at any account age.
  • Account 3+ days old and more than 20 calls (more than 13 if the account is under a week old) → usage cap.
  • Lighter users (about 14–20 calls) get the other paywall instead: no call limit, but recordings and transcripts are locked. Not covered on this page.
  • New since 29 Oct: half of brand-new users on phones worth ₹25,000+ start on the usage cap from day one.
Once on the cap, the user stays there until they pay.
2
The weekly allowance

20 calls a week, resetting every 7 days

The assistant answers up to 20 calls a week. The week starts on the day the user was put on the cap and resets every 7 days from then, not on a fixed weekday. Failed calls and the "Meet your Assistant" demo call don't count. Call recordings are locked the whole time, even before the limit is reached.

Same rule for everyone on the cap. No control group.
3
As calls get used up

A pop-up on the home screen counts them down

Once they've used 20% of the week's calls (4 of 20), a sheet pops up on the home screen: "16 out of 20 Calls Left", a usage meter, "Your calls quota reset in N days", the plan and price, and a Get Equal AI Unlimited button. It gets more urgent at 50%, 80% and 90%.

No gap is set between showings, so it can appear every time they open the app.
4
The 20th call

Limit reached: the assistant stops answering

From the next call on, calls ring straight on the phone, as if Equal weren't there. No screening, no summary, until the week resets. At this moment the user gets three signals:

  • In the app: the sheet changes to "Weekly Limit Reached" ("Your Assistant handled all 20 of your calls this week").
  • On the home screen: a banner stays up: "Weekly call limit reached · resets in N days · Get Unlimited".
  • On WhatsApp: the message this dashboard tracks, with their first name and their reset date. Sent within seconds, or at 9 AM if it's night. Skipped if they're already paying or opted out.
The WhatsApp message is the only signal that reaches users who don't open the app.
5
If they pay

Unlimited straight away

Tapping Get Unlimited (in the app, or by opening the app after the WhatsApp message) leads to the paywall. They pick a plan (most choose ₹119), set up UPI AutoPay through Razorpay, and the limit lifts immediately: the assistant answers again and recordings unlock.

That first successful charge is the "Paid" step on this page.
6
If they don't

Wait for the reset, and the cycle repeats

Calls keep ringing through until the 7 days are up. Then they get 20 fresh calls, the countdown starts again, and if they hit 20 again they get another WhatsApp message (at most one per week). Over half of cap hits now come from users on their second week or later.

One cap hit = one user × one week.

Behind the scenes: how the WhatsApp message gets sent

Plain-language version · technical names in the right column

1

The call system notices the 20th call

When a call ends, our backend counts it against the user's week. If that call took them across 25%, 50%, 75% or 100% of the limit, it announces it once. The announcement is just a fact, "this user used X of their 20 calls". It doesn't say who to message or how.

user-services · usage.free_limit_consumed
Also copied to Mixpanel as usage.event.free_limit_consumed
2

The messaging system picks it up

Our messaging service (comms) hears every announcement but acts only on the 100% one. The 25/50/75% ones are ignored for WhatsApp. It receives about 98% of what Mixpanel records.

comms-service · communication free_limit_consumed_whatsapp
3

It fills in what it needs to know

It looks up the user's phone number and first name, and asks billing: is this user already paying?

user table · billing subscriptions
4

It decides whether to send

It doesn't send if the user is already paying, opted out of our WhatsApp messages, has a number that recently bounced as "not on WhatsApp", or already got 3 messages from us today. If it's between 9 PM and 9 AM, it waits until 9 AM.

Every decision is logged: eai00comms-decision-log00prod
5

It double-checks, then sends

Right before sending, it checks again that the user still hasn't paid, which matters for the 9 AM sends. Then it sends the approved utility template with the user's first name and reset date from our number +91 81253 97474, through our WhatsApp provider Karix.

Template android_monetization_free_calls_used_up_utility
One row per message: eai00comms-send-ledger00prod
6

WhatsApp reports back

WhatsApp tells us whether the message was delivered or read, or why it failed. Users who turned off read receipts never show as "read", even if they saw it.

Karix delivery reports → eai00comms-webhook-receipt00prod
7

We look for a payment within 7 days

The message has no button and no tracking link, so we can't see the tap. Instead we check billing for a new subscription paid within 7 days of the message.

billing subscription_transactions (first charge)

Headline

For the selected days

Funnel

Big number = share of the step before · every cap hit in the range

Where users drop off

Pick a step. The reasons add up to that step's loss exactly.

Does the message cause payments?

Messages that reached the phone · payments within 7 days

Payments by hour, relative to when the message was sent

Each bar = first charges in that hour. Hour 0 is the hour the WhatsApp message went out. Users were already capped before hour 0, so if the message did nothing the bars would stay flat.

Messaged vs couldn't be messaged

Paid within 7 days of the cap hit. "Couldn't be messaged" = opted out, number marked unreachable, or the send failed. Not a random holdout, so read it as direction, not exact lift.

How fast the message goes out

From comms receiving the cap hit to the WhatsApp send

Why most messages wait 0 seconds and some wait overnight

There's no deliberate delay on this message. Comms sends it the moment it receives the cap hit, unless that's between 9 PM and 9 AM IST. Then quiet hours push it to 9 AM. Users who pay before 9 AM are re-checked at send time and skipped.

The event_id carries a timestamp, but it's the start of the user's weekly cap period, not the cap hit. Measuring from it suggested a ~90h delay that doesn't exist. The median 90h is actually how long users take to use up their free calls.

Who pays: by how fast they used up the free calls

Reached messages, 7-day paid rate, by time from week start to cap hit

Why the paid rate fell (≈1.6% → ≈0.9%)

Analysis snapshot, 31 Oct · messages that reached the phone · paid within 7 days

Short answer: fewer capped users start a checkout. It fell from 16% to 7.5%. Users who do start pay at the same rate as before (about 10–12%), so payments aren't failing. Three things explain the drop, below. Total payers per day still rose, from ~43 to ~70, because far more people hit the cap.
PeriodWhat was liveMessagesRepeat shareStart checkoutStarters who payPaid ≤7dFirst-timers paidPaid with discount
26 Aug – 7 SepLaunch. Two prices (₹159 / ₹199). Half of users had the 25%-off coupon applied automatically. Weekly limit cut 30 → 20 on 2 Sep.35,01217%16.0%9.8%1.61%1.72%63%
8 – 15 SepEveryone moved to the ₹159 plan.33,05441%11.7%10.4%1.26%1.46%56%
16 Sep – 9 OctCoupon auto-apply switched off (16 Sep). Users must type EQUAL25 themselves.111,63055%9.3%11.1%1.09%1.48%30%
10 – 23 OctEntry rules loosened: accounts 3+ days old (10 Oct), the "any age" bar lowered from 40 to 30 calls (17 Oct), 13+ calls for accounts under a week (23 Oct). EQUAL50 (₹79) for older non-payers from 19 Oct.107,10754%7.5%11.6%0.92%1.15%35%
1

More of the cap hits are repeat weeks (≈25% of the drop)

Users who don't pay hit the cap again the next week, and the week after. Repeat weeks went from 17% to 54% of all messages. They pay at ~0.75%, about half the rate of a first-time cap hit, and their checkout starts fell from 14% to 5%. These are mostly people who already said no once.

Holding the launch-period mix fixed, the rate would be 1.08% today instead of 0.92%.
2

First-timers dropped on 8 Sep, when everyone moved to ₹159 (1.72% → 1.46%)

Checkout starts among first-timers fell from 16% to 13% the same week. This also lines up with the end of the launch burst (on 2 Sep the limit dropped to 20, so many long-time users hit it for the first time at once). Without a holdout, the two can't be separated.

Plan experiment usage_cap_plans_exp_prod: 33/33/33 → 100% ₹159 on 8 Sep 04:16 UTC.
3

Turning off coupon auto-apply barely moved conversion, and raised revenue

After 16 Sep, first-timers converted at the same rate (1.46% → 1.48%), but far fewer used the discount (59% → 32%). People mostly paid full price instead of leaving. This change looks like a win.

Gate coupon_autoapply prod 50% → 0% on 16 Sep 14:22 UTC.
4

First-timers dropped again from 10 Oct, when entry rules were loosened (1.48% → 1.15%)

Letting in newer and lighter users brought ~60% more cap hits, but each converts less. Account age alone doesn't explain it: the drop shows up in every account-age group. The 30–40-calls-a-week users added on 17 Oct are the likely low-intent group. Confirming it needs per-user call counts.

usage_cap_experiment_config versions 10, 16, 17, 23 Oct.

Checkout starts use a random 25% of users (by user-id prefix), since the read replica cancels larger reads. All other numbers use every user. Dates come from Statsig version history.

Day by day

Paid rate only for days with a full 7-day window

Definitions

How each number is counted
  • Cap hit: one usage.free_limit_consumed event at threshold 100 received by comms (one per user per weekly cycle). Dated by the IST day of comms' first decision.
  • Comms allowed it: the final verdict (dispatch stage, or t0 if it never got that far) is "send". "Waiting for 9 AM" = deferred and not sent yet at the data cut.
  • Reached the phone: send record status is delivered or read. "Sent, no delivery receipt" = Karix accepted it but no delivered/failed report came back.
  • Read: send record status = read.
  • Paid within 7 days: the user's first charge on a new subscription (paid_count = 1), more than 0 and at most 7 days after the message was sent. Messages sent less than 7 days before the data cut are counted as "Too recent". Revenue = that first charge.
  • Sources: comms decision log + send ledger (DynamoDB, prod), billing_prod read replica, code at comms-service main and user-services main.