⚠️ EXPERIMENTAL — This skill is provided for educational and informational purposes only. It does NOT constitute legal advice. All responsibility for usage rests with the user. Consult qualified legal professionals before acting on any output.
Privacy Notice Generator
Tools and guidance for drafting GDPR-compliant privacy notices across EU/EEA jurisdictions and audience types, with multi-layer compliance verification.
Before generating the notice, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Notice type — website, applicant, employee, b2b, b2c, or combined — selects which sections and audience-specific content appear (e.g. works council/monitoring for employee, Art. 14 source disclosure for b2b)
Jurisdiction — DE/FR/AT/IT/ES/NL/BE/IE/UK — adds local requirements (DE Widerspruchsrecht/TDDDG, FR CNIL, UK ICO) that the compliance checker scores
Legal basis per processing purpose — Art. 13(1)(c) requires a specific basis per purpose; a generic "applicable law" statement fails the check
Special features: cookies / AI / international transfers — toggle sections 6, 12, and 13 and the AI Act Art. 50 transparency disclosures
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the notice.
Tools
Privacy Notice Scaffolder
Generates a privacy notice skeleton with all required sections pre-populated with jurisdiction-specific placeholders and legal references.
# Website privacy notice for German jurisdiction
python scripts/privacy_notice_scaffolder.py \
--notice-type website \
--jurisdiction DE \
--data-categories personal,contact,usage,cookies \
--legal-bases consent,contract,legitimate_interests \
--has-cookies \
--has-international-transfers
# Employee notice for French jurisdiction with AI processing
python scripts/privacy_notice_scaffolder.py \
--notice-type employee \
--jurisdiction FR \
--data-categories personal,employment,financial,health \
--legal-bases contract,legal_obligation,consent \
--has-ai
# B2C customer notice for UK with all features
python scripts/privacy_notice_scaffolder.py \
--notice-type b2c \
--jurisdiction UK \
--data-categories personal,contact,financial,usage,marketing \
--legal-bases consent,contract,legitimate_interests \
--has-cookies --has-ai --has-international-transfers \
--json
Supported Notice Types:
Type
Audience
Key Sections
website
Website/app visitors
Cookies, analytics, tracking technologies
applicant
Job applicants
Recruitment data, talent pool, retention periods
employee
Employees
Works council, IT monitoring, BYOD, HR data
b2b
Business partners
Art. 14 requirements, source disclosure
b2c
B2C customers
Soft opt-in, payment processing, loyalty
combined
Multiple audiences
Merged sections with audience-specific callouts
Supported Jurisdictions: DE, FR, AT, IT, ES, NL, BE, IE, UK
13-Section Notice Structure:
Controller identity and contact
DPO contact details
Data categories collected
Purposes and legal bases
Recipients and categories
International transfers
Retention periods
Data subject rights
Right to withdraw consent
Right to complain to SA
Automated decision-making
Cookies and tracking (if applicable)
AI processing (if applicable)
Notice Compliance Checker
Validates a privacy notice text against Art. 13/14 GDPR requirements and generates a compliance score with missing/incomplete elements.
# Check a privacy notice file
python scripts/notice_compliance_checker.py privacy_notice.md
# Check with jurisdiction-specific requirements
python scripts/notice_compliance_checker.py privacy_notice.md --jurisdiction DE
# Check with notice type for type-specific validation
python scripts/notice_compliance_checker.py privacy_notice.md \
--jurisdiction DE --notice-type employee
# JSON output
python scripts/notice_compliance_checker.py privacy_notice.md \
--jurisdiction FR --notice-type website --json
Checks For:
Category
Elements Checked
Art. 13 Mandatory
Controller identity, DPO contact, purposes, legal bases, recipients, transfers, retention, all 8 rights, automated decisions, consent withdrawal, SA complaint
Art. 14 Additional
Source of data, categories obtained (for indirect collection)
General
Art. 21 right to object prominence, plain language, no placeholders, consistent formatting
Jurisdiction-specific
DE: Widerspruchsrecht prominence, TDDDG; FR: CNIL recommendations; UK: ICO guidance
Output:
Compliance score (0-100)
Missing elements (must-fix)
Incomplete elements (should-improve)
Jurisdiction-specific findings
Type-specific findings
Reference Guides
Notice Types Guide
references/notice_types_guide.md
Detailed guidance for 6 notice types:
Platform sub-types for website/app notices
Applicant-specific data categories and retention
Employee notice with works council and monitoring requirements
B2B Art. 14 requirements and source disclosure
B2C soft opt-in and payment processing
Combined notice merge strategies
Jurisdiction Requirements
references/jurisdiction_requirements.md
Jurisdiction-specific requirements for 9 jurisdictions:
Step 1: SCOPE — Determine notice parameters
→ Notice type (website/applicant/employee/b2b/b2c/combined)
→ Jurisdiction (DE/FR/AT/IT/ES/NL/BE/IE/UK)
→ Special features (cookies, AI, international transfers)
Step 2: INTAKE — Gather information
→ Controller identity and DPO
→ Data inventory (categories, sources)
→ Purposes and legal bases per category
→ Recipients and processors
→ Transfer destinations and mechanisms
→ Retention periods per category
→ Cookie/tracking inventory (if website)
→ AI processing details (if applicable)
Step 3: DRAFT — Generate notice skeleton
→ python scripts/privacy_notice_scaffolder.py [params]
→ Fill in placeholders with actual information from intake
→ Add jurisdiction-specific clauses
→ Apply writing style guide (you/your, short sentences, tables)
Step 4: VERIFY — Run compliance checker
→ python scripts/notice_compliance_checker.py notice.md --jurisdiction [J] --notice-type [T]
→ Address all missing elements
→ Address incomplete elements
→ Review jurisdiction-specific findings
Step 5: DELIVER — Finalize and publish
→ Legal review sign-off
→ Technical review (links, formatting, accessibility)
→ Translation QA (if multilingual)
→ Publication with version control
→ Set review trigger calendar
Workflow 2: Notice Update
Step 1: Identify trigger (new processing, regulation change, annual review)
Step 2: Run compliance checker on current notice
Step 3: Identify gaps and required updates
Step 4: Draft updated sections
Step 5: Re-verify with compliance checker
Step 6: Notify data subjects of material changes
Step 7: Update version date and change log
Workflow 3: Multi-Jurisdiction Notice
Step 1: Generate base notice for primary jurisdiction
→ python scripts/privacy_notice_scaffolder.py --jurisdiction [primary] ...
Step 2: Check jurisdiction requirements for additional territories
→ See references/jurisdiction_requirements.md
Step 3: Add jurisdiction-specific supplements
→ DE: TDDDG telecom disclosures, DSK guidance
→ FR: CNIL cookie requirements, LIL specifics
→ UK: ICO guidance, UK transfer mechanisms
Step 4: Verify each jurisdiction version
→ python scripts/notice_compliance_checker.py notice_de.md --jurisdiction DE
→ python scripts/notice_compliance_checker.py notice_fr.md --jurisdiction FR
Step 5: Publish with language/jurisdiction switcher
Troubleshooting
Problem
Possible Cause
Resolution
Low compliance score despite complete notice
Missing jurisdiction-specific requirements (e.g., DE Widerspruchsrecht prominence)
Run checker with --jurisdiction flag; review jurisdiction_requirements.md for local additions
Scaffolder generates too many sections
Combined notice type includes all audience sections
Use specific notice type instead of combined; or remove irrelevant sections post-generation
Art. 14 findings for direct collection
Checker flags Art. 14 requirements for B2B notice type
Correct — B2B often involves indirect collection; ensure source disclosure is included
Placeholder text in final notice
Template not fully populated
Search for [PLACEHOLDER] and {{variable}} markers; all must be replaced before publication
Cookie section missing from employee notice
Employee notice type does not include cookies by default
Add --has-cookies flag if employee-facing systems use cookies/tracking
AI section not generated
Missing --has-ai flag
Re-run scaffolder with --has-ai; review AI Act Art. 50 transparency requirements
Success Criteria
100% Art. 13/14 compliance score — all mandatory disclosure elements present; zero missing items
Jurisdiction-specific requirements met — compliance checker confirms local SA requirements addressed
Type-specific requirements met — notice covers all audience-specific data processing activities
No placeholder text remaining — all template variables replaced with actual information
Writing style guide followed — "you/your" voice; short sentences; tables for complex information; precise legal citations
Legal review completed — qualified privacy counsel sign-off on final notice
Publication requirements met — accessible, versioned, dated, with change notification mechanism
Scope & Limitations
In Scope:
Privacy notice skeleton generation for 6 notice types across 9 jurisdictions
Compliance checking against Art. 13/14 GDPR mandatory disclosures
Validates a privacy notice against Art. 13/14 GDPR requirements.
Flag
Required
Description
<notice_file>
Yes
Path to privacy notice file (markdown or text)
--jurisdiction <code>
No
Jurisdiction for local requirements: DE, FR, AT, IT, ES, NL, BE, IE, UK
--notice-type <type>
No
Notice type for type-specific checks: website, applicant, employee, b2b, b2c, combined
--json
No
Output in JSON format
1---2name: privacy-notice-generator3description: Draft GDPR-compliant privacy notices for EU/EEA jurisdictions. Supports 6 notice types, 9 jurisdictions, multi-layer compliance verification. Use for privacy notice drafting, compliance checking, and jurisdiction mapping.4license: MIT + Commons Clause5---6> **⚠️ EXPERIMENTAL** — This skill is provided for educational and informational purposes only. It does NOT constitute legal advice. All responsibility for usage rests with the user. Consult qualified legal professionals before acting on any output.78# Privacy Notice Generator910Tools and guidance for drafting GDPR-compliant privacy notices across EU/EEA jurisdictions and audience types, with multi-layer compliance verification.1112---1314## Table of Contents1516- [Tools](#tools)17 - [Privacy Notice Scaffolder](#privacy-notice-scaffolder)18 - [Notice Compliance Checker](#notice-compliance-checker)19- [Reference Guides](#reference-guides)20- [Workflows](#workflows)21- [Troubleshooting](#troubleshooting)22- [Success Criteria](#success-criteria)23- [Scope & Limitations](#scope--limitations)24- [Anti-Patterns](#anti-patterns)25- [Tool Reference](#tool-reference)2627---2829## Clarify First3031Before generating the notice, confirm these inputs. If any is unknown or vague, ASK — do not assume:3233- [ ] **Notice type** — website, applicant, employee, b2b, b2c, or combined — selects which sections and audience-specific content appear (e.g. works council/monitoring for employee, Art. 14 source disclosure for b2b)34- [ ] **Jurisdiction** — DE/FR/AT/IT/ES/NL/BE/IE/UK — adds local requirements (DE Widerspruchsrecht/TDDDG, FR CNIL, UK ICO) that the compliance checker scores35- [ ] **Legal basis per processing purpose** — Art. 13(1)(c) requires a specific basis per purpose; a generic "applicable law" statement fails the check36- [ ] **Special features: cookies / AI / international transfers** — toggle sections 6, 12, and 13 and the AI Act Art. 50 transparency disclosures3738Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the notice.3940## Tools4142### Privacy Notice Scaffolder4344Generates a privacy notice skeleton with all required sections pre-populated with jurisdiction-specific placeholders and legal references.4546```bash47# Website privacy notice for German jurisdiction48python scripts/privacy_notice_scaffolder.py \49 --notice-type website \50 --jurisdiction DE \51 --data-categories personal,contact,usage,cookies \52 --legal-bases consent,contract,legitimate_interests \53 --has-cookies \54 --has-international-transfers5556# Employee notice for French jurisdiction with AI processing57python scripts/privacy_notice_scaffolder.py \58 --notice-type employee \59 --jurisdiction FR \60 --data-categories personal,employment,financial,health \61 --legal-bases contract,legal_obligation,consent \62 --has-ai6364# B2C customer notice for UK with all features65python scripts/privacy_notice_scaffolder.py \66 --notice-type b2c \67 --jurisdiction UK \68 --data-categories personal,contact,financial,usage,marketing \69 --legal-bases consent,contract,legitimate_interests \70 --has-cookies --has-ai --has-international-transfers \71 --json72```7374**Supported Notice Types:**7576| Type | Audience | Key Sections |77|------|----------|-------------|78| website | Website/app visitors | Cookies, analytics, tracking technologies |79| applicant | Job applicants | Recruitment data, talent pool, retention periods |80| employee | Employees | Works council, IT monitoring, BYOD, HR data |81| b2b | Business partners | Art. 14 requirements, source disclosure |82| b2c | B2C customers | Soft opt-in, payment processing, loyalty |83| combined | Multiple audiences | Merged sections with audience-specific callouts |8485**Supported Jurisdictions:** DE, FR, AT, IT, ES, NL, BE, IE, UK8687**13-Section Notice Structure:**881. Controller identity and contact892. DPO contact details903. Data categories collected914. Purposes and legal bases925. Recipients and categories936. International transfers947. Retention periods958. Data subject rights969. Right to withdraw consent9710. Right to complain to SA9811. Automated decision-making9912. Cookies and tracking (if applicable)10013. AI processing (if applicable)101102---103104### Notice Compliance Checker105106Validates a privacy notice text against Art. 13/14 GDPR requirements and generates a compliance score with missing/incomplete elements.107108```bash109# Check a privacy notice file110python scripts/notice_compliance_checker.py privacy_notice.md111112# Check with jurisdiction-specific requirements113python scripts/notice_compliance_checker.py privacy_notice.md --jurisdiction DE114115# Check with notice type for type-specific validation116python scripts/notice_compliance_checker.py privacy_notice.md \117 --jurisdiction DE --notice-type employee118119# JSON output120python scripts/notice_compliance_checker.py privacy_notice.md \121 --jurisdiction FR --notice-type website --json122```123124**Checks For:**125126| Category | Elements Checked |127|----------|-----------------|128| Art. 13 Mandatory | Controller identity, DPO contact, purposes, legal bases, recipients, transfers, retention, all 8 rights, automated decisions, consent withdrawal, SA complaint |129| Art. 14 Additional | Source of data, categories obtained (for indirect collection) |130| General | Art. 21 right to object prominence, plain language, no placeholders, consistent formatting |131| Jurisdiction-specific | DE: Widerspruchsrecht prominence, TDDDG; FR: CNIL recommendations; UK: ICO guidance |132133**Output:**134- Compliance score (0-100)135- Missing elements (must-fix)136- Incomplete elements (should-improve)137- Jurisdiction-specific findings138- Type-specific findings139140---141142## Reference Guides143144### Notice Types Guide145`references/notice_types_guide.md`146147Detailed guidance for 6 notice types:148- Platform sub-types for website/app notices149- Applicant-specific data categories and retention150- Employee notice with works council and monitoring requirements151- B2B Art. 14 requirements and source disclosure152- B2C soft opt-in and payment processing153- Combined notice merge strategies154155### Jurisdiction Requirements156`references/jurisdiction_requirements.md`157158Jurisdiction-specific requirements for 9 jurisdictions:159- SA details and registration requirements160- Requirements beyond GDPR baseline161- Standard wording recommendations162- Retention guidance per jurisdiction163164### Compliance Verification165`references/compliance_verification.md`1661675-layer verification system:168- Jurisdiction-specific checks169- Art. 13/14 mandatory disclosures170- General compliance checks171- Type-specific checks172- AI Act compliance173- Post-generation checklist174- Writing style guide175176---177178## Workflows179180### Workflow 1: SCOPE → INTAKE → DRAFT → VERIFY → DELIVER181182```183Step 1: SCOPE — Determine notice parameters184 → Notice type (website/applicant/employee/b2b/b2c/combined)185 → Jurisdiction (DE/FR/AT/IT/ES/NL/BE/IE/UK)186 → Special features (cookies, AI, international transfers)187188Step 2: INTAKE — Gather information189 → Controller identity and DPO190 → Data inventory (categories, sources)191 → Purposes and legal bases per category192 → Recipients and processors193 → Transfer destinations and mechanisms194 → Retention periods per category195 → Cookie/tracking inventory (if website)196 → AI processing details (if applicable)197198Step 3: DRAFT — Generate notice skeleton199 → python scripts/privacy_notice_scaffolder.py [params]200 → Fill in placeholders with actual information from intake201 → Add jurisdiction-specific clauses202 → Apply writing style guide (you/your, short sentences, tables)203204Step 4: VERIFY — Run compliance checker205 → python scripts/notice_compliance_checker.py notice.md --jurisdiction [J] --notice-type [T]206 → Address all missing elements207 → Address incomplete elements208 → Review jurisdiction-specific findings209210Step 5: DELIVER — Finalize and publish211 → Legal review sign-off212 → Technical review (links, formatting, accessibility)213 → Translation QA (if multilingual)214 → Publication with version control215 → Set review trigger calendar216```217218### Workflow 2: Notice Update219220```221Step 1: Identify trigger (new processing, regulation change, annual review)222Step 2: Run compliance checker on current notice223Step 3: Identify gaps and required updates224Step 4: Draft updated sections225Step 5: Re-verify with compliance checker226Step 6: Notify data subjects of material changes227Step 7: Update version date and change log228```229230### Workflow 3: Multi-Jurisdiction Notice231232```233Step 1: Generate base notice for primary jurisdiction234 → python scripts/privacy_notice_scaffolder.py --jurisdiction [primary] ...235Step 2: Check jurisdiction requirements for additional territories236 → See references/jurisdiction_requirements.md237Step 3: Add jurisdiction-specific supplements238 → DE: TDDDG telecom disclosures, DSK guidance239 → FR: CNIL cookie requirements, LIL specifics240 → UK: ICO guidance, UK transfer mechanisms241Step 4: Verify each jurisdiction version242 → python scripts/notice_compliance_checker.py notice_de.md --jurisdiction DE243 → python scripts/notice_compliance_checker.py notice_fr.md --jurisdiction FR244Step 5: Publish with language/jurisdiction switcher245```246247---248249## Troubleshooting250251| Problem | Possible Cause | Resolution |252|---------|---------------|------------|253| Low compliance score despite complete notice | Missing jurisdiction-specific requirements (e.g., DE Widerspruchsrecht prominence) | Run checker with --jurisdiction flag; review jurisdiction_requirements.md for local additions |254| Scaffolder generates too many sections | Combined notice type includes all audience sections | Use specific notice type instead of combined; or remove irrelevant sections post-generation |255| Art. 14 findings for direct collection | Checker flags Art. 14 requirements for B2B notice type | Correct — B2B often involves indirect collection; ensure source disclosure is included |256| Placeholder text in final notice | Template not fully populated | Search for `[PLACEHOLDER]` and `{{variable}}` markers; all must be replaced before publication |257| Cookie section missing from employee notice | Employee notice type does not include cookies by default | Add --has-cookies flag if employee-facing systems use cookies/tracking |258| AI section not generated | Missing --has-ai flag | Re-run scaffolder with --has-ai; review AI Act Art. 50 transparency requirements |259260---261262## Success Criteria263264- **100% Art. 13/14 compliance score** — all mandatory disclosure elements present; zero missing items265- **Jurisdiction-specific requirements met** — compliance checker confirms local SA requirements addressed266- **Type-specific requirements met** — notice covers all audience-specific data processing activities267- **No placeholder text remaining** — all template variables replaced with actual information268- **Writing style guide followed** — "you/your" voice; short sentences; tables for complex information; precise legal citations269- **Legal review completed** — qualified privacy counsel sign-off on final notice270- **Publication requirements met** — accessible, versioned, dated, with change notification mechanism271272---273274## Scope & Limitations275276**In Scope:**277- Privacy notice skeleton generation for 6 notice types across 9 jurisdictions278- Compliance checking against Art. 13/14 GDPR mandatory disclosures279- Jurisdiction-specific requirement validation (DE, FR, AT, IT, ES, NL, BE, IE, UK)280- Notice type-specific section generation and validation281- AI Act Art. 50 transparency disclosure sections282- Cookie and tracking technology disclosure sections283- Writing style and plain language guidance284285**Out of Scope:**286- Legal advice on specific legal basis selection — consult qualified privacy counsel287- Translation services — tool generates English templates; professional translation required288- Cookie consent implementation or CMP configuration289- DPIA generation (see `dpia-assessment` skill)290- Privacy notice hosting or publication infrastructure291- Non-GDPR privacy notice formats (CCPA notice at collection, LGPD notices)292- Sector-specific notices (healthcare, financial services, children's services)293294---295296## Anti-Patterns297298| Anti-Pattern | Why It Fails | Better Approach |299|-------------|-------------|-----------------|300| **Copy-paste from another company** | Different processing activities, jurisdictions, and legal bases; exposes liability gaps | Generate skeleton from actual parameters; fill with organization-specific information |301| **One notice for all jurisdictions** | Misses jurisdiction-specific requirements (DE TDDDG, FR CNIL, UK ICO); SA enforcement | Generate jurisdiction-specific versions or supplements using scaffolder per jurisdiction |302| **Generic legal bases** ("we process your data based on applicable law") | Art. 13(1)(c) requires specific legal basis per purpose; generic statement is non-compliant | Map each processing purpose to specific Art. 6(1) basis; document in purpose-basis table |303| **Set and forget** | Processing activities change; regulations evolve; notices become inaccurate | Set review triggers (see compliance_verification.md); run compliance checker quarterly |304| **Overly legalistic language** | Recital 58 requires clear and plain language; complex legal jargon is non-compliant | Follow writing style guide: "you/your" voice, short sentences, tables, examples |305306---307308## Tool Reference309310### privacy_notice_scaffolder.py311312Generates a privacy notice skeleton based on notice type, jurisdiction, and processing parameters.313314| Flag | Required | Description |315|------|----------|-------------|316| `--notice-type <type>` | Yes | Notice type: website, applicant, employee, b2b, b2c, combined |317| `--jurisdiction <code>` | Yes | Jurisdiction: DE, FR, AT, IT, ES, NL, BE, IE, UK |318| `--data-categories <list>` | Yes | Comma-separated: personal, contact, usage, cookies, financial, health, employment, marketing, biometric |319| `--legal-bases <list>` | Yes | Comma-separated: consent, contract, legal_obligation, legitimate_interests, vital_interests, public_task |320| `--has-cookies` | No | Include cookies and tracking section |321| `--has-ai` | No | Include AI and automated processing section |322| `--has-international-transfers` | No | Include international transfers section |323| `--json` | No | Output in JSON format |324325### notice_compliance_checker.py326327Validates a privacy notice against Art. 13/14 GDPR requirements.328329| Flag | Required | Description |330|------|----------|-------------|331| `<notice_file>` | Yes | Path to privacy notice file (markdown or text) |332| `--jurisdiction <code>` | No | Jurisdiction for local requirements: DE, FR, AT, IT, ES, NL, BE, IE, UK |333| `--notice-type <type>` | No | Notice type for type-specific checks: website, applicant, employee, b2b, b2c, combined |334| `--json` | No | Output in JSON format |
Run npx skillmds@latest add borghei/privacy-notice-generator in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Draft GDPR-compliant privacy notices for EU/EEA jurisdictions. Supports 6 notice types, 9 jurisdictions, multi-layer compliance verification. Use for privacy notice drafting, compliance checking, and jurisdiction mapping. It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free. This skill is licensed under MIT + Commons Clause.
borghei (@borghei) published this skill. Their other Agent Skills are listed on their SkillMD profile.