Ask
71
@kombucha_kai ·

22 subs auto-refunded because my acknowledge job ran nightly play-billing

610 subscription purchases last month. 22 of them were refunded automatically and I only found out because a user asked why Pro turned off after two days.

I acknowledge purchases in a nightly reconcile job. Median acknowledgement age was 31 hours, p99 was 84. Anything past 72 hours gets refunded and the entitlement revoked, and there is no error, no failed call, nothing anywhere that shouts. The money quietly went back.

Slightly shaken. What is the correct plumbing?

8 answers Share
Report

Answering anonymously — a moderator will review it first.

  • @thermal_theo · 3h ago · 3 replies

    Acknowledge inline, in seconds, never in a batch. The flow that works:

    • client receives the purchase and sends the token to your backend immediately
    • backend verifies the token against the API
    • backend acknowledges on success, then writes the entitlement
    • client also re-queries on every launch and re-sends anything that still looks unacknowledged

    Acknowledgement must never live in something that can be delayed, because delay is the entire failure mode. There is no retry budget - the clock belongs to someone else.

    Then turn on real-time developer notifications through Pub/Sub. That is how you learn about renewals, cancellations, refunds and grace period without polling, and it is the thing that would have told you about the 22 on day one.

    158
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
    • @row_level_sam · 3h ago

      Worth stressing the order: acknowledge on successful verification even if your own entitlement write then fails. You can repair your database at leisure. You cannot un-refund a purchase.

      45
      Share
      Reply

      Answering anonymously — a moderator will review it first.

      Report
    • @secondhandamps · 3h ago

      And keep the client-side acknowledge as a fallback for when your backend was unreachable at purchase time. Doing it in both places is normal here, not paranoid - the operation is idempotent and the downside of missing it is total.

      20
      Share
      Reply

      Answering anonymously — a moderator will review it first.

      Report
  • @stipend_sam · 3h ago

    The silent part is the actual lesson, and it generalises well past billing.

    Alert on the gap: query for purchases where acknowledged is false and created more than an hour ago, run it hourly, page yourself if it is non-zero. Anything with a deadline enforced by somebody else's system needs a monitor with a shorter deadline than theirs, otherwise the first time you learn about the rule is when it has already cost you money.

    99
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
  • @blown_cap · 3h ago · 2 replies

    This is the strongest argument for a subscription vendor that I know of. Not because acknowledging is hard - it is one call - but because it is exactly the sort of rule you only find out about by losing money once, and there are maybe fifteen of those across the two stores.

    33
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
    • @smalltalk_sol · 3h ago

      Mild counterpoint: the vendor also has to be reachable at purchase time, and you still want your own reconcile pass. It moves the failure and shrinks it, it does not delete it.

      14
      Share
      Reply

      Answering anonymously — a moderator will review it first.

      Report
  • @first_repo_finn · 3h ago

    You can see these in the console's refund reporting even though nothing proactively tells you, so add a monthly reconciliation: your own count of active subscriptions against the payout report. Ten minutes a month.

    Silent revenue loss is not rare and almost nobody finds it from logs, because logs record what your code did and this is a thing done to you.

    66
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
  • @adjunct_life · 3h ago

    Email those 22 people and give them a free month. Cheapest support you will ever buy, and a decent share of them will resubscribe rather than remember you as the app that took Pro away.

    9
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report