Go Back

Shopify Customer Received an Expired Product: How to Reply and Trace the Batch

When a Shopify customer gets an expired product, start by checking that it really is expired, because "short-dated" and "past its period after opening" are different cases. If the date had passed when it was delivered, apologize, ask for a photo of the date and batch code, and resolve it without asking for the item back. Then pull every unit from that lot before the next order ships.

The reply takes two minutes. Tracing the batch is what stops a second customer from sending the same email tomorrow.

This guide is for DTC brands that sell anything with a date on the pack: food, drinks, supplements, skincare, cosmetics, pet food.

Why expired product tickets are different from damaged items

A damaged parcel is usually one bad shipment. An expired product almost never is. If one unit left your warehouse past its date, others from the same lot are probably still on the shelf or already on their way to customers.

So each ticket asks you to do two things:

  • Fix it for this customer. Fast, without a debate.
  • Find the cause. Which batch, which location, which supplier, and how many other orders got it.

Most stores do the first part and skip the second. That's how one complaint turns into ten.

Expired, short-dated or past its period after opening: know which one you have

Customers say "expired" for several different problems. Work out which one you have before you reply, because the right answer changes.

  • Date on the pack had already passed at delivery. What it means: truly expired. Default answer: resolve with no return, log the batch, pull the lot.
  • Date is close, product still in date. What it means: short-dated. Default answer: apologize, offer a gesture or a replacement with a longer date.
  • No visible date, product smells or looks off. What it means: possible quality or storage problem. Default answer: ask for photos, escalate to your team.
  • Cosmetic opened long ago, past its period after opening. What it means: not a fulfillment issue. Default answer: explain the open jar symbol kindly, no refund by default.
  • Customer says they got sick or had a reaction. What it means: safety issue. Default answer: escalate to a human now, nothing automated beyond an acknowledgment.

Use by vs best before. Food tickets often mix up two dates. The UK government's guidance on best before and use-by dates, published on GOV.UK, defines them like this:

  • Use by is about safety. It tells you "when the food is no longer safe to eat."
  • Best before is about quality. It tells you "when the food might start to reduce in quality," and after it the food "is usually safe to eat but may not be of the same quality."

The terms and rules are set by the food authority in each country you sell to, so check your own market's guidance. For support, the practical rule is simple. If the customer paid for a product and it arrived past either date, that's on you.

The open jar symbol on cosmetics. Skincare tickets are often not about expiry at all. Ireland's regulator, the HPRA, explains in its cosmetic labelling guidance that "a graphical 'open jar' symbol followed by the period (in months and/or years) shows the PAO", which means period after opening. It also says this symbol is required when a cosmetic's minimum date of durability is more than 30 months.

So "12M" on the jar means 12 months after opening, not 12 months after purchase. If a customer opened the product a long time ago and it has now gone past that period, it wasn't a shipping error. Explain the symbol in one line, without lecturing. Make a goodwill gesture if your policy allows one.

How to reply to a customer who received an expired product

Keep it short. The customer is annoyed and may be worried. Don't explain your supply chain. Don't ask them to prove they didn't keep the product too long. The order date and delivery date already tell you that.

First reply, to ask for the batch details. Subject: "Your order #1234: expired product". Message: "Hi Sarah, sorry about this. A product should never reach you past its date. Could you send a photo of the expiry date and the batch or lot code printed on the pack? It's usually near the date. This helps us find and remove any other units from the same batch. Please don't use the product. You don't need to send it back. Thanks, The Team"

Second reply, to resolve it. Subject: "Your order #1234: refund processed". Message: "Hi Sarah, thanks for the photo. We've refunded the expired item to your original payment method, and we've pulled the rest of that batch from our stock. If you'd rather have a fresh replacement, reply to this email and we'll ship one. The Team"

Don't promise a date for the refund to show up, because that depends on the bank. Use the same refund, replacement or discount code rules you already apply to other order errors. When you refund, don't restock the unit: an expired item should never go back into available stock.

What to document on every expired product ticket

This is the part that saves you money. Record the same fields on every ticket, in the order notes or a tag, so you can search them later.

  • Order number and fulfillment date
  • Product and variant
  • Batch or lot code from the customer's photo
  • Date printed on the pack, and whether it's a use by, best before or period after opening
  • Delivery date, to confirm the product was already past its date on arrival
  • Fulfillment location, if you ship from more than one warehouse or use a 3PL
  • Supplier, if you buy the product from someone else
  • Resolution given
  • Photo saved with the ticket

Add a tag like "expired-product" and a second tag with the lot code. When another ticket comes in with the same code, you'll see the pattern at once.

How to pull a batch from stock once it's identified

  • Search your stock for the lot code at every location and set those units aside. Don't just mark them down. Physically separate them.
  • Adjust inventory in Shopify so the store stops selling units you no longer have. If pulling the lot leaves you short, check how your store handles orders past zero stock. Our Shopify oversell policy rules, listed at the end of this article, cover what to tell customers when that happens.
  • List recent orders fulfilled from that location since the lot came in.
  • Decide whether to contact those customers first. A short "we found a problem with your batch" email is easier to handle than a wave of complaints.
  • Ask your 3PL how they pick stock. Expiry tickets often come from a warehouse that isn't shipping the oldest in-date stock first.
  • Send the supplier the evidence if they delivered short-dated stock: photos, lot codes and order numbers.

Keep a simple log of each batch you pull: lot code, date pulled, units removed, orders affected. If the same supplier or location keeps showing up, you have your root cause.

When a human has to take over

Routine tickets follow a fixed path. Some cases should always go to a person:

  • The customer says they ate, drank or applied the product and felt unwell.
  • The customer mentions an allergic reaction, a baby, a pet or a medical condition.
  • The customer mentions a lawyer, a regulator or a public review.
  • The order value is above your refund limit.
  • The product looks tampered with, not just old.

For these, the first reply only acknowledges the message and says a team member is looking at it. Your team then decides on the resolution and whether the case needs reporting. To decide which refunds an AI agent can handle and which always go to your team, read our guide on giving a Shopify AI agent refund permissions, listed at the end of this article.

How Relay handles expired product tickets

Relay answers, refunds and resolves your Shopify tickets 24/7, following your rules. For an expired product ticket:

  • Understand. Relay understands the request and finds the order in Shopify.
  • Decide. Relay applies your rules.
  • Act. Relay takes action, such as a refund or a discount code, within the permissions you give it.
  • Escalate. Relay knows when to bring in your team: health complaints, high value orders, repeat claims.

You set the rules once. Each expired product ticket then gets the same answer, and your team only sees the cases that need a person. That leaves your team free to trace the batch.

More guides by product type are in the By industry category of our blog, with support guides for Shopify brands in each vertical.

FAQ

Should I ask the customer to return an expired product? No. You can't resell an expired unit, and return shipping often costs more than the product. Ask for a photo of the date and batch code, then tell the customer not to use the product.

Is a short-dated product the same as an expired one? No. A short-dated product is still in date but close to it. It's usable, so a gesture or a replacement with a longer date is usually enough. An expired product had already passed its date when it was delivered.

What does "12M" with an open jar mean on a cosmetic? It's the period after opening: how long the product can be used once it's opened, here 12 months. If the customer opened it long ago and is now past that period, it isn't a fulfillment error.

What if the product was in date at delivery but expired later? Compare the delivery date with the printed date. If it was in date on arrival, it's not a fulfillment error. If your product pages promise a minimum shelf life, check that promise before you reply.

Why log the lot code on every ticket? One expired unit usually means others from the same lot. The lot code lets you find those units in stock, see which orders got them, and show the supplier the evidence.

Ready to replace your first support hire?

Join fast-growing Shopify stores automating 80–95% of customer support in under 10 minutes.

Start Free Trial

From $59/month • 14-day trial