How do you prove a subscriber actually used your software before disputing a renewal charge?
Renewal disputes on subscriptions usually hinge on one thing: whether you can show the customer kept using what they paid for. Here is what to log, how to present it, and when to refund instead.

Why renewal disputes are different from a one-time purchase dispute
When a customer disputes a one-time purchase, the argument is mostly about delivery: did the thing arrive, did it match the listing. A renewal dispute is different because the customer already had access to your product before the charge in question. The issuer is not asking whether you delivered something new. It is asking three narrower questions: did the cardholder agree to recurring billing, were they told the renewal was coming, and did they keep using the service after it went through. If you can answer all three with records your system created automatically at the time, you are in a strong position. If your answer is a paragraph written after the dispute arrived, you are not. Related: Building a Strong Evidence Packet
The reason code shapes which of those three questions matters most. A fraud-coded dispute (the cardholder does not recognize the charge) turns on identity: showing that the account was created by this person, with this email, from the same device or IP that made earlier undisputed payments. A cancelled-recurring dispute turns on your cancellation records and the notice you gave before renewal. A not-as-described or not-received dispute turns on usage. Read the code first, then build the response around the question the bank is actually asking, rather than sending the same generic packet every time. Related: Meeting Dispute Deadlines
Keep reading: Why Most Chargebacks Are Lost, Building a Strong Evidence Packet, Understanding Chargeback Reason Codes. See how DisputeLoom helps you chargeback evidence packager for stripe sellers.
The usage events worth logging from day one
Most subscription teams discover their logging gaps during their first serious dispute. The events that matter are the ones that show a human choosing to use the product: successful logins with timestamp, IP address, and user agent; meaningful actions such as creating a project, exporting a file, sending a message, or inviting a teammate; API calls tied to the account's key; mobile app sessions; and support tickets opened from inside the app. Store each event in an append-only table with the internal user ID, the Stripe customer ID, the event name, and the UTC timestamp. Email opens and clicks are weaker because they can fire from security scanners, so treat them as color, not proof. Related: When should a Stripe seller refund an early fraud warning instead of waiting for the chargeback?
Retention matters more than people expect. Cardholders can file disputes months after a charge, and renewal disputes often arrive after the following renewal has already happened. Keep event data for at least a year beyond the charge date, and make sure it survives account deletion in an anonymized but queryable form. Avoid leaning on third-party analytics dashboards that sample traffic or aggregate by session, and on 'last seen' fields that get overwritten with every visit. The test is simple: can you run one query that returns everything this customer did between the renewal date and the dispute date, and can you export it in a readable format? If not, fix that before the next dispute, not during it.
Turning raw logs into evidence an analyst will actually read
A dispute analyst at the issuing bank spends minutes on each case, not hours. Lead with a short, dated timeline in the text portion of your response: the signup date and the terms accepted, the date of the first undisputed payment, the date the renewal reminder was sent, the number of logins between the renewal and the dispute, and the last recorded activity. Stripe's dispute evidence object has a field for exactly this kind of material (access_activity_log), alongside fields for the customer's email and purchase IP. Use them rather than burying the timeline inside a PDF, because the text fields are what the analyst sees first. Related: What Banks Look For in Evidence
Then attach the trimmed log as an exhibit. Filter it to the window that matters, keep the columns to date, action, and IP, and highlight any rows where the IP or device matches the one used at signup or at the original undisputed payment. Add the consent screenshot showing the recurring terms and the acceptance checkbox as they appeared at checkout, the renewal reminder email with its send timestamp and delivery status from your email provider, and your cancellation records showing either no request or a request dated after the renewal. If the customer did cancel after the renewal, state your refund policy plainly and note whether you offered a prorated refund. Consistency between the text summary and the exhibits is what makes the packet credible.
When usage evidence is weak and what to do instead
Sometimes the log is empty. The customer never logged in after the renewal, and the honest reading is that they forgot the subscription existed. Card network rules for subscriptions expect merchants to disclose recurring terms clearly at signup, to notify the cardholder before certain renewals (trials that convert to paid, and plans billed infrequently), and to provide an easy cancellation path. If you did all of that, you can still respond and may win, but the odds drop, and for small renewal amounts the dispute fee and the hit to your dispute ratio can outweigh the recovered revenue. Write a rule for this so nobody has to argue about it: for example, no post-renewal activity plus no reminder sent means refund and accept, while a sent reminder plus accepted terms plus a meaningful amount means respond.
The longer-term fix is to make renewals unsurprising. Send a reminder a week or so before annual renewals with the amount, the date, and a one-click cancellation link. Put a visible cancel button in account settings and confirm cancellations by email. Use a statement descriptor that includes the product name the customer recognizes, not just the legal entity. For annual plans, consider asking dormant accounts to reconfirm before charging. Tools like DisputeLoom can assemble the activity log, consent record, and reminder history into one packet, but none of that helps unless the underlying records were captured when the events happened.
- Renewal disputes turn on consent at signup, notice before renewal, and usage after renewal, so your response should answer all three.
- Log logins and meaningful actions with timestamps and IPs in an append-only table keyed to the Stripe customer ID.
- Lead with a short dated timeline in Stripe's text fields, then attach a trimmed, highlighted activity log as an exhibit.
- When there is no post-renewal activity and no reminder was sent, refunding is often the cheaper and more honest choice.
Fight chargebacks with a complete evidence packet
Chargeback evidence packager for Stripe sellers. DisputeLoom is built to help you put this into practice.
Build a responseMore from the DisputeLoom blog

Why Most Chargebacks Are Lost

Building a Strong Evidence Packet

Understanding Chargeback Reason Codes
Get the DisputeLoom playbook
Practical guides on chargeback defense, straight to your inbox as we publish them. No spam, unsubscribe any time.
