The Dirty Truth About How Cosmetics Recalls Go Wrong
Here's what actually happens at a brand running on spreadsheets + disconnected systems when a recall hits:
Your quality manager looks at a WhatsApp message from a distributor. She then opens a Google Sheet, filters by date range *(wrong column)*, cross-references a PDF invoice from three months ago, and tries to find which warehouse has Lot #B-2241 still sitting in stock.
Meanwhile, 1,400 units are somewhere between a 3PL in Manchester, a retail shelf in Riyadh, and a customer's bathroom cabinet in Toronto.
The Real Cost of Manual Recall Processes
37 Hours
Average time per recall event on manual data reconstruction — nearly a full work week burned on something Odoo resolves in under 4 minutes
$140K–$380K
Average EU cosmetics recall cost — legal fees, logistics, lost shelf space, and PR damage combined per event
7 of 30
Cosmetics implementations where brands thought their "manual tracking system" was good enough — it never is
EU Cosmetics Regulation 1223/2009 mandates that every batch number must be traceable throughout the entire supply chain — from raw material to end consumer. FDA's MoCRA regulations in the US add lot-level tracking, adverse event response records, and recall capability on top of that.
If you're selling in both markets and running batch management out of QuickBooks or a CSV export from your 3PL:
You are one contamination event away from a regulatory fine that makes your Odoo implementation cost look like pocket change.
Why "We Have a Spreadsheet System" Is the Wrong Answer
We hear this from founders every single time: "We've been doing this for 6 years, and we've never had a recall."
That's not a system. That's luck.
Here's the controversial opinion nobody else will tell you: having a recall plan in a spreadsheet is worse than having no plan. Why? Because it gives your operations team false confidence. When the crisis hits, they'll waste 20 minutes trying to find the "right version" of the file before someone admits they don't know which one is current.
UAE Skincare Brand ($4.2M ARR): 2 Hours 43 Minutes → 6 Minutes 12 Seconds
They had a 47-tab Excel file tracking lots. When we ran a mock recall drill before go-live, it took their team 2 hours and 43 minutes to identify all affected stock locations and sales orders. After Odoo Lot Recall Management went live, the same drill took 6 minutes and 12 seconds.
That's not a product feature. That's the difference between a controlled recall and a public crisis.
If your current inventory management system can't answer "where is every unit of Lot #B-2241 right now?" in under 5 minutes, it's not a system — it's a liability.
How Odoo Lot Recall Management Actually Works for Cosmetics
Let's walk through exactly what happens inside Odoo — no fluff, just the real operational flow.
Step 1 — Enable Lot Tracking at the Product Level
Go to Inventory → Configuration → Settings → Traceability and enable Lots & Serial Numbers. Then navigate to each product and under the Inventory tab, set Tracking to "By Lots." For cosmetics, you assign a unique lot number for every production batch — Lot #LS-2241, for example, might represent 3,000 units of your SPF-50 face cream manufactured on March 14, 2026, with raw material Lot #RM-0819 from supplier IngrediChem GmbH.
Step 2 — Capture Lot Data at Every Movement Point
Every goods receipt, internal transfer, and delivery order in Odoo forces an operator to assign or scan the lot number. There's no "skip this" button. Your warehouse picks up 500 units of Lot #LS-2241 for a shipment to a retailer in Singapore? Odoo records it. A returns team processes 14 units from a UK e-commerce order? Odoo records the original lot number against the return.

This is your full upstream and downstream traceability chain — raw material → production → finished goods → customer. The chain is unbroken.
Step 3 — The Recall Execution Flow (This Is Where It Gets Powerful)
When a quality alert hits, here's what your team does:
The 6-Step Recall Execution in Odoo
1. Navigate to Inventory → Products → Lots/Serial Numbers
2. Search for the affected lot (e.g., Lot #LS-2241)
3. Click the Traceability smart button — Odoo instantly surfaces every stock move ever associated with that lot
4. Export the affected sales orders list directly to contact distributors
5. Block remaining on-hand stock by switching to FEFO removal strategy to isolate the lot from future picks
6. Create a reverse transfer (return operation) to quarantine remaining warehouse stock
You're looking at a complete tree view from raw material to end customer in a single screen. Every warehouse location where stock remains, every sales order that received units from it, every delivery partner it shipped through.
Step 4 — Attach Compliance Documentation
The Product Information File (PIF) required under EU Regulation 1223/2009 must accompany your recall notification. In Odoo, you can attach the Certificate of Analysis, MSDS sheets, and supplier batch records directly to the lot record. Your quality manager doesn't need to email three departments to find paperwork — it's in one place.
The Expiry Date Problem Nobody Talks About
Here's an insider secret that most Odoo consultants won't tell you upfront:
Odoo's lot tracking with expiration dates requires a separate configuration that many implementations skip.
By default, enabling lots doesn't automatically track expiry. You need to go to Inventory → Configuration → Settings and separately enable Expiration Dates. Then for each product, set the product expiry, removal, use, and best-before date intervals. If your Odoo partner didn't configure this during your implementation, you might think you're tracking expiry dates when you're actually not.
$18,400 in Near-Expiry Stock Almost Shipped to Customers
We audited a $2.1M cosmetics brand in the UK who had been live on Odoo for 11 months. They were confident their expiry dates were being tracked. They weren't. Their team had enabled lots but not the expiry module. $18,400 worth of near-expiry stock was sitting in their 3PL that would have shipped to customers if we hadn't caught it during the audit.
FEFO (First Expiry First Out) picking — mandatory for cosmetics compliance — only works if expiry dates are correctly configured at the product level. This is the difference between Odoo working for you and you thinking it's working for you.
Getting FEFO configured correctly is a core part of our Odoo implementation services for cosmetics brands — because we've seen the $18,400 disaster story happen more than once.
What a Fully Configured Recall System Looks Like at Scale
When we build Odoo Lot Recall Management for cosmetics brands doing $3M–$15M ARR, here's the full stack:

| Configuration Layer | What It Does | Recall Impact |
|---|---|---|
| Lot tracking by product | Captures unique batch identity | Identifies which units are affected |
| Expiry date tracking (FEFO) | Prevents near-expiry picks | Stops problem stock from shipping |
| Traceability reports | Full upstream/downstream chain view | Finds stock in 4 minutes vs. 37 hours |
| Quality alerts + Odoo Quality module | Flags non-conforming lots automatically | Triggers recall workflow before a crisis |
| Supplier lot linkage | Maps brand lot to supplier's RM lot | Enables upstream investigation |
| Recall document archive | Stores PIF, CoA, and MSDS per lot | Satisfies EU 1223/2009 audit requirements |
For brands with a Shopify front-end, we connect Odoo's lot data to fulfillment so that if a lot is quarantined in Odoo, Shopify orders for that SKU get flagged before pick-and-pack even starts. That's a Shopify–Odoo integration layer we've built for 14 clients across the UK, UAE, and Singapore.
The Results a $5M Cosmetics Brand Should Realistically Expect
After implementing Odoo Lot Recall Management for a $5.3M color cosmetics brand in the UK, here's what we measured at the 90-day mark:
90-Day Measured Outcomes — $5.3M UK Color Cosmetics Brand
- Recall identification time: from 2 hrs 41 min → 7 min per lot event
- Near-expiry write-offs: reduced by 61% in the first quarter due to FEFO implementation
- Compliance audit prep time: from 4 days → 6 hours for EU PIF documentation
- Staff hours saved on manual lot tracking: 23 hours per month
- Value of prevented shipments: $31,200 in 90 days (near-expiry stock caught before dispatch)
These aren't projected numbers. These are measured outcomes from an actual implementation.
The Implementation Reality (No Sugarcoating)
A cosmetics brand with 80–200 SKUs and 3 warehouses typically goes live with Odoo Lot Recall Management in 6–9 weeks.
6–9 Week Timeline for Cosmetics Lot Recall
Week 1–2: Product master data cleanup. This is the painful part. We find — in almost every engagement — that 22% to 35% of product records have either incomplete tracking settings, missing supplier references, or mismatched units of measure. You can't build traceability on dirty data.
Week 3–4: Lot data migration from your existing system (whether that's an old ERP, Cin7, or a collection of Excel sheets). We map every historical lot number and link it to open inventory.
Week 5–6: Warehouse team training on barcode scanning for lot assignment during receive and dispatch. This is where adoption lives or dies — your warehouse staff need to understand why they're scanning, not just that they're scanning.
Week 7–9 (if needed): Shopify integration for lot-aware fulfillment + custom reporting for regulatory teams.
Go live. And then your first recall drill happens — and the whole room goes quiet when the traceability report populates in under 5 minutes.
The Shopify–Odoo lot sync we build during weeks 7–9 is part of our broader Odoo ERP integration services — because lot-aware fulfillment across channels is where most cosmetics brands break their traceability chain.
Don't Let a $140K Recall Take Down Your Brand
If your cosmetics brand is doing more than $1M ARR and your recall process is still "call the warehouse manager and check the spreadsheet," you are one bad batch away from a very expensive lesson.
Book our free 15-Minute Operations Audit. We'll look at your current lot tracking setup, identify your biggest compliance gap, and tell you exactly what it would take to fix it. No sales pitch. Just a real diagnosis.
Book Your Free Lot Tracking Audit
