Shopify app case study
Turning complex returns into collaborative workflows
I designed and built CasePilot Returns, an embedded Shopify application that combines customer self-service, configurable return rules, workflow automation, and team-based case management.
- Full-stack development
- Shopify APIs
- React
- Gadget
The problem
Routine returns can be automated. Exceptions still need an owner.
Shopify supports standard return requests, exchanges and refunds. There is also evidence that despite automation from notorious returns apps, the nature of ecommerce returns still leaves manual work, and that work can span multiple systems and teams, requiring ownership, judgment and coordination.
Shopify itself notes that returns can belong to several teams at once, including customer experience, operations, warehouse, finance and fraud.
11.4%
of return value was flagged as high risk across more than 4,000 Shopify merchants.
Source: Loop, 2026
Multiple teams
can participate in one return: customer experience, ecommerce, operations, logistics, warehouse, finance and fraud.
Source: Shopify, 2026
Manual decisions remain
Shopify displays return fees, but merchants must manually deduct applicable fees when issuing a refund.
Source: Shopify Help Center
Loop's dataset covers 23.4 million returns submitted to more than 4,000 Shopify merchants between November 2024 and October 2025.
Where the workflow breaks
What happens when a return doesn't fit the rules?
The return itself is visible. Responsibility for moving the exception forward is not always as clear.
35 hours/week
spent manually managing returns
Shopify merchant Marc Nolan described handling returns through phone, email, text, social channels and spreadsheets, without centralized tracking or analytics.
After introducing a centralized return workflow, the company reported reducing the work from approximately 35 hours to one hour.
Source: AfterShip merchant case study
Named merchant case study; measurement period was not disclosed by the publisher.
The opportunity was not to replace Shopify's standard return functionality. It was to create a collaborative case-management layer for the requests that require human review.
How I approached the solutionThe product
A shared workspace for returns that need attention
CasePilot brings return context, team ownership, and tasks together to help merchants move complex returns toward resolution.
01 / Manage the work behind the return
-
Return context
All data and files pertaining to a return in one place to be viewed by everyone.
-
Clear responsibility
A team assigned to handle the case based on merchant settings
-
Actionable tasks
The next steps needed to resolve the return anomaly, based on business workflows.
02 / Customer portal
Guide customers through their request
Customers select their items, explain the issue, and request a resolution through a guided return journey.
03 / Return policies
Configure the standard return journey
Merchants define return windows, product eligibility, resolution options, and restocking fees.
The technical build
Behind the workflow. Inside the build.
I built CasePilot across the customer portal, embedded merchant app, and backend, connecting return policies and case management with Shopify store data.
- React · Interface
- Polaris · Components
- Gadget · Backend
- Shopify APIs · Store data
- Next.js · Proxy
One system, two workspaces
Conceptual architecture
Customer
Returns portal
Merchant
Embedded app | Case console
Gadget backend
Shopify
-
01 /
Shopify integration
Connect the return workflow to store records, giving each request the order, customer, and product context it needs.
-
02 /
Configurable policies
Translate merchant settings into return rules: eligibility windows, product restrictions, resolution options, and fees.
-
03 /
Case workflows
Bring the request, its ownership, and the work required to resolve it together through cases, teams, and tasks defined by the merchant.
Data & relationships
A case connects the moving parts.
The return provides context. The case brings together responsibility, status, and the tasks needed to move the request forward.
Simplified relationship model
linked to ↓
assigned to ↓
related work ↓
Inside the logic
Turning policy into a decision.
A focused code excerpt makes the implementation tangible. Here, a return-window check demonstrates how a merchant setting can influence request eligibility.
// Apply the configured return window
const elapsedDays = daysBetween(
eligibilityStart,
requestedAt
);
if (elapsedDays > policy.windowDays) {
return {
eligible: false,
reason: "Outside return window"
};
}Key decisions
Why I built it this way
Three choices that shaped CasePilot’s workflows, merchant controls, and Shopify experience.
-
Give each return a clear owner
Returns that need follow-up benefit from a shared case, with an assignee, status, and tasks.
The choice
Organise returns around a case workflow.
Trade-off: more workflow structure for the merchant to manage.
Ownership, status, and next steps in one place. -
Make return policies configurable
Merchants need controls that reflect how their store handles returns.
The choice
Expose return windows, eligibility, and resolution options in a rule editor.
Trade-off: flexibility adds configuration complexity.
Merchant controls with clear, focused inputs. -
Keep the workspace inside Shopify
Return management can sit alongside the merchant’s existing store operations.
The choice
Build an embedded app with Shopify Polaris.
Trade-off: the experience must fit Shopify’s platform constraints.
A familiar home for the merchant workflow.
About the developer
Hi, I’m Marc. I build Shopify apps and workflows.
I’m a full-stack developer with experience building business applications and integrations.
I designed and built CasePilot Returns, from the customer portal and embedded Shopify app to the backend workflows that connect them.
I’m looking to bring that experience to a Shopify agency or ecommerce team.