Get in touch
  • WordPress
  • Shipping
  • v1.0.0

Marketplace Returns Control for WooCommerce — returns and unclaimed parcels under control

A WooCommerce module that checks the waybills of your orders against Nova Poshta, Ukrposhta and Meest and shows the parcels that need a person: a return "arrived" but the goods are not on the shelf; storage at the branch is ending; a parcel is stuck; the order status contradicts the parcel; money was refunded before the goods came back. Pro also reconciles Rozetka, Prom and Epicentr orders, checks every hour and sends a digest by e-mail and to Telegram.

Download Free
Pro · one-year licence The more sites, the less each one costs
Compatibility
WordPress 6.2+ · WooCommerce 7.0+ (tested on WordPress 7.1 and WooCommerce 11.1) · PHP 7.4+ (run on PHP 8.3) · HPOS and the classic order storage
Licence
one site, annual
Trial
7 days, no card, one per site
Updated
September 2026
Or all 144 Pro modules with All Access — 4 990 ₴ / year

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
Waybills from orders automatically: our Nova Poshta, Ukrposhta and Meest modules, any other order meta key, or typed by hand ✔ ✔
Nova Poshta and Ukrposhta tracking (up to 100 waybills per request) and Meest with the "Check now" button ✔ ✔
The Nova Poshta return waybill is found automatically and tracked separately ✔ ✔
"Returned by the carrier, not received by you" — a return is closed only by your confirmation ✔ ✔
"Storage at the branch is ending" — with the date the parcel goes back ✔ ✔
"Stuck" — no new carrier status for N days ✔ ✔
"Order status contradicts the parcel" and "Money refunded before the goods came back" ✔ ✔
Tabs "Needs attention", "Returns", "In transit", "Done", filters and search by waybill or order number ✔ ✔
"Return received" with a comment, "Mark resolved", history of every parcel ✔ ✔
"Returns control" box on the order screen (HPOS and the classic storage) ✔ ✔
Adding a waybill by hand for parcels outside WooCommerce ✔ ✔
Carrier keys from our shipping modules; a wrong Nova Poshta key does not stop tracking ✔ ✔
Admin in English, Ukrainian and Russian ✔ ✔
Rozetka, Prom.ua, Epicentr: the marketplace status is reconciled with the carrier and the order — ✔
"Marketplace closed it as received, the carrier did not deliver" and "Marketplace and carrier disagree" — ✔
Automatic check every hour — ✔
Morning e-mail digest — ✔
Telegram: urgent cases at once, digest in the morning — ✔
Order status changes by itself after a confirmed return or a refusal — ✔
CSV export of the list — ✔

What it looks like

Parcel list of Marketplace Returns Control in WooCommerce, the "Needs attention" tab
“Needs attention” tab (admin in Ukrainian): money refunded before the goods came back; a stuck parcel; Rozetka closed the order as received while the parcel sits at the branch. Every row has the carrier status with its code, the date, the verdict and the actions: “Return received”, “Mark resolved”, history.
The "Returns control" box on the WooCommerce order screen with the return waybill and history
The box on the order screen: the recipient refused, Nova Poshta issued the return waybill itself, and it is already “Received by you” — the module asks you to check the goods and press “Return received”. Below — the parcel history and a field for the waybill if no shipping module wrote it.
Carrier settings: Nova Poshta, Ukrposhta and Meest keys taken from the shipping modules
Carriers: keys and tokens were picked up from our Nova Poshta, Ukrposhta and Meest modules (“taken from the module …”), so nothing had to be filled in. “Save and test” checks the connection with each carrier.

Key points

What the customer sees

Customers do not see the module: nothing changes on the storefront or at checkout, and there are no extra requests or scripts on the shop pages.

What the admin gets

WooCommerce → “Returns control”: the parcel list with the number of problems on the menu item, and “Returns control settings”.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.

Technical requirements

  • WordPress 6.2+, WooCommerce 7.0+ (tested on WordPress 7.1 and WooCommerce 11.1), PHP 7.4+ (run on PHP 8.3).
  • HPOS and the classic order storage — both tested.
  • Outgoing HTTPS requests from the server to the carrier APIs (and to the marketplace cabinets in Pro).
  • WP-Cron or a system cron — for the hourly check in Pro.
  • For Nova Poshta return waybills — the sender’s key or the recipient’s phone in the order; without them the module tracks the main waybill.

Version history

v1.0.0 Current September 2026

First public release: waybills from orders (Nova Poshta, Ukrposhta, Meest, own meta key, by hand), tracking of three carriers, Nova Poshta return waybills, verdicts (return without…

Frequently bought with Marketplace Returns Control for WooCommerce

4 modules in one order — 40% cheaper than separately

“Store starter” bundle Marketplace Returns Control Nova Poshta Premium LiqPay Telegram notifications and Viber/SMS for customers Need more — all 144 modules in All Access for 4 990 ₴.
3 590 ₴ / year instead of 5 960 UAH bought separately
Buy the bundle →

Full module description

Marketplace Returns Control for WooCommerce is a module for shops that ship with Nova Poshta, Ukrposhta or Meest and sell on Rozetka, Prom or Epicentr. A parcel the customer never picked up costs twice: delivery both ways plus goods that are “somewhere on the road”. Worse, a carrier or a marketplace sometimes closes such a parcel as “delivered” or “returned” while it still sits at a branch. A week later nobody remembers that it had to be collected.

The module checks every waybill of your orders against the carrier (with the “Check now” button, in Pro also every hour) and shows only the parcels that need a person. A return is closed not by the carrier status but by your “Return received” — when the goods are really back on the shelf. Waybills and keys come from our Nova Poshta, Ukrposhta and Meest modules, so after installation there is usually nothing to fill in.

What the customer sees

Customers do not see the module: nothing changes on the storefront or at checkout, and there are no extra requests or scripts on the shop pages. It works in the admin. Customers notice only the effects: you call them while the parcel is still at the branch, not after it has gone back; the money for a return is refunded when the goods have really arrived; the order status matches what happened to the parcel.

What the admin gets

WooCommerce → “Returns control”: the parcel list with the number of problems on the menu item, and “Returns control settings”.

  • One verdict per parcel. Every waybill gets exactly one verdict, and the list is split into tabs: “Needs attention”, “Returns”, “In transit”, “Done”, “All”. Next to it — the carrier status with its code, the date of the change, the storage end date, the linked order and marketplace.
  • Actions. “Return received” with a comment, “Mark resolved” (the parcel leaves “Needs attention” and comes back if its state changes again), delete, history.
  • Filters and search. By source (WooCommerce, Rozetka, Prom, Epicentr), carrier, waybill, return waybill or order number.
  • Adding by hand. The waybill of a parcel that is not among your WooCommerce orders, for example a marketplace order shipped by hand.

The box on the order screen shows the parcels of this order, the verdict, the “Return received” / “Cancel confirmation” / “Mark resolved” buttons and the history: who confirmed what and when. If no shipping module wrote the waybill, you can type it here and save it with the order.

  • What to track. Which order meta keys hold waybills (our Nova Poshta, Ukrposhta, Meest, Marketplace Waybills modules or your own key), how many days back to take orders, which statuses to skip, after how many days without movement a parcel is “stuck”, how many days before the end of storage to warn.
  • Carriers. Keys come from our shipping modules. The fields here are needed only if those modules are not installed or you want another key. Every carrier has “Save and test”.
  • Order notes. A private note when a problem is found or a return is confirmed (can be turned off).

Pro: marketplaces, automation, Telegram

  • Rozetka, Prom.ua, Epicentr. Cabinet orders with a waybill are reconciled with the carrier and with your order. The module catches three situations: the marketplace closed the order as received while the carrier did not deliver it; the marketplace and the carrier disagree; the money was refunded to the customer before the goods came back. Credentials from our Marketplace Waybills, Epicentr Price & Stock Sync and Prom Model Guard modules are picked up automatically.
  • The link to the WooCommerce order comes from Marketplace Waybills. Marketplace orders without a WooCommerce order get into the list too.
  • Hourly check of carriers and marketplaces, no button needed.
  • Morning e-mail digest: the parcels that need attention.
  • Telegram: urgent cases (the marketplace closed it as received, the marketplace and the carrier disagree, money refunded before the goods, “returned” without your confirmation, a lost parcel) at once, the digest in the morning.
  • Order status changes by itself: after a confirmed return (for example “Refunded”) and after a refusal (for example “On hold”), with a note in the order.
  • CSV of the list with the current filters, for Excel and accounting.

How it works — step by step

  1. As soon as an order is saved with a waybill written by a shipping module or by you, the module creates a parcel. Orders in statuses you skip (for example “Pending payment”) are not taken.
  2. “Check now” (in Pro also every hour) asks the carriers: Nova Poshta and Ukrposhta in batches of up to 100 waybills, Meest one by one. Parcels never checked go first, then the stalest ones.
  3. Every carrier’s answer is reduced to one state: in transit, at the branch, delivered, refused, coming back, returned to the sender, lost. For Nova Poshta the module takes the return waybill (except a redirect) and the storage end date.
  4. In Pro the module reads Rozetka, Prom and Epicentr orders that have a waybill and adds the marketplace state and the refund to the parcel.
  5. All of this plus your order status gives one verdict, from the most important to the ordinary: marketplace closed as received, disagreement, money before goods, “returned” without confirmation, lost, order status contradicts, storage ending, stuck.
  6. Every change goes into the parcel history, in Pro also into Telegram or the morning digest. A return is closed only by your “Return received”.

Under the hood

  • Own tables wp_ccmrc_parcels (one waybill — one row; the order and marketplace data are merged into it) and wp_ccmrc_events (history). Every query goes through $wpdb->prepare().
  • Carrier APIs: Nova Poshta TrackingDocument.getStatusDocuments, Ukrposhta Status Tracking, Meest openAPI tracking. In Pro — Rozetka Seller API, Prom.ua API, Epicentr Marketplace API.
  • Keys and tokens are encrypted with AES-256 plus HMAC and never printed into HTML. Keys of our modules are read through their classes, nothing is copied.
  • Security: every action checks a nonce and the manage_woocommerce capability. Anonymous requests to the handlers are rejected.
  • Removal: uninstalling removes the tables, settings, transients, cron events and the module’s own order meta. Waybills written by shipping modules stay.

How to install

  1. Download the free version catcode-marketplace-returns-control-for-woocommerce-1.0.0.zip with the button at the top of the page (or the Pro archive from your account after payment) and install it: Plugins → Add New → Upload Plugin. WooCommerce must be active.
  2. WooCommerce → “Returns control settings”: check which order fields hold waybills. Keys from our shipping modules are picked up automatically — you will see “taken from the module …”.
  3. WooCommerce → “Returns control” → “Check now”. Parcels appear in the tabs by verdict.
  4. When a return has physically arrived, press “Return received” in the list or on the order screen.
  5. For Pro: paste the licence key from the e-mail after payment or press “Try Pro for 7 days” in the “Pro licence” section, then turn on the marketplaces and automation.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Do I need a Nova Poshta API key?

No. Nova Poshta tracking works without a key. With the sender's key (or with the phone in the order) Nova Poshta also reports the return waybill and the date storage ends. If the key is wrong or expired, the module repeats the request without it and shows a warning in the parcel list saying where to fix the key.

Why confirm a return by hand?

Because the carrier status is exactly what goes wrong: a return marked "delivered to the sender" while the parcel is still at the branch. Such a parcel stays in "Needs attention" until you press "Return received" — that is, until the goods are really back on the shelf.

Another plugin writes the waybill into the order.

Enter its meta key in the settings ("Another order meta key") and choose the carrier, or "detect by the number". You can also type the waybill in the "Returns control" box of the order.

Which marketplaces does Pro support?

Rozetka, Prom.ua and Epicentr. The module reads cabinet orders that have a waybill and compares the marketplace status with the carrier. The link to the WooCommerce order comes from our Marketplace Waybills module; marketplace orders without a WooCommerce order are tracked too. Logins and tokens already entered in our modules are picked up automatically.

Was it tested on live cabinets?

Nova Poshta — live, on its API. Ukrposhta, Meest, Rozetka, Prom and Epicentr — by their official documentation on test answers: these services have no public sandbox. So try the module on your own parcels in the 7-day Pro trial, and if some status is read the wrong way, tell us and we will fix it.

Where does the data go?

Parcels, statuses and history are stored in your site's database. Waybill numbers go only to the carriers (and, in Pro, requests go to the marketplace cabinets you connected). The digest and Telegram go only to the addresses you entered.

Does the module change orders by itself?

In Free — no, it only adds private notes when a problem is found or a return is confirmed (can be turned off). In Pro you can choose the order status after a confirmed return and after a refusal; the default is "do not change".

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module