---
title: "Tell every buyer of a recalled product · Agent Wranglers"
url: https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment/product-recall-notices
id: ECM-47
level: Required
applies: eu-users
region: EU
risk: law
updated: 2026-10-27
build: a2a6bdfed830
tokens: 1103
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Tell every buyer of a recalled product directly

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Orders and fulfilment](https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: ECM-47
- Level: Required
- Chapter: [Orders and fulfilment](https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment.md)
- Rule: When a product you sold in the EU is recalled or gets a safety warning, notify every buyer you can identify directly, without undue delay. Offer at least two remedies from repair, replacement and refund, free of charge.
- Check: A test recalls one SKU and batch. Every buyer of that batch gets a notice whose subject starts with "Product safety recall", and buyers of other batches get none. The notice offers at least two remedies. A lint on the notice template fails on "voluntary", "precautionary" or "discretionary".
- Risk: A law broken
- Applies when: The project has users in the EU.
- Region: European Union (EU). The duty comes from the law there. The rule applies only when the project serves people there, and its Applies when also holds.
- How: Article 35 of the General Product Safety Regulation (EU) 2023/988 makes sellers and online marketplaces use the customer data they hold for recalls. Article 36 sets the written notice. It opens with the headline "Product safety recall" and shows a picture, the batch or serial numbers and the hazard. It must avoid words that play down the risk, such as "voluntary" or "precautionary". Article 37 gives the buyer a choice of at least two remedies, and a refund is at least the price paid. Find the buyers by SKU and batch from the order lines in [Move each order line through a fixed set of fulfilment states](https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment/fulfilment-states.md). Send the notices as their own batch, as [Plan required mass notices as their own send](https://agentwranglers.se/playbook/email/deliverability/mandated-notices.md) says. Buyers you cannot reach get the notice through your website and other channels, under Article 35(4).

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### TypeScript example

```ts
export async function notifyRecall(recall: { sku: string; batches: string[]; noticeId: string }) {
  const buyers = await db.orderLines.distinctBuyers({ sku: recall.sku, batch: { in: recall.batches } })
  for (const buyer of buyers) {
    await mandatedNotices.enqueue({ to: buyer.email, template: 'product-safety-recall', notice: recall.noticeId, key: `${recall.noticeId}:${buyer.id}` })
  }
  return buyers.length
}
```

### Python example

```python
def notify_recall(sku: str, batches: list[str], notice_id: str) -> int:
    buyers = order_lines.distinct_buyers(sku=sku, batches=batches)
    for buyer in buyers:
        mandated_notices.enqueue(to=buyer.email, template="product-safety-recall",
                                 notice=notice_id, key=f"{notice_id}:{buyer.id}")
    return len(buyers)
```

## Sources

- [Regulation (EU) 2023/988 (General Product Safety), Articles 35 to 37](https://eur-lex.europa.eu/eli/reg/2023/988/oj)

## Related rules

- ECM-18 [Move each order line through a fixed set of fulfilment states](https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment/fulfilment-states.md) in E-commerce and fulfilment
- EML-26 [Plan required mass notices as their own send](https://agentwranglers.se/playbook/email/deliverability/mandated-notices.md) in Email

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment/product-recall-notices">Agent Wranglers e-commerce and fulfilment playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Hand out each licence key once](https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment/licence-keys-once.md)
- [Orders and fulfilment](https://agentwranglers.se/playbook/ecommerce/orders-and-fulfilment.md)
