---
title: "Publish a yearly moderation report · Agent Wranglers"
url: https://agentwranglers.se/playbook/compliance/online-platforms/moderation-report
updated: 2026-10-21
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Publish a yearly moderation report

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Online platforms](https://agentwranglers.se/playbook/compliance/online-platforms.md).

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

- Level: Recommended
- Chapter: [Online platforms](https://agentwranglers.se/playbook/compliance/online-platforms)
- Rule: Unless you are a micro or small enterprise, publish a content moderation report for each calendar year by the end of February. Build it from your moderation records.
- Applies when: The project has users in the EU.
- How: Article 15 lists what the report holds. It counts orders from authorities, notices by type of content, your own moderation, complaints and the use of automated tools. It gives median times to act on orders and notices. Online platforms add out-of-court disputes and suspensions, under Article 24(1). They also publish their average monthly active users in the EU every six months, under Article 24(2). Commission Implementing Regulation (EU) 2024/2835 sets the templates and the reporting year. Publish the report as CSV in that template, within two months of the year's end. Generate the counts with the same jobs that [collect evidence automatically](https://agentwranglers.se/playbook/compliance/controls-and-evidence/automated-evidence). Put the due dates in [Keep every legal date in one calendar](https://agentwranglers.se/playbook/compliance/scope-and-ownership/compliance-calendar).
- Check: The report for the last full year is public as CSV by 28 February. Its total of notices equals the count in the moderation database for that year. The compliance calendar holds the next due date.

## 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.

### JavaScript example

```js
export const reportProblems = (report, databaseNoticeCount) =>
  report.totalNotices === databaseNoticeCount
    ? []
    : [`report counts ${report.totalNotices} notices, database counts ${databaseNoticeCount}`];
```

### Python example

```python
def report_problems(report: dict, database_notice_count: int) -> list[str]:
    if report["total_notices"] == database_notice_count:
        return []
    return [f"report counts {report['total_notices']} notices, database counts {database_notice_count}"]
```

## Sources

- [Digital Services Act Articles 15 and 24](https://eur-lex.europa.eu/eli/reg/2022/2065/oj)
- [Commission Implementing Regulation (EU) 2024/2835](https://eur-lex.europa.eu/eli/reg_impl/2024/2835/oj)

## Related rules

- [Collect evidence automatically](https://agentwranglers.se/playbook/compliance/controls-and-evidence/automated-evidence) in Compliance
- [Keep every legal date in one calendar](https://agentwranglers.se/playbook/compliance/scope-and-ownership/compliance-calendar) in Compliance

**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/compliance/online-platforms/moderation-report">Agent Wranglers compliance playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Handle appeals and send decisions to the EU database](https://agentwranglers.se/playbook/compliance/online-platforms/platform-complaints)
- Next: [Check traders before they sell on your marketplace](https://agentwranglers.se/playbook/compliance/online-platforms/trader-traceability)
- [Online platforms](https://agentwranglers.se/playbook/compliance/online-platforms)
