Manage every product's expiration date from one spreadsheet
If you sell anything perishable across more than a handful of products, setting expiration dates one product at a time gets old fast. A spreadsheet is the natural way to manage them in bulk — you can see every date at once, sort and edit in seconds, and reload the whole catalog in one step. The free Sellinor Product Expiration Dates plugin gives you a dedicated CSV import/export page built for exactly this, and the Pro add-on extends date handling into WooCommerce’s own product importer.
Start from an export, not a blank file
The fastest way to bulk-load dates is to begin with the data you already have. On the Products → Expirations → Import / Export page, the Export button downloads a CSV containing every product that has an expiration date, and the Download template button produces a CSV pre-filled with your products and their current dates — ready to edit and re-upload.
Each exported row includes the Product ID, SKU, product name, product type, the expiration date, and stock status and price for context. You don’t have to keep all of those columns; only the matching column and the date column matter on import. Starting from an export means your IDs and SKUs are already correct, so rows line up perfectly when you upload the file back.
Full details of the file format live in the Import & export documentation.
How the import matches rows
Your import CSV needs two things:
- An ID or SKU column, used to match each row to an existing product. ID is checked first, then SKU.
- An Expiration date column in
YYYY-MM-DDformat. Leave a cell blank to clear that product’s date.
Other columns — name, type, stock status, price — are read-only context and are ignored on import, so you can keep them in the file for your own reference without affecting anything. Drag the CSV onto the upload area (or click to browse), then click Import. Columns are detected automatically, so there is no mapping step to work through.
Rows that can’t be matched to a product are simply skipped, and you’ll see a summary of results when the import finishes. That summary is worth reading: it confirms how many products were updated and flags anything that didn’t match, usually a typo’d SKU or a product that no longer exists.
Why YYYY-MM-DD matters
Stick to the YYYY-MM-DD format for every date. It removes the ambiguity that bites international stores: a value like 01/02/2026 could be January 2nd or February 1st depending on who reads it, and a single misread date on a perishable product is exactly the kind of mistake bulk editing is supposed to prevent. 2026-02-01 can only mean one thing.
Variable products round-trip cleanly
If you sell variable products, the CSV handles them in two parts so a file you export imports back without surprises:
- Each dated variation is exported as its own row, matched by its variation ID or SKU, carrying that variation’s own date.
- The parent product is exported as a single row only when it has a default (inherited) date set — the date that dateless variations fall back to. That parent row carries the default date, not the earliest variation date.
On import, a parent row sets the product’s default date and variation rows set each variation’s own date. So you can manage a whole variable catalog from the spreadsheet: edit the parent row to change the fallback for every undated variation, or edit individual variation rows to override specific ones. If a variable product has no default and no dated variations, it isn’t included — there’s nothing to round-trip. For more on how inheritance works, see the expiration dates documentation.
Always export before a big import
Before running a large import, export your current data first. If something in the new file is wrong, you have a clean snapshot to restore from. Combined with the import summary, that habit makes bulk edits safe to repeat — you can refine a file and re-upload it as many times as you need.
Two CSV workflows: pick the right one
There are two ways to move dates in bulk, and they suit different jobs.
The plugin’s dedicated Import / Export page (free) is the focused tool: it deals only with expiration dates, detects columns automatically, and is the quickest path when dates are all you’re changing. Use it for a one-time bulk load, a periodic refresh of shelf-life dates, or to back up and hand off date data to a colleague.
The WooCommerce native product CSV integration (Pro) is for teams that already manage their catalog through Products → Import and Products → Export. With the Pro add-on active, exports include an expiration-date column automatically, and on import you map your column to Expiration date on WooCommerce’s standard mapping screen. That lets you set dates as part of your normal product-data workflow — pricing, stock, descriptions, and expiry all in one file — rather than running a separate pass. Pro unlocks this alongside batch and lot tracking with FEFO, automatic discounts as dates near, and scheduled email digests; see the licensing docs for what’s included.
For day-to-day tweaks rather than bulk loads, you don’t need a CSV at all — the Products list has a sortable Expiration column plus Quick Edit and Bulk Edit for setting dates inline. CSV is the tool when you want to work in a spreadsheet and reload the whole catalog at once. If you’re new to setting dates in the first place, start with best-before dates in WooCommerce and come back here when you’re ready to manage them at scale.
Frequently asked questions
How do I bulk import expiration dates into WooCommerce from a CSV?
Install the free Sellinor Product Expiration Dates plugin and go to Products → Expirations → Import / Export. Drag your CSV onto the upload area and click Import. Your file needs an ID or SKU column to match each row to a product, plus an Expiration date column in YYYY-MM-DD format. Columns are detected automatically, so there's no mapping step, and an import summary shows what was updated or skipped.
Does the import match products by SKU or by ID?
Either. Each row is matched to an existing product using its ID first, then its SKU if no ID is present. This means an export you download from the plugin re-imports cleanly, and a spreadsheet built from your own SKUs works too.
What date format does the CSV need?
Use YYYY-MM-DD (for example 2026-09-14). This avoids the ambiguity of formats like 01/02/2026, which could mean January 2nd or February 1st depending on locale. Leaving the expiration-date cell blank clears that product's date on import.
How do variable products work in the CSV?
Each dated variation exports as its own row matched by its variation ID or SKU, carrying that variation's date. The parent product exports as one row only when it has a default (inherited) date set, and that parent row carries the default — so a file you export round-trips back in cleanly, setting variation dates and the parent default correctly.
Can I add expiration dates through WooCommerce's own product importer?
Yes, with the Pro add-on. Pro adds an expiration-date column to WooCommerce's native product CSV importer and exporter. Exports include the column automatically, and on import you map your column to Expiration date on WooCommerce's mapping screen, so dates travel with your regular catalog data.
Should I back up before a large import?
Yes. Use the Export or Download template button on the Import / Export page to save your current dates before running a big import, so you can restore from that file if anything goes wrong. After importing, check the results summary to confirm every row was matched.
Set hundreds of expiration dates in one upload
Export your dated catalog, edit the dates in a spreadsheet, and re-upload. The free Sellinor plugin matches rows by SKU or ID and detects columns automatically — no mapping step.
See plans & download freeOr read the documentation.