A refund is about more than returning money. It’s about understanding what went wrong.
Here's a workflow to help you review each case, prepare a clear response, and identify patterns to improve your product.
Create a document titled "Refund Rules."
Add four possible decisions:
Before making a decision, compare the purchase date submitted through the refund request form with the transaction date in Stripe or your payment system. You should also check the customer’s product usage in your course platform, SaaS database, or store.
Every refund request should have one final decision.
Open Jotform: Click Create Form → Start From Scratch → Classic Form.
Add these fields:
Add these options under Refund Reason:
Add these options under Preferred Resolution:
Open Settings → Conditions → Show/Hide Field.
Create these rules:
Preview the form and test every option.
Add this notice (or something similar) above the Submit button: "Submitting this form does not guarantee a refund. We will review your order, product usage, and our refund policy: [POLICY LINK]."
Customers can now explain the problem and tell you what they want in one form.
Create a Google Sheet called Refund Operations.
Add these column headers to row 1: Request ID, Submitted At, Month Key, Name, Email, Order ID, Product, Customer Reason, Customer Details, Preferred Resolution, AI Review, Issue Class, Order Verified, Policy Eligible, Usage Checked, Risk Flag, Decision, Workflow Status, Refund Amount, Refund Reference, Final Outcome, Product Fix.
Each row will represent one refund request.
In Zapier, create a new Zap.
Set up the trigger:
Next, create the Month Key:
Next, add ChatGPT (OpenAI) → Send Prompt.
Paste this prompt (or something similar):
"You assist a human refund reviewer. Use only the facts below.
Return exactly:
SUMMARY:
Likely_issue_class:
Missing_facts:
Risk_flags:
Support_option:
Allowed classes: ACCESS, TECHNICAL, EXPECTATION, BILLING, ACCIDENTAL, OTHER.
Do not approve or deny. Do not invent policy terms, usage, payment status, or customer history.
Order ID: [map Order ID]
Product: [map Product]
Purchase date claimed: [map Purchase Date]
Reason: [map Refund Reason]
Details: [map What Happened]
Tried: [map What Have You Tried]
Preferred resolution: [map Preferred Resolution]"
Finish the Zap with these steps:
Each new form submission will now create a row in the sheet with the customer’s answers and an AI summary.
Open the matching order in your payment and product systems.
Set these values in the sheet:
Review the information before choosing a decision.
The AI summarizes the request. You make the final decision.
Create a second Zap.
Set up the filter so the Zap only continues when both of these are true:
Test the filter. If both conditions are true, the Zap should continue. Otherwise, it should stop.
Create four paths, one for each decision state listed in Step 1:
Path 1: Approve
Address the draft to the customer. Leave placeholders for:
Do not send the draft.
Path 2: Support_first
The prompt should ask the AI to write a reply using only the verified information. Include the support action and explain what the customer should do if it doesn't solve the problem.
Add Gmail → Create Draft. Map the text from ChatGPT to the email body.
Path 3: Deny
State the policy rule that applies. Include a link to your refund policy.
Party 4: Escalate
Include the following in the email:
Add Google Sheets → Update Spreadsheet Row at the end of every path.
Use the trigger's Row ID. Set Workflow Status to _DRAFT\READY or ESCALATED. This updates the same row.
In Stripe:
If the refund is successful, add the refund amount and refund reference to your sheet, if available.
Do not tell the customer the refund has arrived. It may take several business days for the refund to appear.
Create a third Zap.
Use the scheduled time as Input. Subtract one month.
Send the rows to ChatGPT with a prompt asking the AI to summarize the refund data and suggest improvements based solely on the information it receives.
Send the summary to yourself with Gmail → Send Email
Before you publish, test all four paths:
Make sure that everything works as expected before using the workflow with real customers.
What stood out to me is that the workflow treats AI as a way to reduce interpretation effort rather than decision responsibility.
That boundary feels important. The more consequential the outcome, the more valuable it becomes to separate preparing a decision from actually making one.
Keeping AI out of the final refund decision is the right boundary. Summarization, classification, and drafting are relatively easy to review, but an approval decision depends on policy, customer history, usage data, and exceptions that may not fit clean rules.
One thing I’d add is an audit trail showing exactly which verified facts were available when the human made the decision. That would make it easier to review inconsistent decisions later and improve the rules without relying only on the AI summary.
Have you found a good way to handle policy exceptions without gradually turning the spreadsheet into a second, undocumented refund policy?
totally agree, a refund always holds a teachable moment.