Privacy & learner data
Privacy & learner data
Your academy decides what its learners' data is for; Mastria stores and processes it on your behalf. In GDPR terms, your company is the controller and Mastria is your processor. This page lists what Mastria holds about a learner, where it lives, who handles it, and how to delete it when someone asks.
What Mastria stores about a learner
- Identity: the email they sign in with, any recovery or former address they confirmed, and the display name they set on My profile.
- Their place in your academy: the account they belong to (matched by email domain, or set by your team), when they joined, when they were last active, and how they first arrived (a campaign, a shared certificate, another site) when the sign-in form recorded it.
- What they did: lesson progress and finished courses, lab attempts (including the code they ran checks on), lab runs and hints opened, quiz answers, exam attempts and their time to pass an exam, the exam reminders sent to them and whether they stopped them, certificates, course ratings and their comments, and lesson reports and their notes.
- What your systems sent: product metrics you send to the metric ingest, keyed by their email or by your own user id for them.
- Purchases, when you sell certificates: what they bought and the Stripe ids of the payment. The payment itself lives in your own Stripe account.
- Their choice about your customer's progress report: whether they agreed to be named in it (see Sharing progress with a customer).
What Mastria doesn't do:
- No tracking cookies and no third-party analytics or ad scripts. The only cookies are for signing in and for the light or dark appearance choice.
- Reach's page views and lab runs are counted without identity: a daily number per page, with no cookie and nothing stored about the visitor (see Reach).
- Fonts are served from Mastria itself, never loaded from Google.
Where it lives and who handles it
| Service | What it handles | Where |
|---|---|---|
| Neon (Postgres) | The database: everything listed above | AWS us-east-2, Ohio, United States |
| Vercel | Runs the app and serves its pages | Functions in Washington, D.C., United States; pages pass through Vercel's worldwide edge network |
| Resend | Sends sign-in links, certificate emails, exam reminders and invitations: the recipient's address and the email, and reports back whether each arrived | Sends from Ireland (eu-west-1) |
| jsDelivr | Serves the lab runtimes (DuckDB, Python) to the learner's browser, which fetches them directly | Worldwide CDN |
| Stripe | Certificate purchases, on your own Stripe account, only if you sell certificates | Your Stripe account |
Lesson text and your docs pages go to Anthropic for content freshness checks, and lesson video audio goes to Deepgram for transcripts. Neither receives anything about learners.
Learner data is stored in the United States. Mastria doesn't offer EU hosting.
Your privacy policy
Learners give their email address on your academy's sign-in page, so that's where your privacy policy belongs. Your footer appears on every page learners see, the sign-in and "Check your email" pages included: add a Privacy link to it under Admin → Brand → Header and footer (see Brand & appearance).
Deleting a learner
When someone asks to be erased, anyone on your team opens them in Admin → Learners and uses Delete learner at the foot of their page. It removes the learner and everything they did at your academy, for good, and the product metrics your systems sent for their addresses. What goes and what stays is in Deleting a learner.
Your privacy tooling can do the same through the API, by email address
or learner id, including for someone who never signed in but whose
product metrics you sent. A webhook event, learner.deleted, tells your
warehouse what to erase. Both are in
Integrations & exports.
A learner's own copy
Learners see their own record without asking anyone: My profile lists their courses, progress and certificates, and its training history prints as a transcript with a verification link for each certificate.
How long things are kept
- A learner's data stays until you delete the learner (or the academy).
- The webhook delivery log keeps each event for 30 days.
- An email waiting to be sent (a certificate email, a security notice) is kept 12 hours at most, and removed once sent.
- The list of emails your academy sent a learner (each one's subject and whether it arrived, never its text) is kept a year.
- A sign-up source that never became a learner (the email link was never opened) is removed after two days.
- After a deletion, the database's restore history holds the old rows for up to 6 hours, then they're gone.