Tilbake til bloggen
Compliance

GDPR Fines in 2025: The 12 Biggest Cases and What They Teach Us

Thomas Mueller, Legal AnalystNovember 27, 202520 min lesing
GDPRFinesEnforcementLegal

TLDR: Meta's €1.2B fine was just the warm-up. In 2025, regulators hunt "consent theater"—banners that look compliant but manipulate users. Your dark patterns are the target.

Read full summary Analysis of the major GDPR precedents (Meta, TikTok, Amazon) that shaped the 2025 enforcement landscape. Regulators are now focusing on "consent theater"—implementations that technically exist but manipulate users. Includes TypeScript tools for detecting dark patterns and assessing compliance risk. *Summary by Claude AI*
## €4.3 Billion and Counting In May 2023, Ireland's Data Protection Commission fined Meta €1.2 billion—the largest GDPR penalty ever issued. For transferring EU user data to the United States without adequate protections. Three months earlier, TikTok paid €345 million for making children's accounts public by default and using dark patterns to discourage privacy settings. The same week, €40 million went to Criteo because they couldn't prove their advertising partners had valid consent. The total GDPR fines since 2018 now exceed €4.3 billion. But here's what most analyses miss: the big fines aren't the story anymore. The story is what regulators do *after* establishing precedent. And in 2025, they're doing something different. They're not just checking whether you have a cookie banner. They're measuring how many pixels your "Reject" button is from your "Accept" button. They're counting clicks. They're timing how long rejection takes versus acceptance. They call it "consent theater"—and they're shutting it down. ## The Shift From Fines to Forensics The massive Meta and Amazon fines served their purpose: they established that GDPR has teeth, even against the largest companies on Earth. No one doubts enforcement is real anymore. Now regulators are moving from headline enforcement to systematic enforcement. They're not waiting for billion-dollar violations. They're investigating the mundane manipulations that affect billions of users: the slightly larger "Accept" button, the gray text that says "Reject," the five-click path to refuse versus the one-click path to consent. ## The Major Precedents That Defined 2025 Compliance To understand the current risk profile, we must look at the landmark cases that established the rules we now operate under. ### 1. Meta Platforms - The Cross-Border Benchmark **Fine:** €1.2 Billion (May 2023) **Key Lesson:** **Data Sovereignty is Non-Negotiable** The Irish DPC's record-breaking fine against Meta for transferring EU user data to the US established that "standard contractual clauses" (SCCs) are not a magic shield. For 2025, this means any CMP or analytics tool sending data to non-adequate jurisdictions must have rigorous Transfer Impact Assessments (TIAs) and supplementary measures. ### 2. TikTok - The Children's Privacy Standard **Fine:** €345 Million (September 2023) **Key Lesson:** **Age-Appropriate Design by Default** TikTok was fined for making child accounts public by default and using "dark patterns" to nudge users toward less privacy. In 2025, this precedent requires that all consent interfaces for younger audiences must be "high-privacy by default" and clearly understandable. ### 3. Amazon EU - The "Dark Pattern" Definition **Fine:** €746 Million (July 2021) **Key Lesson:** **Frictionless Refusal** While earlier, this fine (and subsequent actions like the €35M fine against Amazon France) cemented the principle that **rejecting cookies must be as easy as accepting them**. This "equal prominence" rule is the #1 compliance check for 2025. ### 4. Criteo - The Joint Controller Reality **Fine:** €40 Million (June 2023) **Key Lesson:** **You Are Responsible for Your Partners** CNIL fined Criteo because it couldn't prove that the consent collected by its *partners* was valid. This effectively killed the "it's the publisher's fault" defense. In 2025, AdTech vendors and the sites using them are jointly liable for the validity of the consent chain. ## 2025 Enforcement Trends: "Consent Theater" Regulators have moved beyond checking whether consent banners exist to evaluating whether they enable genuine choice. The current enforcement targets include: **Visual Manipulation:** - Accept buttons larger, more colorful, or more prominent. - Reject options hidden in "Settings" or "Manage Preferences". - Close (X) button that accepts rather than rejects. **Friction Tactics:** - Multiple screens required to reject vs. one click to accept. - Confusing toggle states (is "on" accepting or rejecting?). - Unclear language about what each option does. **Technical Deception:** - Cookies set before consent. - "Necessary" cookies that are actually for tracking. - Third-party scripts that ignore consent signals. ## Automated Compliance Tools Here's a TypeScript implementation to detect "Consent Theater" patterns and assess your risk, based on 2025 regulatory standards. ```typescript interface ConsentBannerAnalysis { hasVisualManipulation: boolean; hasFrictionTactics: boolean; hasTechnicalDeception: boolean; violations: ViolationDetail[]; riskScore: number; recommendedFixes: string[]; } interface ViolationDetail { type: 'visual' | 'friction' | 'technical'; severity: 'critical' | 'high' | 'medium' | 'low'; description: string; regulatoryReference: string; evidence: string; } interface BannerElement { type: 'accept' | 'reject' | 'settings' | 'close'; visible: boolean; clicksRequired: number; dimensions: { width: number; height: number }; position: { x: number; y: number }; color: string; fontSize: number; text: string; } class ConsentTheaterDetector { private violations: ViolationDetail[] = []; async analyzeBanner(bannerElements: BannerElement[]): Promise { this.violations = []; const visualManipulation = this.checkVisualManipulation(bannerElements); const frictionTactics = this.checkFrictionTactics(bannerElements); const technicalDeception = await this.checkTechnicalDeception(); const riskScore = this.calculateRiskScore(); const recommendedFixes = this.generateRecommendations(); return { hasVisualManipulation: visualManipulation, hasFrictionTactics: frictionTactics, hasTechnicalDeception: technicalDeception, violations: this.violations, riskScore, recommendedFixes }; } private checkVisualManipulation(elements: BannerElement[]): boolean { const accept = elements.find(e => e.type === 'accept'); const reject = elements.find(e => e.type === 'reject'); if (!accept || !reject) { if (!reject) { this.violations.push({ type: 'visual', severity: 'critical', description: 'No reject button visible on first layer', regulatoryReference: 'CNIL Guidelines on Cookies and Trackers, Section 2.1', evidence: 'Banner elements lack reject type on first layer' }); } return true; } // Check button size disparity const acceptArea = accept.dimensions.width * accept.dimensions.height; const rejectArea = reject.dimensions.width * reject.dimensions.height; if (acceptArea > rejectArea * 1.5) { this.violations.push({ type: 'visual', severity: 'high', description: `Accept button ${Math.round(acceptArea / rejectArea)}x larger than reject button`, regulatoryReference: 'EDPB Guidelines 05/2020, Paragraph 86', evidence: `Accept: ${accept.dimensions.width}x${accept.dimensions.height}, Reject: ${reject.dimensions.width}x${reject.dimensions.height}` }); return true; } // Check color contrast manipulation if (this.isHighContrastColor(accept.color) && !this.isHighContrastColor(reject.color)) { this.violations.push({ type: 'visual', severity: 'high', description: 'Accept button more visually prominent through color contrast', regulatoryReference: 'DSA Article 25(1)', evidence: `Accept: ${accept.color} (high contrast), Reject: ${reject.color} (low contrast)` }); return true; } return false; } private checkFrictionTactics(elements: BannerElement[]): boolean { const accept = elements.find(e => e.type === 'accept'); const reject = elements.find(e => e.type === 'reject'); const settings = elements.find(e => e.type === 'settings'); if (!accept) return false; // Check click disparity const acceptClicks = accept.clicksRequired; const rejectClicks = reject?.clicksRequired || (settings?.clicksRequired || 0) + 1; if (rejectClicks > acceptClicks) { this.violations.push({ type: 'friction', severity: 'critical', description: `Rejecting requires ${rejectClicks} clicks vs ${acceptClicks} to accept`, regulatoryReference: 'CNIL Decision SAN-2022-009', evidence: `Accept path: ${acceptClicks} click(s), Reject path: ${rejectClicks} click(s)` }); return true; } return false; } private async checkTechnicalDeception(): Promise { // In real implementation, this would check actual cookie behavior // Simulated findings for example purposes: const checks = { cookiesBeforeConsent: false, rejectionActuallyWorks: true }; if (checks.cookiesBeforeConsent) { this.violations.push({ type: 'technical', severity: 'critical', description: 'Marketing cookies set before user consent', regulatoryReference: 'ePrivacy Directive Article 5(3)', evidence: 'Cookie _fbp detected before banner interaction' }); return true; } return false; } private isHighContrastColor(color: string): boolean { // Simplified check const brightColors = ['#ff', '#00ff', '#0000ff', '#ffff00', '#ff00ff', '#00ffff']; const colorLower = color.toLowerCase(); return brightColors.some(c => colorLower.includes(c)); } private calculateRiskScore(): number { let score = 0; for (const violation of this.violations) { switch (violation.severity) { case 'critical': score += 40; break; case 'high': score += 25; break; case 'medium': score += 15; break; case 'low': score += 5; break; } } return Math.min(100, score); } private generateRecommendations(): string[] { const recommendations: string[] = []; const violationTypes = new Set(this.violations.map(v => v.type)); if (violationTypes.has('visual')) { recommendations.push('Ensure accept and reject buttons have equal visual prominence (same size, contrast, and styling)'); } if (violationTypes.has('friction')) { recommendations.push('Reduce clicks to reject to match clicks to accept (typically one click each)'); } return recommendations; } } ``` ## Lessons for Your Compliance Program ### 1. Equal Prominence is Non-Negotiable The "Accept" and "Reject" buttons must be presented with equal weight. No smaller fonts, no greyed-out colors for rejection. This is the most visible signal of compliance to any regulator visiting your site. ### 2. Documentation is Your Defense Fined companies often fail because they lack documentation. You must be able to prove *when* consent was collected, *what* version of the banner was shown, and *how* the user interacted with it. ### 3. Regular Audits Are Essential Implement continuous monitoring. Implementations drift. A site that was compliant in January might not be in June after a marketing team updates the tag manager container. ## Risk Assessment Framework Evaluate your organization's risk profile: | Factor | Low Risk | Medium Risk | High Risk | |--------|----------|-------------|-----------| | EU Traffic | <100k visitors/month | 100k-1M visitors/month | >1M visitors/month | | Data Types | Basic analytics | Behavioral profiling | Sensitive data | | Consent Rate | Reject rate >30% | Reject rate 15-30% | Reject rate <15% | **The Bottom Line:** In 2025, privacy compliance isn't about avoiding fines—it's about building trust. The cost of compliance is measured in thousands; the cost of lost trust (and enforcement) is measured in millions.

Vanlige spørsmål

Why was Amazon fined for cookie consent?
Amazon was fined for using "dark patterns" in their cookie banner. Specifically, they made it significantly harder for users to reject cookies than to accept them, which violates the GDPR principle of fair and transparent processing.
What is "Consent Theater"?
"Consent Theater" refers to cookie banners that look compliant on the surface but use manipulative design (dark patterns) to coerce users into accepting tracking, such as hiding the "Reject" button.
T

Thomas Mueller, Legal Analyst

Skribent hos GetCookies, spesialisert på personvernsamsvar, samtykkeadministrasjon og optimalisering av digital markedsføring.

Klar til å forenkle informasjonskapselsamtykke?

GetCookies gjør GDPR, CCPA og globalt personvernsamsvar uanstrengt. Kom i gang i dag.