Total Returns
—
All time
New
—
Awaiting action
In Progress
—
Review → Received
Resolved
—
Completed
Rejected
—
Declined
Recent Activity
| Ref | Order | Customer | Type | Status | Submitted |
|---|
By Type
By Reason
Status Breakdown
This Month vs Last
Key Metrics
Total Returns
—
Resolution Rate
—
Avg Days to Resolve
—
Refunds / Exchanges
—
Top Return Reasons
Return Types
Status Distribution
Returns by Month
Resolved Returns — Full History
| Ref | Order | Customer | Type | Reason | Submitted | Resolved | Days |
|---|
Total
—
All time
Pending
—
Need action
In Progress
—
Being handled
Shipped
—
In transit
Completed
—
Last 30 days
Replacement Requests
| Customer | Order | SKU | Issue | Resolution | Status | Logged |
|---|
Returns Centre Playbook
How returns and replacements work end-to-end
When a customer requests a return
1. Customer goes to returns.rachelbloom.com
2. Selects bag (cascading dropdowns: style, colour, GPS) or accessory
3. Picks reason and adds detail
4. Submits the request
5. A row lands in this dashboard's All Returns → New view within seconds
6. Customer gets a confirmation email with their reference number (RET-XXXX)
7. saul@ and rachel@ get notified by email
2. Selects bag (cascading dropdowns: style, colour, GPS) or accessory
3. Picks reason and adds detail
4. Submits the request
5. A row lands in this dashboard's All Returns → New view within seconds
6. Customer gets a confirmation email with their reference number (RET-XXXX)
7. saul@ and rachel@ get notified by email
The return workflow stages
New → just submitted, needs first review
Under Review → you are investigating, asking for photos, etc.
Approved → return is approved, customer to ship item back at their cost
Label Sent → label was issued (rare; we usually require the customer to ship at their own cost)
Item Received → physical item is back at warehouse
Resolved → refund / replacement / store credit issued, case closed
Rejected → return declined (out of policy, damage from misuse, etc.)
Under Review → you are investigating, asking for photos, etc.
Approved → return is approved, customer to ship item back at their cost
Label Sent → label was issued (rare; we usually require the customer to ship at their own cost)
Item Received → physical item is back at warehouse
Resolved → refund / replacement / store credit issued, case closed
Rejected → return declined (out of policy, damage from misuse, etc.)
Replacements vs Returns
These are two different things on this dashboard.
Returns are customer-initiated requests to send something BACK to us (refund, exchange, store credit). They live in the All Returns / New / Under Review / Approved / Label Sent / Received / Resolved / Rejected queues.
Replacements are records of replacement items we are sending OUT to customers — usually for damaged-on-arrival, defective, or wrong-item situations. They live in the Replacements tab. Replacements can be created from a CS ticket (cs.rachelbloom.com), manually via "+ New Replacement" here, or auto-created from an unmatched Shopify fulfillment.
Returns are customer-initiated requests to send something BACK to us (refund, exchange, store credit). They live in the All Returns / New / Under Review / Approved / Label Sent / Received / Resolved / Rejected queues.
Replacements are records of replacement items we are sending OUT to customers — usually for damaged-on-arrival, defective, or wrong-item situations. They live in the Replacements tab. Replacements can be created from a CS ticket (cs.rachelbloom.com), manually via "+ New Replacement" here, or auto-created from an unmatched Shopify fulfillment.
Shopify integration (auto-tracking sync)
When you ship a replacement from Shopify, tracking flows back into this dashboard automatically. You don't need to copy-paste tracking numbers anywhere.
Workflow:
1. Log the replacement in this dashboard FIRST (or via a CS ticket)
2. Open the Shopify order, click Edit order
3. Add a custom item (e.g. "Replace Belt Bag in Tan", $0.00)
4. Save the order edit
5. Buy a shipping label and fulfill the new line
6. Within 30 seconds, this dashboard auto-updates: status moves to "shipped", tracking number appears, internal note logs the Shopify fulfillment ID
If you fulfilled BEFORE logging the replacement here:
A red banner appears at the top of the Replacements tab saying "X Shopify fulfillments need linking". Click "Review now", then either link to an existing replacement or create a new one (everything pre-fills from the Shopify data). saul@ and rachel@ also get an email.
When a Shopify refund is processed:
Any open replacement matching that order is automatically marked resolved with the refund amount logged.
Workflow:
1. Log the replacement in this dashboard FIRST (or via a CS ticket)
2. Open the Shopify order, click Edit order
3. Add a custom item (e.g. "Replace Belt Bag in Tan", $0.00)
4. Save the order edit
5. Buy a shipping label and fulfill the new line
6. Within 30 seconds, this dashboard auto-updates: status moves to "shipped", tracking number appears, internal note logs the Shopify fulfillment ID
If you fulfilled BEFORE logging the replacement here:
A red banner appears at the top of the Replacements tab saying "X Shopify fulfillments need linking". Click "Review now", then either link to an existing replacement or create a new one (everything pre-fills from the Shopify data). saul@ and rachel@ also get an email.
When a Shopify refund is processed:
Any open replacement matching that order is automatically marked resolved with the refund amount logged.
Email templates and auto-status
When you open a return drawer, you can send templated emails (Acknowledge, Approve, Send Label, Item Received, Refund Issued, Decline, Custom). Sending a templated email auto-moves the return to the matching status — for example, sending the "Approve return" template moves status to Approved and logs an internal note explaining the auto-move.
The Reject button still exists for situations where you want to reject WITHOUT sending an email (rare).
The Reject button still exists for situations where you want to reject WITHOUT sending an email (rare).
Where everything lives
returns.rachelbloom.com — customer-facing return portal
admin.returns.rachelbloom.com — this dashboard
cs.rachelbloom.com — CS dashboard, also shows replacements
ops.rachelbloom.com — Operations dashboard, includes Returns Insights merged view
All four read from the same Supabase tables — when one updates, all auto-refresh within 30 seconds.
admin.returns.rachelbloom.com — this dashboard
cs.rachelbloom.com — CS dashboard, also shows replacements
ops.rachelbloom.com — Operations dashboard, includes Returns Insights merged view
All four read from the same Supabase tables — when one updates, all auto-refresh within 30 seconds.
Hard rules
- Customer pays return shipping unless the issue is our fault (defect, wrong item, damage in transit)
- 30-day return window from delivery date — anything outside is rejected unless escalated
- Bags showing wear, damage from misuse, or missing original packaging are NOT eligible — reject with photos as evidence
- Refunds processed within 5-7 business days of receiving the item back
- Replacements ship the moment they are approved, before the original item is back
- Never edit a customer's email address on a return record once submitted — create a new return if needed
- Never delete a return — reject it instead, so the audit trail is preserved
- 30-day return window from delivery date — anything outside is rejected unless escalated
- Bags showing wear, damage from misuse, or missing original packaging are NOT eligible — reject with photos as evidence
- Refunds processed within 5-7 business days of receiving the item back
- Replacements ship the moment they are approved, before the original item is back
- Never edit a customer's email address on a return record once submitted — create a new return if needed
- Never delete a return — reject it instead, so the audit trail is preserved
If something breaks
Returns not appearing: check returns.rachelbloom.com is up, then check Supabase RLS on the
Tracking not auto-syncing: check the Shopify webhooks at admin.shopify.com → Settings → Notifications → Webhooks. Both "Fulfillment creation" and "Refund create" should point to
Pending fulfillment links banner stuck: the queue is real — review and link/dismiss each one.
Email not sending: Resend status at status.resend.com. Edge function:
returns table.Tracking not auto-syncing: check the Shopify webhooks at admin.shopify.com → Settings → Notifications → Webhooks. Both "Fulfillment creation" and "Refund create" should point to
shopify-replacement-sync. Check edge function logs in Supabase.Pending fulfillment links banner stuck: the queue is real — review and link/dismiss each one.
Email not sending: Resend status at status.resend.com. Edge function:
send-return-email-rb.