recover-failed-payments-with-retry-ladder
Use when involuntary churn from declined cards is bleeding revenue. Times card retries against paycheck and balance cycles and measures the recovered dollars rather than retrying blindly.
- License 许可
- MIT
- 最近更新
- 2026-11-13
- Stars
- ★ 81
- Forks
- 17
01 前言 Front Matter
- name
- recover-failed-payments-with-retry-ladder
- description
- Use when involuntary churn from declined cards is bleeding revenue. Times card retries against paycheck and balance cycles and measures the recovered dollars rather than retrying blindly.
02 资源文件 3
- 许可证LICENSE1.0 KB
- 参考文档SOURCE.md367 B
- 参考文档TRUST.auto.yaml2.2 KB
03 SKILL.md 正文
Recover failed payments with a retry ladder
A card decline is usually a timing accident, not a lost customer. Retry on a schedule aligned to paydays, back off the decline, and measure recovered dollars — not attempts.
Procedure
-
Classify the decline before retrying:
insufficient_fundsandtry_again_laterare soft (retry);stolen_card,lost_card,pickup_cardare hard (never retry);expired_cardretries only after a card-update ping. -
For soft declines schedule 3-4 retries near salary dates, e.g. day +3, +5, +7 from failure, each at a fixed local hour. Salary cycles mean the 1st and the 15th recover best.
-
Run a card-updater (Visa VAU / Mastercard ABU) before every retry so a reissued card is recovered without customer effort.
-
Compute recovered dollars from the ledger, not the retry log:
recovered_minor = sum(amount_minor for charge in attempts where attempt_n > 0 and status == 'succeeded'). -
Compute the recovery rate as recovered over failed —
rate = recovered_minor / failed_minor— and track it per decline reason. -
Worked example: a month failed 400,000 minor involuntarily; retries recovered 108,000 minor; rate = 27%. A month later, adding the pre-final-retry email lifts recovery to 39% with no extra retries.
-
Give up after the ladder: on final failure, move the account to the dunning/suspension path. Do not retry forever.
-
Cap retries per card BIN per day across the whole book so one bad processor day does not draw a network warning.
-
Report recovered dollars and rate; a lower attempt count with a higher rate is a win, not a regression.
-
Retry the outstanding balance, not the original charge, so a partial recovery is not re-collected in full.
-
Suppress retries during an active support thread so a retry does not land seconds after the "we'll retry" notice.
-
Log every attempt with the decline code and a processor request id so a dispute is answered from evidence.
-
Feed recovered dollars back into MRR the month they land and keep a separate involuntary-churn line so the save rate stays honest.
-
A/B the retry timing (payday versus fixed hour) and keep the variant with the higher recovered dollars, not the higher attempt count.
-
Recompute the recovery rate net of second-order losses: a recovered payment that later chargebacks is not recovered.
Pitfalls
-
Retrying hard declines (
stolen_card) is network abuse and flags the merchant ID; classify first. -
Timing retries at a fixed daily hour ignores payday cycles and leaves recovery on the table.
-
Measuring "retries sent" instead of "dollars recovered" rewards volume over outcome.
-
No card-updater means reissued cards are never recovered even though the customer is willing to pay.
-
Retrying the same card dozens of times in a month produces duplicate authorisation holds and support tickets.
-
Retrying the gross charge after a partial payment double-collects; always retry the residual.
-
A retry that fires while a support email is open reads as aggressive and triggers a chargeback.
-
Recovered dollars booked as new revenue overstate new business and hide involuntary churn.
-
Counting a recovered charge that later chargebacks as a save inflates the rate against reality.
Verification
python3 -c "failed=400000; recovered=108000; print(round(recovered/failed*100,1), '%')"
# 27.0 % recovery -> compare against the prior month and per decline reason
Report: recovered dollars, recovery rate, and the split by decline reason, with the number of attempts used.
04 同仓库更多 Skills
recipe-performance
Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold/warm/background-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout/paint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.
mexc-spot-websocket
MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.
mexc-spot-rest
MEXC Spot REST workflows for public data, signed account requests, orders, wallet/admin actions, and secure signing without exposing API keys.
mexc-futures-websocket
MEXC Futures WebSocket workflows for public streams, private account/order/position streams, ping/pong, subscriptions, and depth maintenance.
0xklen-version-and-refresh-sanctions-lists
暂无简介
verify-tests-cover-changed-lines
Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.