Data export generates complete machine-readable archive within 72 hours
Why it matters
GDPR Art. 20 (data portability) and CCPA §1798.100 both require that users receive a complete, machine-readable copy of their data upon request, within defined timeframes. An export that omits message history, follower lists, or activity logs is a partial response that fails compliance. Regulators specifically audit export completeness — the ICO and CNIL have both taken enforcement action against platforms that provided incomplete or unprocessable archives. Beyond compliance, denying users access to their own data creates lock-in and erodes trust.
Severity rationale
High because incomplete or missing data export is a direct violation of GDPR Art. 20 and CCPA §1798.100, with documented regulatory enforcement history.
Remediation
Build a background job that assembles all user data categories — profile, posts, comments, messages (participant's side only), followers, following, settings, activity logs — into a JSON or ZIP archive, then stores a signed download URL and notifies the user by email. Track export jobs in a data_export_jobs table to enforce the 72-hour SLA.
// src/jobs/generateDataExport.ts
async function generateDataExport(jobId: string) {
const job = await db.dataExportJob.findUnique({ where: { id: jobId } });
const [profile, posts, messages, followers] = await Promise.all([
db.user.findUnique({ where: { id: job.userId } }),
db.post.findMany({ where: { authorId: job.userId } }),
db.message.findMany({ where: { OR: [{ senderId: job.userId }, { recipientId: job.userId }] } }),
db.follow.findMany({ where: { followingId: job.userId } }),
]);
const archive = { profile, posts, messages, followers, exportedAt: new Date().toISOString() };
const zipPath = await createZip(archive);
await db.dataExportJob.update({
where: { id: jobId },
data: { status: 'completed', completedAt: new Date(), downloadUrl: generateSignedUrl(zipPath) }
});
}
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Community Privacy & Controls Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- gdpr · Art. 20 — Right to data portability
- ccpa · §1798.100 — Right to know about personal information collected
- nist:rev5 · SI-12 — Information Management and Retention
- iso-27001:2022 · A.8.10 — Information deletion
Taxons
History
- 2026-04-18·v1.0.0·Initial import from community-privacy-controls·automated