Key takeaways
A refund request just hit your inbox. The customer paid an annual $14,400 invoice in February. It is May. They have logged in twice. They want all of it back, and they sent the request at 4:51 p.m. on a Friday. You have three options and no playbook.
The default reaction is to say no. Jason Lemkin at SaaStr describes the industry pattern: "Almost every vendor says 'No' to any refund request. No refund for any part of the month. And no refund for any part of an annual, signed contract." Then he explains why the default is wrong.
The "no refund" line saves a few thousand dollars and burns the renewal, the referral, and the case-study customer.
The actual job is more interesting than that. A refund request in B2B is rarely about the money. The customer is telling you something about the account. The work is to figure out what.
This is how to handle refund requests in B2B SaaS, in seven steps that protect the account, the revenue, and the relationship at the same time.
Here is the playbook in order. Each step has its own section below with templates and examples:
Every B2B refund request lands in one of four buckets. Classify it in under a minute before drafting a single sentence of reply.
Churn signal. "Your team is moving to a competitor." "Our use case shifted." "We are cutting tools this quarter." This refund is information about a renewal you are about to lose. Loop in the CSM before responding. The refund question is downstream of the retention question.
Feature gap or expectation mismatch. "This does not do X." "We thought it would integrate with Y." This is product feedback wearing a refund's clothing. Log the reason with ARR-weighting (a $48k account asking for a feature carries more weight than a $48-a-month account asking for the same feature). Then decide on the refund. Internal routing matters more than the dollar amount.
Billing error. "I was charged twice." "I cancelled last month and it billed anyway." This is not a refund conversation. It is an apology, a fix at the root, and a refund as evidence the apology was real. Treat it as an incident, not a ticket.
Wrong fit. "We tried it. It is not for us." This is the most honest version of a refund request and the most legitimate. Most of the time, the right answer is to grant it cleanly, log the reason, and move on. The Lemkin doctrine applies. Step 4 covers how to pick the dollar amount.
The discipline is the classification, not the reply. The same request "I want a refund" produces four different conversations depending on which bucket it sits in. Helply's churn signal detection scans every ticket for the language above and routes accordingly, but the routing works only if the classification works. Do that first.
Most refund policies are written for the website footer. The ones that survive an angry email are written twice.
Write a customer-facing version that is short, plain, and accessible. Then write an internal version that includes the judgment calls, the escalation thresholds, and the exception logic the public version omits. The internal version is the one your agents reach for at 4:51 p.m. on a Friday.
The clauses most B2B SaaS refund policies miss:
The public policy needs to live in more than one place: the site footer, a dedicated KB article, the in-app billing settings page, the welcome email, and inside renewal-quote PDFs for annual customers.
Hosting the policy inside a self-service knowledge base means the agent and the customer are reading the same document. Disagreements about what the policy says are usually disagreements about which version of the policy was open in which tab.
The FTC suggests one minimum: state the timeframe, the conditions, and the process clearly enough that a customer can read the policy and predict the outcome. That is the baseline. Everything else is for your team.
Speed is the cheapest churn intervention in the playbook. It costs zero dollars and prevents the single most expensive failure mode: the silent merchant.
When a refund request goes unanswered for 48 hours or more, customers escalate. A meaningful share of them escalate to their bank. Card networks treat an unresponsive merchant as near-automatic grounds for the customer in a dispute.
The chargeback fee alone runs $15 to $25 per case, before the operational cost of compiling evidence. Repeated breaches push your merchant standing into network review. (Card networks monitor at sub-one-percent thresholds.) None of that happens if you reply within a day.
For high-ARR accounts (over $10,000 annual contract value) or any account within 90 days of renewal, drop the window to one hour. These requests should land on the CSM's desk the same day they arrive, not the same week. The CSM, not the support agent, owns the response.
The acknowledgment template is one short paragraph and does not promise an outcome.
"Got your request, James. I'm reviewing the account now and will come back with a decision by end of day Monday. If you need to reach me sooner, this thread is the fastest path."
That is it. No apologies for the situation yet (you have not decided whether one is owed). No defense of the policy yet (you have not read the bucket from Step 1). Just acknowledgment and a clock. Helply can draft acknowledgments automatically in account context, so the first reply lands in minutes, but the discipline matters more than the tool: the customer needs to know a human noticed.
This is the playbook's centerpiece. Most refund decisions in B2B SaaS turn on two variables: how close the customer is to renewal, and how much they are worth (today and in potential expansion).
| Under 90 days from renewal | Over 90 days from renewal | |
|---|---|---|
| High ARR / expansion potential | Loop in CSM and AE before replying. Default to full refund plus a 30-minute save-call. Cheaper than a lost renewal. Example: $48k annual, 60 days to renewal. Refund the unused portion and schedule the call. | CSM acknowledges. Refund the unused portion (Lemkin doctrine). Investigate the root cause. Preserve the relationship for re-engagement. Example: $48k annual, 8 months in. Refund 4 months, log the reason, keep the door open. |
| Low ARR / no expansion | Just refund. Do not burn an hour disputing $200. The chargeback alone costs more than the refund. Example: $99 a month, churn-flagged, 30 days to renewal. Refund, log, move on. | Apply policy as written. Default to store credit ("$X added to your account"). Log the reason for Product. Example: $49 a month, 9 months in, "didn't use it." Credit and log, no escalation. |
Two reads of the matrix worth slowing down on.
The top-left cell is where most B2B vendors lose money on principle. A 30-minute save-call with the right person beats the refund every single time, and the refund is cheap insurance even when the call goes nowhere.
The customer who gets the refund AND the call shows up again in 18 months as a referral. The customer who gets neither shows up on G2 with a one-star review.
The Lemkin doctrine sits in the top-right and bottom-right cells. SaaStr's position is straight: "Just give any annual customer a refund for the unused portion of the contract, and so on, or at least a partial one. Or give them a credit for coming back later." Lemkin's argument is operational, not generous.
Refunds are not a material share of long-term revenue. They take more internal energy to dispute than to grant. And the few nickels you save by saying no are not worth the angry ex-customer you create.
For accounts where the matrix points to escalation, Helply's account context loads ARR, renewal date, and product usage automatically, so the CSM walks into the refund decision with the numbers already on screen. The decision still belongs to a human. The matrix just stops it from being the wrong human.
The matrix tells you whether to refund. This step picks the form.
The rule that ties all five together: the resolution is not what makes the customer happy in the moment. It is what makes them likely to be a future advocate. A clean refund creates an advocate. A litigated refund creates a Reddit post.
Every refund template on the open web is B2C-flavored. "We are sorry the product did not work for you" does not fit a $14,400 annual contract dispute. These five are written for B2B.
"Hi Maya, got your request. I'm pulling the account now and will come back with a decision by end of day Tuesday. If anything else surfaces in the meantime, just reply on this thread."
Use it on every request. Never promise an outcome in the acknowledgment. The clock is the message.
"Hi Daniel, I have reviewed the account. You signed the annual contract on February 4, used the product through April, and asked to cancel on May 12. We are refunding the unused 9 months at the original monthly rate of $1,200, which totals $10,800.
The refund will land on the card ending 4421 within 5 to 7 business days. I have closed the account and exported your data to the email on file. If you change your mind in the next year, the workspace stays archived and is easy to reactivate."
Show the math. The transparency is the trust signal.
"Hi Priya, looking at the account I can see what happened. You signed up in February, ran one import, then went quiet. Two options: I can pause the account for 90 days (no charges, workspace stays intact, you can come back when the timing works), or I can downgrade you to the free tier so you do not lose the data. Either is faster than a refund and keeps the door open. Let me know which fits."
Lead with the offer, not the policy. The pause is usually what they actually wanted.
"Hi Aisha, I have looked into this carefully. Per the refund clause in section 4.2 of the order form, mid-contract refunds are not available 60 days past the start date for monthly plans. I know that is not the answer you were hoping for.
What I can do: add a free month at the next tier up so you can test the integrations that have been missing, and set up a 30-minute working session with our solutions engineer to walk through your current setup. If we cannot get this working for your team by the end of June, we'll revisit the refund conversation."
Cite the specific clause, not "our policy." Offer one thing with real value. Do not use the word "unfortunately."
"Hi Chris, this is Diana from Helply. James flagged your refund request to me directly. Before we process anything, I would value 20 minutes with you to understand what changed. I have seen the usage drop in April and the support thread with Sandy in March, and I want to be sure we have not missed something we can fix.
If after the call you still want to close the account, we will refund the remaining 7 months in full. Wednesday at 2 p.m. ET, or pick a time here."
This email comes FROM the CSM, not from support. Lead with empathy and a request for a call. The refund is offered, not litigated.
The mechanics are the short part. Most processors put the cash back on the original payment method within 5 to 7 business days. Tell the customer the exact window in the approval reply. Vague windows produce angry follow-ups and the occasional chargeback.
The work that actually compounds is the logging. For every refund processed, capture:
This is the most useful artifact your support function produces. Three refunds in a quarter that all mention "we needed the Salesforce integration" is a product decision, not a support problem. Five refunds that all mention "your pricing page is confusing" is a marketing decision. The log is where these patterns become visible.
A useful rule of thumb: if refunds exceed about 5 percent of MRR over a rolling 90 days, the issue is not the policy. It is upstream. Pricing, onboarding, or product-fit. The log is the evidence file you take to the leadership meeting.
A modern helpdesk should tag, route, and log this automatically. Helply's natural-language query lets you ask "show me every refund this quarter where the reason mentioned the Salesforce integration" and get the answer in one sentence. The log only earns its keep if someone reads it.
A refund is rarely a single line item. The real cost is the cash, the fees, the time, and the second-order effects.
Cost of a refund. A $14,400 annual refund is $14,400. Processor fees are minimal (most card networks refund the original interchange). Agent time is 15 to 30 minutes when handled manually. Customer-side fallout is small if the refund is fast and clean.
Cost of a chargeback. The same $14,400, plus a $15 to $25 dispute fee per case. Add the operational tax of compiling evidence, typically 1 to 2 hours per case. Add reputational risk on your merchant account. Repeated chargebacks push your account into network review. The disputes that get filed are almost always the disputes where the customer felt ignored or stonewalled by the merchant.
Cost of the helpdesk itself. This is the line item most teams miss. Most helpdesks charge per agent. Every workflow you build to flag refund tickets, route them to the CSM, or track refund reasons compounds that seat cost. Helply is free, forever. When the helpdesk is free, the cost of building refund workflows drops to zero, and the math on "should we just refund" changes accordingly.
Yes. At minimum for the unused portion of annual contracts, and for monthly customers who did not use the service.
The no-refund hard line is a brittle position. It saves a few hundred dollars per case, converts a portion of refund requests into chargebacks that cost more, and produces a steady drip of public reviews from customers who feel cheated.
The refund is the easy part. The job is reading the request correctly and routing it to the right person.
Lead with what you can do, not what you cannot. The denial that preserves the renewal sounds like this:
Never use the word "unfortunately." Say what you can do, not what you cannot. Template 4 in Step 6 has the full script.
Helply scans every ticket for refund language. It then loads the account context before anyone reads it: ARR, renewal date, product usage, recent support history, plus CRM and billing data from Gong, Salesforce, HubSpot, and Stripe.
A refund request from a $48,000-ARR account three weeks from renewal does not land in a generic queue. It routes to the CSM with the matrix decision pre-computed and the unused-portion math already calculated.
The helpdesk itself is free, forever. Unlimited seats, all channels, ticketing, knowledge base, macros, reporting.
You pay only when AI delivers an outcome: $0.50 per resolution, $0.25 per draft. Refund classification, churn flagging, and feature-flag detection roll into the $0.50-per-outcome bucket. Same workload as Zendesk Suite Pro. $4,884 versus $0. Request access.
Handling refund requests in B2B SaaS is about reading the signal, routing it to the right person, and logging the reason so the next refund is rarer. The seven steps (read the signal, defend the policy, acknowledge fast, use the matrix, pick the resolution, send the right reply, log and learn) protect the account, the revenue, and the relationship at the same time.
Every refund logged with a reason is product feedback your competitors are still treating as accounting overhead. The teams that win the next renewal cycle are the ones treating refunds as intelligence.
The helpdesk that flags every refund request as a signal before it reaches the queue is free, forever. Request access to Helply.
Acknowledge within 24 hours with a one-line "I have your request and will come back with a decision," then classify the request as a churn signal, feature gap, billing error, or wrong-fit case before drafting the actual reply.
Yes, at minimum for the unused portion of annual contracts and for monthly customers who did not use the service, because a no-refund policy converts refund requests into chargebacks that cost more than the refund.
Lead with what you can offer (an extended trial, a free month of a higher tier, a 1:1 onboarding session), cite the specific policy clause rather than "our policy" generically, and close warmly. The alternative must have real value, not just face-saving language.
30 days from purchase is the most common monthly-subscription default; for annual contracts, the right policy is "unused portion refundable on request" rather than a fixed window, because mid-contract disputes rarely fit a calendar rule.
A refund returns the cash to the original payment method; a credit reduces a future invoice. About 30 to 40 percent of customers accept credits when framed positively, but credits should never be forced when the customer has a legitimate billing or security complaint.
Respond within 24 hours, refund the unused portion of annual contracts by default, document every step in the helpdesk, and never let a refund request go silent. Banks treat unresponsive merchants as near-automatic dispute losses for the merchant.
Configure eligibility checks based on contract terms, usage data, and entitlement status, then trigger refunds through your billing processor's API on cancellation events. Manual processing does not scale past about 50 refunds per month.
Eligibility criteria (who and when), the refund window, partial-versus-full refund mechanics, mid-contract proration logic, billing-error overrides, security or compliance triggers, the CSM escalation threshold, and where the policy lives (site footer, KB, in-app, welcome email, renewal-quote PDFs).