WooCommerce powers over 5 million online stores worldwide. It's flexible, customizable, and excellent for international selling. But like every e-commerce platform, it has zero built-in support for EPR packaging compliance. No packaging weight fields. No material tracking. No declaration exports.
If you sell to EU customers, that gap is now a compliance risk. The PPWR enters into force in August 2026, and every online seller placing packaged products on the EU market must register with national PROs, declare their packaging by material and weight, and pay end-of-life fees. WooCommerce won't do any of that for you. Here's how to bridge the gap.
WooCommerce and the EPR data problem
EPR packaging declarations require two datasets to be connected:
- Sales data: What products you sold, how many, and where they shipped. WooCommerce has this.
- Packaging data: What materials your packaging is made of, how much each component weighs, and at what packaging level it operates. WooCommerce does not have this.
WooCommerce stores order data in its own database — wp_wc_orders if you've migrated to High-Performance Order Storage (HPOS), or the legacy wp_posts and wp_postmeta tables if you haven't. Either way, the platform knows what was sold, how many units, when, and to which shipping address. What it doesn't know: that your 250ml candle ships in a 180g corrugated box with a 12g tissue paper wrap and 35g of shredded paper void fill. That packaging data — the Bill of Materials — needs to exist somewhere, linked to every product, before you can calculate a declaration.
Getting your data out of WooCommerce
The first step in any compliance workflow is extracting your order data in a usable format. WooCommerce gives you three options, each with trade-offs.
Option 1: Manual CSV export
WooCommerce has built-in export functionality. Navigate to WooCommerce → Analytics → Orders → Export (the download icon in the top right). You can filter by date range and order status.
Columns you need for EPR:
- Order date
- Order ID
- Product name and/or SKU
- Quantity
- Shipping country
Limitations of the manual export:
- Product variants don't always export cleanly. A variable product (e.g., "T-shirt — Blue, Size L") may export with only the parent product name, not the specific variant. If different variants have different packaging, you'll need to clean this up.
- You need to re-export every quarter. Manual processes get forgotten.
- Large stores (50,000+ orders per export) may hit timeout issues depending on hosting configuration.
Manual CSV export works for small stores doing their first declaration. It does not scale for ongoing quarterly compliance across multiple countries.
Option 2: REST API integration
WooCommerce has a well-documented REST API (v3) that returns order data programmatically. Compliance tools can connect via API to pull orders automatically on a schedule.
This is the cleanest approach because:
- Orders sync automatically — no manual exports to remember
- Variant data comes through properly (each line item includes the specific variation ID and attributes)
- New orders appear in your compliance system without intervention
- You can backfill historical data for past reporting periods
To set up API access in WooCommerce: go to WooCommerce → Settings → Advanced → REST API → Add key. Generate a key with Read access to orders. You'll get a Consumer Key and Consumer Secret — these are the credentials a compliance tool needs to connect.
One caveat: WooCommerce's REST API can be slow on shared hosting. If your store runs on budget hosting, API calls for large order sets may time out. Managed WooCommerce hosting (WP Engine, Cloudways, Kinsta) handles API traffic much better.
Option 3: Plugin-based export
Several WordPress plugins — WP All Export is the most popular — can create custom CSV exports with exactly the columns your EPR process needs. You define the export template once, save it, and re-run it each quarter. This is a middle ground between manual export and full API integration: more flexible than the built-in export, but still requires manual action each quarter.
WooCommerce-specific challenges
Every e-commerce platform has its quirks. WooCommerce has several that directly affect EPR compliance.
Product variations
A WooCommerce variable product — a t-shirt in S/M/L/XL, for example — might have identical packaging across all sizes. Or it might not. A size S might ship in a poly mailer while a size XXL ships in a box because it's physically larger.
Your EPR data needs to handle this. The options:
- One BOM per parent product — if all variations ship in the same packaging. This is the simplest approach and works for most products.
- Separate BOMs per variation — if packaging differs by size, color, or configuration. More work, but necessary for accuracy when packaging genuinely varies.
When in doubt, check: does the shipping box change between variants? If the box and void fill are the same regardless of which variant ships, one BOM is enough.
Product bundles
If you use WooCommerce Product Bundles (or a similar plugin), a bundle creates a single order line item but contains multiple products. Each product in the bundle has its own primary packaging. The bundle might also have additional packaging — a gift box, extra void fill, a bundle-specific insert.
Your EPR calculation needs to "unbundle" these. The packaging weight for a bundle order line is not just the bundle's box — it's the sum of each component product's packaging plus any bundle-specific packaging. Create a dedicated BOM for each bundle SKU that accounts for all of this.
Multi-site setups
Some brands run separate WooCommerce instances per country or region: de.mystore.com, fr.mystore.com, es.mystore.com. Each instance has its own order database. For EPR, you need to aggregate data across all instances — or at minimum, ensure each instance's orders are included in the declaration for the corresponding country.
If you use WordPress Multisite with WooCommerce, your order data lives in separate database tables per site. API credentials are also per-site. Plan for multiple connections, not one.
HPOS migration status
WooCommerce has been migrating from its legacy order storage (custom post types in wp_posts) to High-Performance Order Storage (HPOS) using dedicated wp_wc_orders tables. This migration changes the database schema significantly.
If you're using custom queries, direct database exports, or older plugins to extract order data, make sure they work with your current storage mode. The WooCommerce REST API abstracts away this difference — another reason to prefer API integration over direct database queries.
SKU inconsistencies
WooCommerce doesn't enforce unique SKUs. You might have products without SKUs, products with duplicate SKUs, or variations where the parent has a SKU but the child variations don't (or vice versa). For EPR, every order line item needs to map to a packaging BOM. If your SKUs are messy, the mapping breaks.
Before starting your compliance setup, audit your WooCommerce SKUs. Ensure every product and variation that ships to customers has a unique identifier. This is also just good inventory management practice.
The complete WooCommerce-to-declaration workflow
Here's the end-to-end process, step by step.
Step 1: Export or sync your orders
Choose your method: API sync (best for ongoing automation), CSV export (acceptable for initial setup), or plugin export (middle ground). Whichever method you choose, ensure you capture completed orders with shipping country data for the reporting period.
Step 2: Match products to packaging BOMs
Each product in your order data needs a corresponding packaging BOM that lists every material, weight, and packaging level. Create these once; reuse them for every subsequent reporting period. Only update when your actual packaging changes.
Step 3: Handle SKU discrepancies
WooCommerce SKUs may not match the product identifiers you used when building BOMs. This is especially common if your WooCommerce store uses internal product IDs while your BOMs use supplier part numbers. Use aliases to map between them. For example: WooCommerce SKU "CANDLE-VAN-250" maps to BOM product "Vanilla Candle 250ml."
Step 4: Run the compliance compute
The compute multiplies each product's BOM weights by the quantity shipped to each country, then aggregates by material type and packaging level. The output is your declaration data: X kg of cardboard secondary packaging to France, Y kg of plastic primary packaging to Germany, and so on.
Step 5: Review totals
Sanity-check the numbers. If you shipped 5,000 orders to Germany and each order averages 300g of packaging, you should see approximately 1,500 kg total for Germany. If you see 15 kg or 15,000 kg, investigate.
Step 6: Download declaration packs per country
Generate country-specific declaration files in the format each PRO expects. ECOEMBES wants data structured differently than CITEO, which wants it differently than LUCID. The declaration pack should match each PRO's required categories, material breakdowns, and weight units.
Step 7: Submit to PROs
Log into each PRO's portal and submit your declaration. Upload the file or enter numbers manually, depending on the PRO. Save confirmation receipts. Pay invoiced fees when they arrive.
WooCommerce plugins for EPR?
Unlike the Shopify ecosystem, which has a handful of apps that touch on sustainability and packaging, the WooCommerce plugin directory has almost nothing specifically for PPWR or EPR packaging compliance. A few "sustainability" plugins exist, but they focus on carbon footprint calculation or eco-friendly messaging — none of them generate PRO-specific declaration files.
This is a genuine gap in the WooCommerce ecosystem. WooCommerce's flexibility means it can integrate with external compliance platforms via API, but you won't find a one-click plugin that handlesmulti-country EPR declarations out of the box. Dedicated compliance platforms that connect to WooCommerce via its REST API fill this gap.
Automating the ongoing process
Once the initial setup is complete, the quarterly compliance cycle for a WooCommerce store looks like this:
- Orders sync automatically via REST API. No manual exports needed.
- BOMs are already assigned to products. Unless you changed packaging, nothing to update.
- Compute runs on schedule — either manually triggered or set to auto-run at the end of each quarter.
- Declaration packs generate for each country in the correct format.
The manual steps that remain: review the numbers, download the exports, log into each PRO's portal, and submit. Total time after initial setup: roughly 30 minutes per quarter per country. For a brand selling to 5 EU countries, that's about 2.5 hours per quarter — manageable for any operations team.
WooCommerce vs. Shopify for EPR: any difference?
From an EPR compliance perspective, the two platforms are more similar than different. Neither has built-in packaging compliance features. Both store the order data you need. Both have APIs for automated data extraction.
The practical differences:
- API reliability: Shopify's API is consistently fast and well-maintained. WooCommerce's API performance depends heavily on your hosting — shared hosting can be sluggish for large data pulls.
- SKU consistency: Shopify enforces unique SKUs more strictly. WooCommerce allows duplicate or missing SKUs, which creates mapping headaches for compliance.
- Order storage: Shopify's order data structure is consistent across all stores. WooCommerce's varies depending on HPOS migration status and active plugins.
- Plugin ecosystem: Neither platform has mature EPR plugins, but Shopify has slightly more options in the sustainability category.
Bottom line: the compliance process is the same regardless of platform. The differences are in data extraction mechanics, not in what you need to declare.
Common mistakes WooCommerce sellers make with EPR
These are specific to WooCommerce stores, on top of the general EPR mistakes every e-commerce brand makes.
- Relying on weight fields for packaging weight. WooCommerce has a "Weight" field per product, but this is for shipping rate calculation — it's the product weight, not the packaging weight. Don't confuse the two.
- Ignoring refunded orders. If a customer returns a product, the packaging was still placed on the market (it reached the consumer). Most PROs expect you to declare based on what was shipped, not what was kept. Check your PRO's policy, but generally, returns don't reduce your declared packaging weight.
- Forgetting about subscription orders. If you use WooCommerce Subscriptions, recurring orders generate new shipments with new packaging. Make sure subscription renewal orders are included in your EPR calculations.
- Not accounting for plugin-generated orders. Some WooCommerce setups create orders programmatically via plugins (wholesale plugins, POS plugins, custom integrations). Verify that all order sources are captured in your compliance data.
Getting started
If you're running a WooCommerce store that ships to EU customers, here's your minimum action plan:
- Export your last 12 months of orders and identify which EU countries you shipped to. This tells you where you need PRO registrations.
- Check the PPWR compliance checklist to understand the full timeline.
- Weigh your packaging for your top products and build BOMs.
- Set up API access in WooCommerce (Settings → Advanced → REST API) so your compliance tool can sync orders automatically.
- Start PRO registrations for your highest-volume countries. Germany, France, and Spain are the most common for WooCommerce brands selling across Europe.
Pack Declare connects to WooCommerce via REST API and syncs orders automatically. Products map to packaging BOMs, the compute runs on schedule, and declaration packs generate in each PRO's format. If you sell on other channels too — Shopify, Amazon, manual orders — everything aggregates into a single compliance view.
August 2026 is not far away. Your WooCommerce store has the data you need. The missing piece is connecting that data to your packaging information and generating the declarations your PROs expect. Start with building your BOMs — everything else flows from there.