Premium Themes

Handcrafted Beautiful Bootstrap HTML Templates for your Business Website.

Free Recirco – Returns & Exchanges for WooCommerce

Every return in your store starts as an email.

Someone reads it, retypes the address into a spreadsheet, and refunds from memory. The stock never goes back on the shelf. And at the end of the season, nobody can tell you which product came back most, or why. Recirco replaces that with a portal your customers use and a queue you actually work.

The Recirco returns queue in WordPress admin, showing eight requests with status badges

The free plugin is free forever. No account, no phone home, no nag screens.

The problem

Returns don't fail loudly. They leak.

A broken checkout you find out about in an hour. A broken returns process you find out about in your stock count, six weeks later, when a customer buys something you don't have.

The stock that never came back

The parcel arrived, the refund went out, and the item is still sitting in a crate behind the desk. Your catalogue says one in stock. There are none — or there are two, and neither is listed. Every manual return is a chance for inventory and reality to drift apart.

The refund that went out twice

Someone refunds in the payment gateway because it's quicker, then a colleague marks the order refunded in WooCommerce, then the return gets completed and a third refund is attempted. Two of those are recoverable. The one that actually left the account is not.

The window nobody enforces

You publish a 30-day policy. Day 44 arrives with an unhappy email, and arguing costs more than the refund does, so you take it. Do that often enough and the policy is decorative — you're running whatever window each customer decides to argue for.

The reason nobody counted

Half your returns say "didn't fit". You know that anecdotally. You cannot put a number on it, cannot say which supplier it clusters around, and so you buy the same product again next season and it comes back again.

A return touches four systems, and no single one owns it

The order sits in WooCommerce. The money sits at the gateway. The stock sits in your warehouse. The conversation sits in an inbox. Nothing joins them up, so the failure mode isn't an error message — it's a small, quiet disagreement between four records that each look fine on their own.

The free plugin

The whole returns workflow, with nothing held back

Free isn't a demo with the useful parts removed. It runs a real store's returns end to end: the customer requests, you approve, stock goes back, money goes out, everybody gets emailed. If you never buy Pro, this still does the job.

01
A portal, not a mailbox

A Returns tab appears in My Account. The customer picks the order, the items, the quantities and a reason, and submits. No email chain, no form plugin, no back-and-forth about what they actually want.

02
Only what's genuinely returnable

Eligibility is decided per unit, not per order. Items outside the window, already refunded, or on your excluded list simply aren't offered — so the request that lands in your queue is one you can actually accept.

03
A queue with a pending badge

Search, filters and live status counts, with bulk approve, reject and mark received. The count of things waiting on you sits on the admin menu, so a return can't sit unseen for a week.

04
Statuses that can't jump

Seven statuses and a guarded state machine. A rejected return cannot quietly become a refunded one, because the illegal transition is refused rather than merely discouraged.

05
Restocking on your schedule

Put stock back never, on approval, on arrival, or on completion. Most stores want "on arrival" — the goods are in your hands and countable. It's one setting, and it applies to every return from then on.

06
Refunds from the return itself

Create a real WooCommerce refund without leaving the return screen, optionally pushed to the payment gateway. Net and tax are split from the original order line, so your tax report still balances afterwards.

07
Notes the customer can see

Write a note when you change a status and tick whether it reaches the customer. It appears on their return page and travels in the status email. Untick it and it stays internal, on the activity log.

08
Six real Woo emails

Request received, admin alert, approved, rejected, completed, customer note — all editable under WooCommerce → Settings → Emails, in HTML and plain text, like every core Woo email.

Return-window rules that actually hold

Set the window in days and measure it from the order's completed, paid or created date — they are not the same date, and which one you pick changes who qualifies. Exclude individual products or whole categories for hygiene items, clearance and perishables. Custom reasons, each of which can demand a written explanation before the form will submit.

📢 EU merchants: the statutory minimum is 14 days. Recirco won't stop you setting less; it will just be your policy, not the law's.

One return, one screen.

A single return in WordPress admin with items, activity log, status form and refund actions
The items and why they came back, the full activity log, the status form with its notify tick box, and the refund and restock actions — without opening the order in another tab.

What the customer fills in.

The customer return request form with items, quantities and reasons
Ineligible lines are greyed out with the reason, and picking “Too small” opens the detail box that reason demands.

Once you approve.

An approved return in the customer portal showing the return address and tracking field
The return address, the RMA to write on the parcel, the label if one exists, and a box for their tracking number.

The Returns tab.

The customer Returns tab in My Account listing three past requests
Every request the customer has raised with its live status — which is the page that stops them emailing to ask.

Five decisions, one screen.

The Recirco returns settings screen showing the return window and restock options
Window length, the date it runs from, which order statuses qualify, when stock goes back, and whether refunds are automatic.
7Return statuses
6Transactional emails
3Custom tables, not posts
55Documented hooks
0Outbound calls
Recirco Pro

Free settles the return. Pro keeps the money.

There is a point where returns stop being an inbox problem and start being a margin problem. Every Pro feature does one of three things: keeps revenue in the store, removes labour from your day, or tells you what to stop buying.

01

Exchanges and variant swaps

The customer picks the size or colour they actually wanted. On completion a zero-total replacement order drops into Processing and gets picked through your normal flow. The sale stays a sale.

02

Store credit, with a bonus

Offer more in credit than in cash — £55 of credit instead of a £50 refund — and most customers take it. Spendable at checkout, so the money never leaves.

03

Conditional approval rules

Seven conditions, four actions, first match wins. Cheap unopened items approve themselves at 2am; anything expensive or suspicious waits for a human.

04

Carrier return labels

Generate a real return label on approval and attach it to the email. The customer stops asking how to send it back, and you stop pasting tracking numbers into replies.

05

Returns analytics

Volume over time, value returned, average days to resolve, reasons ranked by value, and the most-returned products. This is the report that changes next season's buying.

06

Warranty and photos

Register serial numbers, run cover from purchase date rather than registration, and let customers attach up to five photos to a claim. A damage dispute resolves in one exchange instead of five.

In detail

What each of those actually does

Pro adds no core files and patches nothing. It boots on the free plugin's own hooks and builds on the same documented API any third party gets.

Let customers exchange products or switch variants.

A refund is a lost sale recorded politely. An exchange is the same logistics with the revenue still in the store, and for apparel — where "wrong size" is most of the return volume — it's the resolution the customer wanted in the first place.

The customer selects the replacement variant when they raise the request, so you're not guessing. On completion Recirco creates a zero-total order in Processing, which your warehouse picks, packs and ships through exactly the flow it already knows.

  • Variant picker in the return form, limited to in-stock options
  • Zero-total replacement order created on completion, in Processing
  • Linked both ways — the return references the replacement, the replacement references the return
  • Normal fulfilment — no separate screen for your packers to learn

Turn returns into store credit that brings customers back to your store.

Credit is held as an append-only ledger. The balance is always derived from the entries, never stored as a number that can drift — so an adjustment made at 3pm and a purchase made at 3.01pm can never disagree about what's left.

At checkout, credit is applied as a negative fee. That matters more than it sounds: coupons get blocked by rules, restricted by product, and fought over by other plugins. Every gateway honours a negative fee.

  • Append-only ledger — balance derived, never stored
  • Bonus percentage — offer more in credit than in cash
  • Optional expiry on issued credit
  • Customer-facing balance and history page in My Account
  • Applied as a negative fee at checkout, not a coupon

Automate return approvals with rules that keep your team moving faster.

Free gives you one switch: approve everything automatically, or approve nothing automatically. Most stores can't use either, because the right answer depends on what came back and who sent it.

Pro replaces the switch with rules. Seven conditions — reason, order value, days since order, product category, customer return history, requested resolution and current status — and four actions: approve, reject with a stated reason, flag for review, or hold. First match wins, and every decision is written to the activity log with the rule that made it.

  • Seven conditions, combined per rule
  • Four actions — approve, reject with reason, flag, hold
  • First match wins, with an explicit order you control
  • Logged — the activity log names the rule that decided
  • Serial-returner detection via customer return history
The Pro approval rules screen with three conditional rules
Rules, in the order they run. The first rule whose conditions all match decides; anything matching nothing stays pending for a human. Every automatic decision names its rule in the activity log.

Create return labels automatically the moment a return gets approved.

Free will display a label if one exists, but it can't put one there. Pro generates it. Shippo is implemented today, with the cheapest rate selected by default, and the provider interface means another carrier can be added without touching the return workflow itself.

You can also attach a label by hand — some merchants have a negotiated account and a PDF they'd rather use, and that path stays open.

  • Shippo integration, cheapest rate by default
  • Generate on approval, attached to the approval email
  • Manual upload for negotiated carrier accounts
  • Provider interface for adding carriers cleanly

See return patterns and use real data to make smarter buying decisions.

Return data is only worth collecting if it eventually reaches a purchase order. The reports are built around that: which products come back, for which stated reasons, and what that costs you — ranked by value, not just by count, because ten cheap returns and one expensive one are not the same problem.

The daily series is gap-free, so a quiet day shows as a zero rather than vanishing and flattering the trend line.

  • Requests over time — gap-free daily series
  • Value returned and average days to resolve
  • Reasons ranked by lines and by value
  • Most-returned products
  • Four date ranges — 7, 30, 90 or 365 days
The Pro returns analytics dashboard with a daily chart, reasons and most-returned products
The report that changes a purchase order. Reasons and products ranked by value as well as by count, because ten cheap returns and one expensive one are not the same problem.

Keep customers covered with warranty workflows beyond the return period.

A 30-day return window and a two-year warranty are different promises, and most returns plugins only model the first. Recirco Pro tracks warranty length per product and lets customers register a serial number, so an in-warranty claim can be raised long after the return window has closed.

Cover runs from the purchase date, not the registration date — otherwise a customer who registers late is quietly rewarded for it. Quantity limits still apply: a unit that has already been refunded stays gone.

  • Warranty length per product
  • Serial-number registration from My Account
  • Cover from purchase, not from registration
  • Photo uploads — up to 5 images, 5 MB each, validated by file contents
Deliberately limited

What Recirco will never do

This plugin moves money and stock. A few things are worth ruling out explicitly, because they're the ones that would cost you if they went wrong.

💵 It never refunds twice

A return records the refund it created. Ask for a second one — by hand, or by completing a return that was already refunded — and it is refused with a message, not attempted and quietly failed into a log.

🔒 It never invents a status

Every transition passes one guarded gate. There is no code path that moves a return sideways, no bulk action that skips the check, and no filter that can loosen it without you writing that filter yourself.

🔐 The plugin contacts nobody

No licence check, no telemetry, no version ping. Pro talks to exactly two kinds of place: the licence server you point it at, and the carrier account you connect. Nothing else, ever.

When it is over, the customer can see that it is over.

The amount refunded, the date it went out, your note, and an item table that says “Refunded” rather than “Expected refund” once money has actually moved.

Your return data stays in your database

Returns live in three custom tables rather than as posts, which is what keeps the queue fast and lets analytics group by reason and product. Uninstalling does not delete that data unless you deliberately tick the option under Advanced — because "I removed the plugin to test something" should not be an irreversible act.

A completed return in the customer portal showing the refunded amount and date
How it works

Taking returns properly by this afternoon

There is no onboarding wizard, no account to create and no data to import. The parts that need a decision from you are the window and the restock timing.

01

Install and activate

From Plugins → Add New, or upload the zip. WooCommerce needs to be active first. If the Returns page in My Account 404s, visit Settings → Permalinks once to flush your rewrite rules — that's a WordPress quirk, not a Recirco one.

02

Set your window and your reasons

WooCommerce → Returns. Choose the window in days and the date it runs from, pick which order statuses are eligible, and exclude the products and categories that can't come back. Six return reasons are seeded; edit them to match how your customers actually talk.

03

Work the queue

Requests arrive with a pending badge on the menu. Open one, read the reason and the customer's note, approve or reject with a note that reaches them, and mark it received when the parcel lands. Stock goes back at the point you chose.

04

Add Pro when returns become a margin problem

Install the add-on, paste your licence key, and the extra tabs appear. Nothing about your existing returns changes — the free plugin keeps running the workflow, and Pro builds on top of it.

Free vs Pro

Line by line, from what's in the code

Not a roadmap. Everything ticked below is implemented and shipping in the version you can download today.

Capability Free Pro
Customer portal
Returns tab in My Account
Self-service request formPick the order, the items, the quantities and a reason
Item-level eligibilityHides units outside the window, already refunded, or excluded
Reason-triggered detail field“Arrived damaged” demands an explanation; “changed my mind” doesn’t
Status tracking page per return
Customer cancels their own request
Customer submits a tracking number
Photo uploads with the requestUp to 5 images, 5 MB each, validated by file contents
Store credit balance & history page
Warranty registration page
What the customer gets back
Refund to the original payment method
Exchange & variant swapThe customer picks the size or colour they wanted
Store creditAppend-only ledger; balance always derived, never stored
Credit bonus percentageOffer more in credit than in cash to retain the revenue
Credit spendable at checkoutApplied as a negative fee, which every gateway honours
Admin queue
Approval queue with search & filtersStatus links with live counts
Bulk actionsApprove, reject, mark received, delete
Pending count badge on the menu
Return detail screen & activity log
Internal notes and customer-emailed notes
Returns panel on the order edit screen
Stats strip above the queue
Workflow & automation
Guarded status state machineIllegal transitions are refused, not just discouraged 7 statuses 7 statuses
Automatic approvalFree is a single on/off switch for every request All or nothing
Conditional approval rulesReason, value, days since order, category, customer history, resolution 7 conditions
Rule actionsApprove, reject with a reason, flag, or hold — first match wins 4 actions
Restock timingNever, on approval, on arrival, or on completion
Create a WooCommerce refund from the returnOptionally pushed to the payment gateway
Auto-refund on completion
Replacement order on completionZero-total order in Processing, picked through the normal flow
Return shipping
Return address and RMA on the parcelShown on the status page and in the approval email
Label shown to the customerFree will display a label if one exists, but can’t put one there Display only
Attach a label by hand
Carrier label generationShippo implemented; cheapest rate selected by default
Generate the label on approval
Provider interface for other carriersAdd a carrier without touching the return workflow
Emails
Transactional emailsReceived, admin alert, approved, rejected, completed, note 6 emails 6 emails
Editable under WooCommerce → EmailsSubject, heading and body like any core Woo email
HTML and plain-text versions
Analytics
Requests over timeGap-free daily series, so quiet days stay visible
Value returned and average days to resolve
Why things come backReasons ranked by lines and by value
Most-returned productsThe report that changes what you buy next season
Date ranges7, 30, 90 or 365 days 4 ranges
Warranty
Warranty length per product
Customer registration with serial numberCover runs from purchase, not from registration
In-warranty items outlive the return windowQuantity limits still apply — a refunded unit stays gone
Configuration
Return window in daysMeasured from the completed, paid or created date
Eligible order statuses
Non-returnable products and categoriesHygiene items, clearance, perishables
Custom return reasonsSix seeded; each can demand an explanation
RMA prefix and next number
Custom portal URL slug and policy text
Credit bonus, expiry and warranty defaults
For developers
Documented actions 26 26
Documented filters 29 29
Theme template overridesCopy to yourtheme/recirco/
HPOS compatible
Licence key, update checker, grace period14 days, so a licence-server blip never breaks returns N/A
Pricing

One price. Every Pro feature.

No feature tiers, no per-return fees, no percentage of your refunds. The only thing that changes between plans is how many stores you can run it on.

Recirco free is on WordPress.org and stays free — the portal, the queue, restocking, refunds and all six emails. Pro is an add-on that sits on top of it.

Get the free plugin
40% OFF

Single

$99 $59.40

per year, 1 site

For one shop you care about.

  • Every Pro feature, nothing withheld
  • Exchanges and variant swaps
  • Store credit wallet with bonus %
  • Conditional approval rules
  • Carrier return labels
  • Returns analytics and warranty
  • 1 year of updates and email support
Buy Single
60% OFF

Agency

$399 $159.60

per year, 25 sites

For the agency that maintains other people’s stores.

  • Everything in Growth
  • 25 client sites
  • Priority support queue
  • Use on sites you build for clients
  • 1 year of updates and email support
Buy Agency

Prices in USD. Licences renew yearly and you can cancel any time — 14-day refund policy, no questions asked. If a licence lapses, Pro keeps working on the version you have; you just stop getting updates. The free plugin never stops working either way.

Who buys this

Two kinds of people,
for two different reasons

Store owners past the hobby stage

Somewhere around a few returns a week, reading each one stops being possible and the process quietly becomes "whatever the person on support decided that day". Exchanges and store credit are the two features that pay for the licence outright: keep a handful of £50 refunds in the store as credit or a swap, and Pro has covered a year.

The analytics are the slower, larger win. Knowing which product accounts for a fifth of your returns changes a purchase order, and that's worth more than the plugin costs by an order of magnitude.

Agencies and freelancers on retainer

A returns process running on email is a support ticket generator, and the tickets land on you. Putting a real portal in front of it removes a recurring category of "can you just…" from your week.

It's also a billable line. Setting up return windows, exclusion rules and approval logic for a client is a defined piece of work with a visible outcome, and the Agency licence covers 25 stores at roughly the price of an hour's work.

FAQ

Questions people actually ask

Do I need Pro to get value out of this?

No, and that's deliberate. The free plugin runs a complete returns workflow — portal, queue, eligibility rules, restocking, refunds and six emails. Plenty of stores will never need more than that. Pro is for when you want the money to stay in the store rather than go back out of it.

Will it change or break my existing orders?

Recirco reads orders through the WooCommerce CRUD layer and only writes when you tell it to — creating a refund, or restocking an item. It never edits order line items, never changes order status on its own, and never touches an order that has no return against it.

Does it work with HPOS?

Yes. The plugin declares compatibility with High-Performance Order Storage and with the cart and checkout blocks, and reads orders through the CRUD layer rather than post meta. It works on stores running either storage mode.

Where is my return data stored?

In three custom database tables in your own database — not as custom post types. That keeps the admin queue fast on a store with thousands of returns, and lets analytics group by reason and product without expensive meta queries.

Nothing is sent anywhere. The free plugin makes no outbound calls at all.

Can guests request returns?

Not in this version. A request is tied to a customer account so the portal can authenticate the person raising it. If you sell heavily to guests, a guest lookup by order number and email is the obvious next step — say so and it moves up the list.

Can I change the wording or the layout?

Yes. Copy any file from the plugin's templates/ folder into yourtheme/recirco/ and edit it there. Your version wins, and it survives plugin updates. Everything customer-facing is a template.

Does approving a return refund the customer automatically?

Only if you choose that. By default you create the refund yourself from the return screen, which is what most merchants want while they're still checking the goods. If you turn on auto-refund, it fires on completion — and if a refund already exists on that return, the second one is refused rather than attempted.

What happens to the tax on a refund?

Net and tax are split from the original order line and sent to WooCommerce separately, in proportion to the quantity being returned. That matters: a refund posted as a single tax-inclusive figure overstates the goods value and leaves your tax report wrong at the end of the quarter.

What happens when my licence expires?

Pro keeps running on the version you already have. You stop receiving updates and support until you renew. There is no kill switch, no feature lockout, and no nag banner across your admin.

If the licence server is unreachable — an outage on our side, a firewall on yours — Pro carries on for a 14-day grace period rather than failing instantly, because a network blip should never stop you processing returns.

Can I move a licence to a different site?

Yes. Deactivate it on the old site from the Licence tab and activate it on the new one. Growth and Agency licences can be transferred without asking anyone. If you've lost access to the old site, email support and it will be released for you.

Which carriers do the return labels support?

Shippo is implemented today, with the cheapest available rate selected by default. Labels are generated on approval and attached to the approval email. Carriers sit behind a provider interface, so adding another one doesn't disturb the return workflow — and you can always upload a label by hand if you have a negotiated account.

Is it safe on a large store?

The queue is a proper indexed table query with pagination, not a meta query across posts. Eligibility is calculated per order at request time rather than precomputed across your catalogue. Restocking and refunds happen one return at a time, on your action.

Can I extend it, or hook into it?

Yes — 26 documented actions and 29 documented filters, plus template overrides. Pro itself is built entirely on that API and adds no core files, which is the honest proof that the hooks are sufficient for real work.

Does it work on WordPress Multisite?

Yes, activated per site. Each site keeps its own returns, settings and reason list. A licence activation counts per site, so a five-site network on a Growth licence uses the five activations.

Support

A real person answers

This plugin moves money and stock, so a support ticket about it is never routine. Questions get read by someone who knows the codebase.

📬 Email support

Every Pro licence includes direct email support. We aim to answer within one business day, and Agency licences go to the front of the queue.

📝 Documentation

Setup guides, a hook reference, template override instructions and the carrier setup walkthrough. A Help section ships inside the plugin, so the answer is usually one tab away.

🤝 Free plugin support

The WordPress.org support forum, answered at the same speed. Being a free user doesn't put you at the back of a queue — bug reports from free users are how the paid version stays solid.

Stop running returns out of an inbox

Install the free plugin, set a window, and let the next return come in through the portal instead of your email. You'll know within a week whether you need the rest.

Get upto 60% Off — Limited Time

Don’t Miss Out — Choose Your Plan Before Time Runs Out

10 Hours
:
00 Minutes
:
00 Seconds
Get Pro