Three storefronts, one operational process
Separate brand domains generated a steady flow of return and exchange requests that required coordinated action across customer service, shipping, warehouse, finance and inventory.
Shopify reverse logistics case study · Enterprise eCommerce · Production
This Shopify returns management case study covers a centralized reverse-logistics workflow I designed and built inside an existing CRM for three independent Shopify stores—from scheduled ingestion and CSR decisions to RMAs, USPS labels, customer communication, receiving, refund calculation, inventory disposition and synchronization back to Shopify.
The process begins when a customer submits a return or exchange request through one of three Shopify stores. Scheduled .NET API services running as Windows Services retrieve Shopify data through REST and GraphQL, preserve incoming records in a raw SQL Server layer, and then populate the production model used by the CRM.
From there, CSRs review the complete order context, approve or decline requests, trigger automatic RMA creation, generate USPS return labels, communicate from the correct brand email, and hand the return into a controlled receiving workflow. After inspection, the CRM determines the operational disposition of the item, calculates the actual financial outcome and synchronizes the resolution back to Shopify.
Separate brand domains generated a steady flow of return and exchange requests that required coordinated action across customer service, shipping, warehouse, finance and inventory.
The existing CRM became the operational control point, while scheduled integration services kept Shopify data traceable and synchronized.
Twelve CSRs handle requests from all three Shopify stores through one production workflow instead of switching between disconnected systems.
This is not simply a returns screen. It is an orchestration layer connecting commerce, customer service, USPS shipping, customer communication, warehouse operations, refund controls and inventory recovery.
Return and exchange requests originated across three separate Shopify domains, but the operational work happened across the company’s existing CRM, customer-service team, return department, shipping processes and in-house inventory. This made the project a Shopify reverse logistics integration problem rather than a simple returns screen: the solution needed to preserve the Shopify experience while giving internal teams one controlled place to act.
Related consulting capabilities: eCommerce systems, enterprise integration and workflow automation. You can also explore my enterprise software architecture approach.
Defined the raw-to-production SQL Server model, integration flow, workflow states, traceability and the relationship between Shopify and the existing CRM.
Implemented and supported the API flows used to import return and order data and send operational decisions and final outcomes back to the correct store.
Deployed .NET APIs as Windows Services that run on schedule and move external Shopify data through the controlled staging and production pipeline.
Implemented RMA numbering, USPS label integration, brand-aware communications, receiving logic, refund rules and inventory-disposition decisions.
Managed the USPS Developer Portal application and integrated USPS APIs for return-label pricing and generation.
Delivered the workflow into the existing CRM used by 12 CSRs and supported the live system as it processes ongoing return and exchange requests.
The customer submits a return or exchange request through the originating Shopify store.
.NET API services running as Windows Services retrieve Shopify data through REST and GraphQL.
Incoming return and order data is preserved in SQL Server raw tables before production processing.
Validated and transformed records become available to the CRM workflow.
Desktop counts refresh every 15 seconds and a new-request alert directs attention to fresh work.
The CSR reviews customer, order, line items, financial information and the Shopify event timeline.
The decision is recorded in the CRM and synchronized with the originating Shopify store.
An approved request automatically receives a database-generated RMA with support for multiple RMAs against one order.
Package weight is resolved and the USPS API returns the applicable return-label pricing and label.
The correct brand-specific CSR sender delivers the RMA, label and instructions and the communication is logged.
The return department opens the RMA by number and records the received products and condition.
Condition and sales data determine whether the item returns to in-house inventory, a vendor-return box or an exception path.
Shopify provides an estimated refund amount; the CRM applies the company’s rules and determines the actual financial resolution.
The customer is informed, Shopify receives the final status or refund update and the CRM retains the complete operational history.
Call Shopify REST and GraphQL APIs on schedule.
Preserve Shopify source data before production processing.
Prepare trusted records for operational use.
Serve the CRM and downstream workflows.
Weight-based label pricing and return-label generation.
Correct sender identity and communication logging.
Condition and sales data drive the product path.
.NET Windows Services isolate recurring Shopify API work from the CSR user interface and keep ingestion predictable.
External source data is preserved and validated before it can affect the CRM’s operational records.
Customer service, shipping, receiving, refund logic and inventory disposition are coordinated through one internal workflow.
Shopify responses are not written directly into the CRM’s operational tables. The incoming source data first lands in raw SQL Server tables. Processing then validates, maps, deduplicates and distributes the records into the production model used by customer-service and returns workflows.
This staging pattern gives the team a reliable source record for troubleshooting and reprocessing while protecting operational tables from incomplete or malformed external data.
Raw imports retain the original Shopify data so integration problems can be diagnosed without depending on a transient API response.
Only transformed and trusted records become actionable in the CRM.
The raw layer provides a controlled place to investigate and re-run processing when required.
Store, order and return references remain associated with the production record so updates go back to the correct Shopify domain.
The CSR desktop shows return counts by operational state and refreshes every 15 seconds against internal application data. When a newly imported request appears, an alert prompts the team to begin review instead of manually monitoring three Shopify admin panels.
The platform also imports Shopify order events and displays them chronologically. A CSR can understand how the order moved through creation, payment, fulfilment, shipment, previous refunds and the current return request before making a decision.
Imported events are normalized and displayed in sequence to explain the complete order journey.
The CRM checks its own return queues and status counts for new work.
A visible notification directs CSR attention to the newly imported request.
The production interface turns the returns workflow into a set of focused operational views. CSRs can see new work, prioritize aging requests, inspect Shopify and CRM states side by side, review the order timeline, and complete approval or decline actions without moving between separate systems.
Screens shown below use anonymized operational identifiers. Customer-specific information has been removed from the public case study.
The CSR desktop groups work by status and refreshes every 15 seconds, giving the team a single view of new requests, approved returns, refunds, declines and closed cases.
CSRs can search and filter the work queue while comparing Shopify state, CRM state and aging information. This makes it easier to identify requests that require attention without opening each store separately.
The detail workspace combines return information, line-item quantities, reasons, restocking calculations, product weight, decision actions and the Shopify event timeline. The CSR can understand the order lifecycle before taking action.
Approval connects the customer decision with automatic RMA creation and a prepared communication flow. The CSR can review the message and return-shipping options before completing the action.
A declined request records a structured reason, supports internal CSR remarks and prepares the customer notification in the same workflow so the operational decision and communication stay aligned.
After a customer ships an approved return, the return department processes the package by RMA number. The screen brings together receiving notes, item condition, shipping details, restocking rules, refund calculation and final closure in one controlled workflow.
The package is identified through the internally generated RMA and matched to the approved return.
The return team records whether merchandise is received in good condition, defective, incorrect or requires another exception path.
The CRM applies shipping, restocking and refund rules to determine the actual financial outcome rather than relying only on Shopify's estimate.
Accepted items can move to in-house inventory or a vendor-return flow according to condition, business rules and sales history before the RMA is closed.
Approval creates an RMA in SQL Server using an order-based sequence such as RMA-[OrderNo]-1. The incrementing suffix supports multiple RMAs against the same order.
The platform calls USPS APIs to obtain weight-based return-label pricing and generate the return label. I configured and administer the supporting application in the USPS Developer Portal.
The originating Shopify domain determines which CSR email identity is used so customer communication remains consistent with the brand and replies route correctly.
Customer emails are logged against the return so CSRs can see what was sent, when it was sent and which operational action triggered it.
The company works with more than 50 vendors, and product-weight information is not consistently available from every supplier. Accurate weight is still required because the USPS return-label price depends on the package being shipped.
To solve that gap, I built and maintain a historical weight reference using approximately ten years of USPS shipment data. When current vendor weight is unavailable, the system can use the maintained historical data as an input to the package-weight calculation before requesting the applicable label amount from the USPS API.
Shopify provides an estimated refund amount, but the CRM determines the actual refund according to the company’s return rules and the operational data available to the system. Once the financial resolution is confirmed, the customer is informed and Shopify is updated.
Current vendor data is used when available; maintained USPS history provides a fallback where weight is missing.
The resolved package weight is used through the USPS API to determine the return-label cost.
The CRM applies the company’s business rules to determine the final refund rather than relying only on Shopify’s estimate.
The return department has a dedicated screen for processing incoming packages by RMA number. Team members confirm what was received and classify the item condition using operational options such as good condition, defective and other exception states.
For an acceptable item, the system evaluates business rules together with sales data before deciding the next disposition. A product may return to available in-house inventory when it is useful for future orders, or it may be assigned to the appropriate vendor-return box. Defective or otherwise unsuitable items remain outside sellable inventory.
The physical package is matched to the correct order, customer and approved return before downstream actions occur.
Return-department users classify the actual merchandise rather than assuming an approved return is automatically sellable.
Good-condition products can be restored to in-house stock or routed to a vendor return based on operational and sales data.
Shopify payloads are preserved before validation and production processing.
Windows Services run the recurring Shopify integration independently of user interactions in the CRM.
The 15-second desktop refresh reads internal operational data, reducing UI dependence on external API response time.
CSRs see the chronological order lifecycle rather than interpreting isolated Shopify fields.
An order-based RMA number with an incrementing suffix creates a traceable identity for each physical return.
Returned merchandise becomes sellable only after condition review and the system’s inventory-disposition decision.
| CSR application | React and Redux for return queues, counts, alerts, event timelines and interactive return-processing workflows. |
|---|---|
| Application services | Node.js / Express services supporting internal CRM workflows and business operations. |
| Scheduled integration | .NET APIs deployed as Windows Services to run Shopify synchronization jobs on schedule. |
| Database | SQL Server for raw Shopify ingestion, normalized production data, RMA sequences, communications, refund records, shipping-weight references, inventory actions and audit history. |
| Shopify integration | Both Shopify REST and GraphQL APIs for return, order, event, status and financial data. |
| Shipping | USPS APIs, backed by an application configured and administered through the USPS Developer Portal, for return-label pricing and generation. |
| Operational monitoring | Fifteen-second CSR desktop refresh against internal data for return counts and new-request alerts. |
Return and exchange requests from three Shopify stores are handled through one production CRM workflow.
The team works from a centralized operational view instead of monitoring three separate Shopify admin environments.
Scheduled ingestion, 15-second count refreshes and alerts reduce the risk of new requests remaining unnoticed.
Approval connects RMA creation, USPS label generation, customer communication and logging.
Condition and sales data help determine whether good merchandise should return to in-house stock or be routed back to a vendor.
Shopify source data, CSR actions, communication, shipping, inspection, refund decisions and inventory disposition remain connected to the return.