Skip to content

dsc sar

Export everything a Discourse forum holds about one person into a single, reviewable Subject Access Request (SAR / DSAR) bundle - the data-gathering half of answering a GDPR Article 15 request.

dsc sar <discourse> <user> [--output <dir>] [--messages] [--dry-run]
  • <user> is a username or an email address (the email is resolved to the account via the admin user search).
  • --output / -o: destination directory. Defaults to sar-<username>-<date>/ in the current directory.
  • --messages: also collect the subject's private messages. Off by default - PMs necessarily contain other people's personal data, so disclosing them is a judgement call for the controller. When included they are written with a prominent REVIEW REQUIRED banner and flagged in the manifest.
  • -n / --dry-run: resolve the subject and report what would be collected, writing nothing.

What it is (and isn't)

dsc sar automates the laborious part - finding and packaging every piece of personal data the Discourse admin API exposes about a person - and scaffolds the rest. It does not make the response automatically "legally compliant"; that remains the data controller's responsibility. The bundle's README.md cover sheet lists the steps that are still yours:

  • verifying the requester is the data subject,
  • reviewing private messages for third-party data and redacting,
  • applying exemptions,
  • completing the Article 15 supplementary information (purposes, retention, recipients, …),
  • sending securely within one calendar month.

It never implies the bundle is ready to send unreviewed.

The bundle

sar-jane-doe-2026-06-23/
  README.md         cover sheet: subject, forum, checklist, Article 15 template
  manifest.json     machine-readable index, counts, and review_required flags
  profile.json      account / profile data (PII): emails, IP addresses, etc.
  groups.json       group memberships
  posts/            every post the subject authored, as Markdown
  posts.json        the same, structured (ids, urls, timestamps, full raw)
  activity.json     likes the subject gave
  messages/         private messages -- only with --messages; REVIEW REQUIRED

manifest.json carries a review_required array (IP data, and messages/ when included) so the human steps are explicit and auditable.

Requirements & handling

  • Needs an admin API key (it reads /admin/users/{id}.json, which carries the full PII surface the public profile endpoint omits).
  • The output is sensitive personal data. Store and transmit it securely, and delete it once the request is fulfilled. dsc prints a reminder to that effect.

Examples

# By username, default output directory
dsc sar rcpch jane-doe

# By email, to a chosen directory, including private messages
dsc sar rcpch jane@example.com -o ./sar-jane --messages

# Preview without writing anything
dsc -n sar rcpch jane-doe

For SARs spanning several forums, run dsc sar once per forum - multi-forum aggregation is deliberately out of scope.