Drupal for GDPR consent and data subject requests

Drupal can record consent, support cookie consent, and run export and erasure workflows, but it cannot decide your lawful basis or prove consent for you. This page maps the GDPR articles to Drupal configuration, evidence and remaining gaps.

On this page

Which GDPR requirements Drupal helps you meet, and which it does not

A controller running a Drupal site that collects personal data from EU or EEA users can use Drupal to support several GDPR duties: recording consent under Article 7, making withdrawal as easy as giving consent, answering access requests under Article 15, carrying out erasure under Article 17, and applying data protection by design under Article 25. Drupal does not make those duties true on its own. The lawful basis, the wording of consent statements, the retention rules and the decision on what to collect stay with the organization, and so does the job of proving to a supervisory authority that the workflow works. DeployOpen prepares systems, controls and evidence for that assessment, but it does not issue audit reports, attestations or certificates. The GDPR requires no certificate, and Article 42 certification is voluntary and does not reduce the controller's responsibility.

Start by mapping each duty to a component you will build or configure. Consent records need the consent text shown at the time, the timestamp, the version of the notice and the workflow, because the EDPB's Guidelines 05/2020 say that pointing to a correctly configured website is not enough. Data subject requests need a defined intake, identity verification, a request log and a deadline owner. Ask whether the GDPR contributed module, which handles data export and erasure requests, is still the right option for your Drupal version, and confirm its supported versions on its Drupal.org project page before you plan around it. Also confirm that every contributed module in the request path is maintained, since erasure must reach user accounts, Webform submissions, files and any connected CRM.

Some obligations sit outside the Drupal codebase entirely. Decisions about where data is hosted and who can access it from outside the EEA fall under Chapter V, including remote support sessions that display personal data, so your hosting and support contracts matter as much as the site configuration. Breach notification under Articles 33 and 34 depends on logging and an incident process your team runs. Cookie walls that block access until a visitor accepts tracking are a design decision the EDPB treats as incompatible with freely given consent, so the consent banner design needs legal review. Confirm each of these with your data protection officer or counsel before the build begins.

Mapping GDPR articles to Drupal capabilities and configuration

This table maps the GDPR provisions that shape consent, data subject requests and development data to the Drupal capabilities, settings and records that support them. Read each row as a starting point for a design review, and confirm module features on Drupal.org before relying on them, since a contributed module may cover part of a requirement and not all of it.

GDPR requirementDrupal capabilityConfiguration to set upEvidence to keep
Article 7(1): the controller must be able to demonstrate that the data subject consentedConsent records stored as data on the user or submission, via a consent or preference module or custom entity (confirm the chosen module's features)Store the consent statement version, timestamp, method, and the user or anonymous identifier; avoid storing only a checkbox valueExported consent log, versioned copies of the consent text shown at each point, and the workflow screenshots or configuration export
Article 7(3): withdrawal at any time, as easy as giving consent, and disclosed before consent is givenPreference center or unsubscribe form reachable from the account page and from the consent bannerGive the withdraw action the same number of steps as accept; state the right to withdraw in the notice shown before the choiceTest script showing the click path for both actions and a dated record of each withdrawal
Article 7 and EDPB Guidelines 05/2020: cookie walls make consent not freely givenCookie consent banner with per-service choices for embedded scripts and iframesDo not block core content behind acceptance; load third-party tags only after the matching choice is recordedTag inventory per consent category and a browser test with the tag manager set to reject
Article 15(1): confirmation of processing, access to data, and information on purposes, recipients, retention and sourceData export of user and submission data through the GDPR module or a custom export (confirm features and any gaps with the chosen module)Map each stored field to a purpose and retention period; configure the export to include recipients and source fieldsAnonymized sample export, field-to-purpose register, and the request log with response dates
Article 17(1): erasure without undue delay on six listed groundsErasure workflow that deletes or anonymizes accounts, submissions and files across entitiesDefine which ground applies to each request type; confirm that cached pages, file derivatives, search indexes and backups are included in the processErasure ticket with the ground recorded, deletion log, and a documented backup retention statement
Article 25(1): data protection by design and by default, including pseudonymisation and minimisationSanitized database dumps and masked fields for developer and test environmentsReplace names, emails and free-text fields with generated values; disable outbound mail and third-party services in non-production buildsSanitization script in version control, a checklist run before each copy, and access rules for the non-production site
Article 32 and transfers (Chapter V): where data is stored and who can access itHosting location, backup location and support access for the Drupal stack and any contributed serviceConfirm hosting region for the database, file storage and mail relay; record remote support access from outside the EEA as a transfer to assessSubprocessor list, data location statement and transfer assessment on file
Demonstrating compliance overall: no audit or certificate is required by the GDPRConfiguration export and update records through Composer and GitKeep configuration in version control and log module updates with the security advisories reviewedChange history, advisory review log and the internal record of processing

Configuring consent, access and erasure workflows in sequence

This sequence turns the site's personal data map into working consent capture, cookie controls, request handling and erasure rules, with evidence produced at each stage. The order matters because each step depends on the data inventory and purposes defined before it.

  1. Inventory personal data fields and processing purposes

    Start by listing every place the Drupal site collects or stores personal data: user accounts, profile fields, Webform submissions, comments, newsletter sign-ups, CRM and analytics integrations, and logs. For each field, record its purpose, the systems it flows to, who can see it and where it is kept. A developer and a content owner should review the list together, because editors often add fields that the code review never sees. The step is done when the data map covers every entity, form and third-party script on the site and has been signed off by the business owner.

  2. Set the lawful basis for each purpose

    For each purpose in the data map, the controller decides the lawful basis under the GDPR, such as consent, contract, legal obligation or legitimate interest. Consent is only one basis, so the site should not ask for consent where another basis applies or where the basis is unclear. Legal or privacy counsel should confirm these decisions, since Drupal cannot make them. The output is a register that pairs each purpose with its basis, and the consent steps that follow apply only to purposes that rely on consent.

  3. Configure consent capture and versioned statements

    Build consent capture only for purposes that rely on consent, with an unticked choice, a plain statement of the purpose and a visible way to withdraw. Tell the person before they consent that they can withdraw at any time and that withdrawal is as easy as giving consent. Store each consent statement as a versioned text, and record the user or visitor identifier, the time, the version shown and the form or workflow used. The EDPB notes that a reference to a correctly configured website is not enough, so the record itself is the evidence. Test by submitting consent, changing the statement version and confirming that older records still point to the text that was shown.

  4. Configure cookie consent and script blocking

    Set up a cookie consent solution that stops embedded services, such as analytics, video players, maps and advertising tags, from loading or setting cookies until the visitor agrees to the relevant category. Do not make access to the site conditional on accepting non-essential cookies, because the EDPB treats such cookie walls as making consent not freely given. Confirm the module's blocking behavior on Drupal.org for each embedded service, and test with a clean browser profile that no blocked script runs before consent. Keep a log of consent choices, and check that the withdrawal control reopens the choice and removes or stops the related scripts.

  5. Set up export and erasure request handling

    Install and configure the GDPR module, then confirm its current features, supported Drupal versions and any limits on the Drupal.org project page before relying on it. Map its export and deletion handling to the data fields in the inventory, and check which entities it covers, such as user accounts, Webform submissions or custom entities. Where a module does not cover a system, such as the CRM or email platform, document a manual procedure with an owner. Configure a verified request intake so that the requester's identity is confirmed before any export or deletion runs. The step is complete when a test request produces an export of the expected data and an erasure that is recorded in the request log.

  6. Define retention and erasure exceptions

    Erasure is required on the grounds listed in Article 17(1), but it does not apply in every case, and the site may need to keep some records for a legal obligation or other lawful reason. Write a retention schedule for each data category that states how long it is kept, what triggers deletion and which exceptions apply. Ask counsel to confirm the periods, since the researched facts do not set retention times. Configure the site to follow the schedule where it can, and document the manual steps where it cannot. The output is a retention table linked to the data map, with a named owner for each exception.

  7. Test withdrawal and request flows end to end

    Run the full set of scenarios in a staging copy of the site: consent given, consent withdrawn, cookie choice changed, access request received, export delivered, erasure requested and erasure completed across connected systems. Check the logs at each step, confirm that withdrawal is no harder than giving consent, and verify that a deleted record is not restored by a later sync, backup restore or cron job. Save the test results, screenshots and log extracts as evidence. Repeat the tests after each Drupal or module update, because a change in a contributed module can break consent or export behavior without warning.

Answering access and erasure requests within the Article 15 and 17 duties

Article 15(1) asks for much more than a data export. A controller must confirm whether personal data is processed and, if so, provide access to the data plus information on purposes, categories of data, recipients (in particular recipients in third countries), retention periods, the data subject's rights, the source of the data and any automated decision-making. A user export generated by the GDPR module covers the stored field values and, depending on configuration, submissions and account records. It does not, by itself, state why each field is kept, who received it, how long it is retained or where it came from. Those answers come from your records of processing and your CRM, mailing and analytics configuration. Confirm with your Drupal team which entities, Webform submissions, user fields and file uploads the export includes, and document the supplementary answers in a standard response template.

Article 17(1) lists six grounds for erasure without undue delay: data no longer necessary for its purpose, consent withdrawn, a successful objection, unlawful processing, a legal obligation to erase, and data collected from children for information society services. Each ground needs a matching trigger in your workflow, so the request record shows which ground applied. Erasure in Drupal removes the entity from the live database, but copies persist elsewhere. Plan for backups with a defined retention cycle, logs that record personal data, search indexes such as Solr or OpenSearch, caches, CRM and mailing list copies, and recipients who received the data. Drupal and contributed modules can reach the live site and, with suitable integrations, connected systems. They generally cannot reach backup archives or third-party copies. Confirm with the module maintainers and your own tests what each deletion path removes, and record any residual copies with their retention end dates.

Evidence a controller can show, and how to keep it

A controller must be able to demonstrate consent and show how it answered access and erasure requests. The cards below describe the records a Drupal site should produce as it runs, and the checks that keep them complete. Retention periods are a decision for your legal and compliance team, so each card says what to confirm rather than setting a period.

Consent records with statement versions

Store each consent event with the user or anonymous identifier, the purpose, the exact statement text and its version, the timestamp, and the method used to collect consent. Keep the consent workflow itself under review, because the EDPB expects evidence of the information shown at the time, not a reference to the current site configuration. Check that withdrawals are logged with the same fields so a later reader can reconstruct the state at any date. Ask your counsel how long consent records must be kept after withdrawal.

Cookie consent configuration exports

Export the cookie consent configuration on every release so you can show which services were categorized as necessary, preference, analytics or marketing at a given time. Include the list of embedded services, the script loading rules, and any cookie-wall behavior, which the EDPB treats as making consent not freely given. Compare each export with the live site during audits to confirm that tags did not load before consent. Decide with your team who signs off changes to this file.

Request logs with response dates

Log every access, export and erasure request with the date received, the identity verification outcome, the request type and the date of response. These logs show that requests were handled without undue delay, which is the test Article 12 and Article 17 set. Keep the log outside the content workflow so editors cannot alter it, and restrict who can read it because it contains personal data. Confirm with your privacy office how long these logs must be retained.

Erasure and export run records

For each export or erasure run, record which accounts and data sets were included, the entities and fields affected, the module versions used, the operator, and the outcome. Keep the export file hash and the deletion summary so you can prove what left the site. Note any data held in backups, logs or third-party services that the run could not reach, since these gaps must be explained in your records. Check the run record after every test in staging before the procedure is used on production data.

Configuration under version control

Keep the exported site configuration in Git so every change to consent settings, privacy-related modules and roles has an author, a reason and a review. The commit history becomes your change log for the period under review. Tag releases that reach production and link each tag to the matching ticket. Make sure content data is not stored in the repository, because configuration changes and personal data should be governed separately.

Minimised and pseudonymised development dumps

Record the rules used to produce each developer database: which tables were removed, which fields were replaced with pseudonyms, and which were dropped entirely. Article 25 expects data minimisation designed into processing, so a dump should not carry live personal data to developer laptops by default. Keep the script, its version and a sample verification report with each dump. Confirm with your team whether dumps are ever allowed out of the production environment and who approves an exception.

How to sanitize database dumps for developers

Can developers work from a copy of the production Drupal database?

Only after the copy has been sanitized, and the safer default is that developers never receive a raw production dump at all. Article 25(1) asks the controller to apply data protection principles such as data minimisation and pseudonymisation when deciding how processing is done and while it runs, taking into account the state of the art and the cost of implementation. A development environment is still processing, so a copy that contains real names, emails, addresses or form submissions is personal data sitting in a less controlled place. Treat the sanitized copy as the only dev data that leaves production, and document that decision as part of your processing records.

Which Drupal fields should be masked or pseudonymised in a dev dump?

Mask any field that identifies a person directly or allows indirect identification when combined with other data. In a typical Drupal site this covers the users_field_data mail and name columns, user profile fields, addresses, phone numbers, IP and session records in sessions and watchdog, comment authors, and any custom entity holding personal details. Replace values with consistent pseudonyms so relationships still work for testing, and reset every password hash. Ask your team to inventory fields with a data classification pass before the first dump, because contributed modules and custom fields are where most missed personal data is found.

How should Webform submissions and user emails be handled in dev copies?

Webform submission tables usually hold the most sensitive free text on a site, so they should be truncated or excluded from the dev dump rather than masked field by field. If developers need realistic submission volumes, generate synthetic rows with the same structure. For user emails, rewrite every address to a non-routable or internal domain such as an address you control, and disable outbound mail in the dev environment so queued messages never reach a real recipient. Check that mail, Webform handler settings and integrations pointing to a CRM or email service do not still hold live credentials or endpoints.

Where must production database dumps never be stored or sent?

Raw production dumps should stay in the production trust boundary, meaning the storage, backup and access controls your organization already uses for live data. They must never be placed on developer laptops, shared drives, public CI artifacts, chat attachments or object storage buckets without matching access controls. If a dump or a sanitized copy is ever moved to a cloud or provider outside the EEA, it becomes a transfer under Chapter V, and EDPB Guidelines 05/2021 treat remote access from a third country, even only displaying data on a screen, as a transfer. Write these rules into the runbook, and confirm with your legal team where your dev hosting actually sits.

How do you verify a sanitized Drupal database before developers receive it?

Verification should be a scripted check that runs after sanitization and blocks release if it fails. Typical checks include searching all text columns for email patterns, phone patterns and known production domains, confirming that no user row retains an original password hash, and confirming that the Webform and watchdog tables are empty or truncated as designed. Compare row counts against the production schema so referential integrity is preserved, and record the result with the dump's identifier. Have a second person review the sanitization rules when they change, and keep the report as evidence that the control operated.

What does sanitizing a dev dump cost, and who pays for it?

The main cost is the time to inventory personal data, write and test sanitization rules, and build the verification job. Most of that is one-time, while rule maintenance recurs whenever content types, fields or modules change. Cost rises with the number of custom entities, the number of integrations that store personal data, and the number of environments that receive dumps. DeployOpen can scope this work as part of a fixed-scope engagement, with the deliverables and timeline agreed in writing before work starts. When you request a quote, ask for the field inventory, the rule set, the verification checks and the handover runbook as separate line items.

Can our own team sanitize dev dumps without an outside partner?

Yes, if your team has Drupal and database skills, a current data inventory and time to maintain the rules. The work is a sequence of steps: classify the data, write rules per table and field, run the export through those rules, verify the output and restrict access to the result. The points teams most often miss are contributed module tables, revision and log tables, cached data, and backups that still hold raw data. Ask whether the people maintaining the rules will still be there after the first release, because the rules must follow every schema change. A partner is useful when the internal team lacks time or Drupal depth for the field inventory and verification.

Does a sanitized dump remove all GDPR obligations for development?

No. Sanitization reduces risk and supports the data minimisation principle, but a copy that still contains any personal data remains subject to the GDPR, and a copy that could be re-identified from remaining fields is still personal data. Access to dev environments still needs authentication, logging and a retention limit, and Article 32 security of processing applies to them. Confirm with your data protection officer or legal counsel how your sanitized copies are classified. Sanitization also does not replace the rights handling in production, such as access and erasure requests, which must still be applied to the live system.

What Drupal modules cannot close for you

The GDPR module handles consent records and data subject requests inside the site, but several obligations sit with the people and contracts around it. The cards below cover the decisions and records a controller must own, and the points where a Drupal configuration can still leave a gap.

Lawful basis and purpose decisions

Each processing activity needs a documented lawful basis and a stated purpose before data is collected. Drupal can store consent, but it cannot decide whether consent is the right basis for a form, a newsletter or an analytics tag. Check each field and integration against its purpose, and confirm that the consent text shown on the site matches what the controller has recorded. Article 7(1) requires the controller to demonstrate consent, so the decision trail must live outside any single module.

Records of processing and retention

The controller must keep a record of processing activities and a retention schedule that says how long each category of personal data is kept and why. Drupal can apply deletion rules to submissions and users, but the schedule itself is a governance document. Ask who owns each dataset, which Webform, user, log and backup stores hold personal data, and how backups that contain erased records are handled over their retention period.

Transfers to third countries

Chapter V applies whenever personal data leaves the EEA, including remote access from a third country that only displays data on a screen for support. EDPB Guidelines 05/2021 treat cloud storage outside the EEA as a transfer too. Map where hosting, backups, support staff, error tracking and email services process data. If a US processor is involved, confirm that its organization appears on the Data Privacy Framework List, because the adequacy finding in Commission Implementing Decision (EU) 2023/1795 covers only organizations on that list.

Processor contracts and sub-processors

Article 28 requires a written contract with every processor, and processors may not engage sub-processors without the controller's authorization. Hosting companies, managed Drupal support firms, CDN providers and SaaS mail or analytics tools all touch personal data. Collect each contract, check its processing instructions and sub-processor list, and confirm who can access production data during incident work. A Drupal development partner that can see production databases is a processor relationship that needs its own paper.

Breach notification under Articles 33 and 34

Article 33 requires notifying the supervisory authority of a personal data breach without undue delay and, where feasible, within 72 hours of becoming aware of it. Article 34 covers informing affected individuals when the risk is high. Drupal's logs and the GDPR module's request history can show what happened, but they do not decide severity, start the clock or draft the notice. Write an incident runbook that names who classifies breaches, how processors notify the controller, and where the evidence is kept.

Third-party embedded services

Embedded maps, video players, chat widgets and analytics scripts load content from other companies when a visitor's browser renders the page. Drupal can gate scripts behind a consent banner, but it cannot control what those vendors set or collect once loaded. Inventory every third-party script and iframe in each theme and content type, confirm that each is blocked until consent is given, and review the vendor's own data processing terms and transfer location. Re-check the inventory after every new block or editor-added embed.

Questions teams ask before hiring help with GDPR on Drupal

What drives the cost of GDPR work on a Drupal site?

The main drivers are the size of your data map, the number of places personal data enters and leaves the site, and how much custom code the work touches. A site with a few content types, one login and no third-party embeds is a small job. A site with many webforms, CRM and email integrations, several languages or multiple sites in one estate has more fields to inventory, more consent flows to build and more export and erasure paths to test. Fixed-scope quotes list each of these as a line item, so ask for the inventory, the integrations in scope and the environments covered. Effort is one-time for the initial build and recurs only when new forms, embeds or data stores are added.

How long does GDPR work on Drupal take?

Duration follows scope, so the honest answer is that it depends on the data map, the integrations and how quickly your data owners can answer questions. Work usually runs in stages: data inventory, consent design, build and configuration, export and erasure testing, and handover. Delays most often come from waiting on decisions about lawful basis and retention, not from the Drupal build itself. Ask for a timeline with each stage tied to a client input, and confirm which dates depend on access to a staging environment.

What does the work need from our team?

Three inputs matter most. Data owners need to describe what personal data each form, content type and integration holds and how long it is kept. Legal or privacy staff need to confirm the lawful basis for each processing purpose and the wording of consent and cookie notices. Engineers need staging access with a copy of the production configuration and representative content, so export and erasure can be tested safely. Ask each partner to list these inputs in the written scope so that delays are visible early.

Can our in-house team do GDPR work on Drupal ourselves?

Yes, many teams do the Drupal configuration themselves if they have a developer who knows Drupal well and a privacy lead who owns the decisions. The parts that tend to need outside help are the data map, consistent handling of export and erasure across every store, and testing that consent records hold up under review. Be honest about capacity: this work competes with routine maintenance, and it has to be repeated when the site changes. A partner can take the build while your team keeps decision ownership.

Does installing a GDPR module make our Drupal site compliant?

No. A module can provide tools for data export, erasure requests and consent storage, but compliance depends on what the site collects, why, how long it keeps it, who receives it and whether the consent flow meets the regulation. The GDPR requires controllers to demonstrate consent and to make withdrawal as easy as giving it, and modules cannot decide your lawful basis or write your notices. Infrastructure location, processor contracts and third-country transfers also sit outside any module. Treat modules as components inside a documented design.

Does DeployOpen certify that our site complies with GDPR?

No. DeployOpen plans, builds and documents the Drupal controls, and prepares evidence such as consent records, export and erasure test results and configuration exports. It does not issue audit reports, attestations or certifications. The GDPR itself requires no certificate, and any voluntary certification under Article 42 is issued by accredited bodies or supervisory authorities. Responsibility for compliance stays with your organization, so you should confirm the remaining legal questions with your own counsel.

What does a DeployOpen quote for GDPR work include?

Most engagements are fixed-scope, so the quote follows a written scope agreed before work starts. It should name the sites, forms, integrations and environments in scope, the deliverables such as consent configuration and tested export and erasure paths, the client inputs, and the timeline. Ask what is excluded, such as legal review, hosting changes or transfer assessments. Ongoing support and testing are offered as separate retainers, so ask which items recur after handover.

How DeployOpen works on this

DeployOpen plans, configures, customizes, documents and supports self-hosted Drupal inside your own infrastructure, so consent records, cookie controls and data subject request workflows run on systems you operate. The work starts with a written scope that separates what Drupal modules can configure from the legal and process decisions your organization must own.

How we scope

  • Written scope lists the consent points, embedded services, request types and data stores the engagement covers.
  • We map which personal data sits in Drupal entities, Webform submissions, user accounts and third-party integrations.
  • Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.

How we build

  • We configure consent capture, withdrawal and record-keeping, and test that withdrawal is as easy as giving consent.
  • Custom code covers export and erasure workflows, sanitization scripts for developer copies and the gaps the GDPR module leaves open.
  • Each module, configuration export and custom component is tested on a staging copy before it reaches production.

How we hand over

  • Documentation describes the consent workflow, the information shown at each point and how consent records are stored.
  • Handover covers request handling runbooks, role assignments and the steps for verifying a request before any data is released.
  • Configuration is exported into version control so your team can review every change to consent and privacy settings.

How we support

  • Ongoing support covers module updates, security advisory response and regression testing after Drupal releases.
  • Support is available as a retainer, with the scope of covered modules and response expectations agreed in writing.
  • Periodic reviews check that cookie categories still match the embedded services in use and that request logs remain complete.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.