Live App Audits
Account Deletion, Data Export & Privacy Request Flow Audit via Browser MCP
A practical prompt for auditing a running application through the browser.
- Best for
- Driving the running application through the flows a user takes to leave or to get their data — finding the controls without support, confirming identity in a way that stops abuse without stopping the user, understanding what deletion means (what is removed, anonymised, retained, and for how long) before confirming, a grace period and cancellation of the request where offered, the actual outcome checked after the fact (sign-in refused, data gone from the interface and exports, emails stopped, subscriptions ended, third parties notified), a data export that is complete, readable, and delivered securely within the promised time, and the privacy request paths (access, correction, objection) that regulations require, tested as a real user
- Use when
- A privacy regulation, store policy, or customer contract requires in-app deletion and export; support handles deletion by hand; users report they deleted their account and still receive emails or can still sign in; a store review asked where account deletion lives; an export is incomplete or arrives as an unreadable dump; a subscription survived deletion; or the flows exist and nobody has run them end to end
You are the tester who deletes a real test account and then tries to sign back in, because a deletion flow is judged by what is true the next morning, not by the confirmation screen. You have seen a deletion path that required emailing support, a one-click delete with no identity check that a stolen session could trigger, a confirmation that did not say the subscription would keep billing, a deleted account that still received the weekly digest, an export that arrived as a database dump with internal identifiers and no readable content, a request that silently never completed, an app store listing that promised in-app deletion the app did not have, and a grace period with no way to cancel the request. This audit drives the deletion, export, and privacy request flows as a user, with the automation tools, and checks the outcome afterwards across the interface, emails, billing, and exports.
Failure modes you hunt:
- Flow unfindable or absent — deletion and export not reachable from account settings, hidden behind support, or missing where a regulation, store policy, or contract requires them
- Identity check wrong — no re-authentication so a stolen session can delete, or a check so heavy (support call, documents) that users cannot complete it
- Meaning unexplained — the confirmation not stating what is deleted, anonymised, retained (and why and for how long), what happens to shared content, subscriptions, and other members, and when it takes effect
- Grace period mishandled — no grace period where recovery is reasonable, or a grace period with no way to cancel, or immediate access continuing after the request
- Outcome incomplete — sign-in still possible, data still visible to others, emails and notifications still sent, subscriptions still billing, sessions on other devices still active, third-party processors not notified, backups and logs unaddressed in policy
- Export incomplete or unusable — missing data categories, internal identifiers instead of readable content, no media, a format nobody can open, no manifest
- Export delivery insecure or slow — download links that do not expire or require no authentication, emailed attachments, delivery beyond the promised time, no notification when ready
- Privacy request paths missing — no path for access, correction, objection, or consent withdrawal; requests not acknowledged or tracked
- Store and policy mismatch — the privacy policy, the store listing, and the app describing different deletion and retention behaviour
- Shared and organisational data — deletion of a member deleting an organisation's records, or leaving orphaned content with no owner
- Child and special-category data — special rules not reflected where the product collects them
- No audit trail — requests not logged with timestamps and outcomes for compliance evidence
Scope: The deletion, export, and privacy request flows of the running application, driven as a user with the browser automation tools from discovery through confirmation to the verified outcome across the interface, emails, billing, sessions, exports, and third parties, plus the agreement between the app, the privacy policy, and store listings. The data model's deletion mechanics and the backend retention jobs are separate passes; this audit checks what a user experiences and what is true afterwards.
Mode: Default is report mode with the verified outcomes, since fixes touch deletion mechanics: the flow walk, the outcome checks, the export assessment, the policy comparison, and the fix list. Fix mode on request for the interface items (findability, confirmation copy, re-authentication, cancel request, export format).
Run these first:
# 1. Where the flows live
grep -rnE 'delete.?account|deleteAccount|close.?account|export.?data|download.?my.?data|data.?export|privacy.?request|gdpr|ccpa' --include='*.tsx' --include='*.ts' app src 2>/dev/null | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head
grep -rnE 'reauth|re-auth|confirmPassword|currentPassword|verify' --include='*.tsx' --include='*.ts' app src 2>/dev/null | grep -iE 'delete|export' | head -3
grep -rnE 'grace|scheduledDeletion|deletionRequestedAt|deleteAt|cancelDeletion' --include='*.ts' --include='*.tsx' --include='*.prisma' app src prisma 2>/dev/null | head -5
# 2. What deletion and export touch
grep -nE 'model (User|Account|Subscription|Session|Member|Organization|Workspace|Comment|File|Upload)' -A3 prisma/schema.prisma 2>/dev/null | grep -E 'model|onDelete|deletedAt' | head -20
grep -rnE 'stripe\.(subscriptions|customers)\.(cancel|del|update)' --include='*.ts' app src lib 2>/dev/null | head -3; grep -rnE 'resend|sendgrid|audience|contacts\.(remove|delete)|unsubscribe' --include='*.ts' app src lib 2>/dev/null | grep -iE 'delete|remove' | head -3
# 3. Policy and store statements
grep -rniE 'delet|retain|retention|export|access request' app/privacy* content/privacy* 2>/dev/null | head -8
# store listings: the deletion statement and link required by the stores; the privacy labels declared
# 4. Drive the flows with the browser automation tools on a test account with real data (content, uploads, a subscription on a test card, another member or shared item, notifications on):
# find deletion and export from the account area; attempt deletion without re-authentication from a second session; read the confirmation; request export; request deletion; cancel the request if offered; request again
# 5. Verify the outcome after the stated time: sign-in attempt, the data as seen by another user, the export contents, the billing state in the payment provider's test mode, emails and notifications received, sessions on a second device, the request log
Methodology: Find the flows in the code and in the running application as a user would, and read what the privacy policy and the store listings promise. Prepare a test account with real data across categories, a subscription on a test card, shared content, and notifications. Drive export: request, wait, receive, open, and check completeness against the data categories and readability. Drive deletion: attempt without re-authentication from another session, read the confirmation, request, cancel if offered, request again, and after the stated time verify every outcome: sign-in, visibility to others, emails, billing, sessions, third-party contacts, and the request log. Drive the other privacy request paths. Compare the behaviour with the policy and store statements. Rank by legal exposure and by what a user would consider a broken promise.
Findability & Identity
- Deletion, export, and privacy requests reachable from the account area in a few steps without support; re-authentication or an equivalent check before deletion and export that stops a stolen session and is completable by a real user
Meaning, Grace & Confirmation
- A confirmation stating what is deleted, anonymised, and retained with reasons and periods, the effect on subscriptions, shared content, and other members, and when it takes effect; a grace period where recovery is reasonable with a visible way to cancel; access ended or clearly limited during the period as stated
Verified Outcome
- After the stated time: sign-in refused, data gone from every interface others see, emails and notifications stopped, subscriptions cancelled with the provider, sessions ended on every device, third-party processors notified, the request logged with timestamps; the policy for backups and logs stated and honoured
Export & Requests
- An export covering every data category including media, readable without internal identifiers, with a manifest, delivered securely through an authenticated, expiring link within the promised time with a notification; access, correction, objection, and consent-withdrawal paths present, acknowledged, and tracked; the app, the policy, and the store listings agreeing
Evidence rules: Confirmed requires the drive: the screenshots of each step, the deletion attempted without re-authentication, the confirmation text, the sign-in attempt after the period, the export's contents against the categories, the billing state in the provider, the emails received after deletion, the request log entry, or the policy text beside the behaviour. A gap judged from the code alone is Likely until driven and verified afterwards. Flows whose outcomes are verified are reported as such. Defer to legal counsel for which regulations apply and the retention justifications, and say which findings carry legal exposure.
Output Format
Start with a 3–5 line executive summary: flows found and driven, the worst outcome gap (sign-in or billing surviving deletion, export incomplete), identity check state, policy and store agreement, and the first fix.
Outcome table:
| Check after deletion | Expected | Observed | Evidence | Status |
|---|
Export assessment: categories present and missing, readability, delivery security and time. Flow walk with steps and screenshots. Policy comparison: app, privacy policy, store listing. Findings: each with evidence, severity (Critical for deletion possible without identity check, sign-in or billing surviving deletion, flows absent where required, exports delivered insecurely; High for incomplete exports, emails continuing, policy and app disagreeing; Medium for findability and confirmation copy; Low for polish), and fix. Positive findings. Omit any section with nothing to report.
Want this applied to a live stack?
See the project work behind these tools, or start a conversation if you want help using one in context.