GDPR in Dynamics 365: Retention, Erasure and Data Subject Requests Across Multiple Instances
An operational guide to finding a named person across Dynamics instances and a legacy CRM, erasing or anonymising without orphaning transactional history, and proving it was done.
Given a named person, search every Dynamics 365 instance and the legacy CRM on agreed matching keys: email, phone, name with date of birth or postcode, and external IDs. Cover contacts, leads, cases, activities and their activity parties, notes and attachments, portal identities, Customer Insights profiles and audit history, which keeps old values. Then decide per record: delete, anonymise or restrict processing. Check relationship cascade behaviour first, because deleting a contact can delete or orphan cases, activities and orders; anonymise where transactional records must be kept. Record what was searched, done and approved, without keeping the erased data. Finally, schedule retention with bulk deletion jobs so the same backlog never builds up again.
Who decides what happens to the data, and what does this guide cover?
This is technical guidance on executing requests in Dataverse, not legal advice. Whether a request is valid, which exemptions apply, what must be retained for tax, contract or regulatory reasons and how long you have to respond are decisions for your data protection officer and legal advisers. Involve them before anything is deleted, and get their decisions in writing, because the technical team will need to point to them later.
What the technical team owns is the execution: finding every record reliably, applying the decided action per record without breaking transactional history, and proving it was done. Privacy management platforms handle the request intake and workflow well. The Dataverse execution underneath is where most requests go wrong, and that is what the rest of this page covers.
How do you find every record about one person across several Dynamics 365 instances?
Build a repeatable person search, not an ad hoc Advanced Find. Agree the matching keys with the DPO first, since a weak key finds the wrong people and a narrow one misses records. Then run the same search definition against every environment and the legacy CRM, and log the results per system.
- Matching keys: every email address the person supplied, phone numbers normalised to one format, full name combined with date of birth or postcode, and external identifiers such as customer numbers, portal user IDs or marketing IDs. Name alone is never enough.
- Search tools: Dataverse search gives a quick cross-table first pass where it is enabled, but it only covers tables and columns configured for search. Run FetchXML or Web API queries per table for the definitive result, including every email, phone and name column, not just the primary ones.
- Instances: repeat per production environment, and include sandbox and test copies. A copy made from production carries production personal data until it is reset or scrubbed.
- Legacy CRM: query its database or export with the same keys, and include its attachments store and any archive tables.
- Matching and merging near duplicates of the same person uses the same techniques as our duplicate data cleanup guide; resolve which records are genuinely the requester before acting on any of them.
Which Dataverse tables hold personal data about a person?
More than the contact record. The table below is a starting checklist for a Customer Engagement environment; your own data model adds custom tables, and any table with a lookup to contact or lead, or a free text column where staff type names, belongs on the list.
| Where | What to search | Easy to miss |
|---|---|---|
| Contacts and leads | All email, phone, name and address columns, plus custom identifiers. | Leads that were qualified into a contact, and disqualified leads kept for years. |
| Cases (incidents) | Customer and primary contact lookups, and description and resolution text. | Names and details typed into case descriptions for other people. |
| Activities | Emails, phone calls, appointments and tasks regarding the person. | Activity parties: senders and recipients, including unresolved email addresses held on the activity party rather than linked to a contact. |
| Notes and attachments | Annotations regarding the person or their cases, and their files. | Email attachments, file and image columns, and documents stored in SharePoint through document management, which sits outside Dataverse. |
| Power Pages | The portal contact, its external identity records and invitations. | The account in the identity provider, such as Microsoft Entra External ID, which is managed separately. |
| Customer Insights | Journeys contacts, consent records and interaction data; Data unified profiles. | Unified profiles rebuilt from source systems on the next refresh if the source is not cleaned. |
| Audit history | Change history of every record above, if auditing was on. | Old values of names, emails and phones that were later changed or anonymised. |
| Around the platform | Integration and data lake exports, Power BI datasets, flow run history, plug-in trace logs, mailboxes and backups. | Copies outside Dataverse that are not affected by anything you do inside it. |
Should you delete, anonymise or restrict processing?
Choose per record, based on the DPO's decision about which data must be retained. A single request usually uses all three: marketing data deleted, an order history anonymised because the transaction must stay for accounting, and a disputed case restricted until it is resolved.
| Action | What it means in Dataverse | Use it when | Watch for |
|---|---|---|---|
| Delete | Remove the row, and depending on cascade behaviour its related rows. | Nothing about the record must be retained, such as a lead, marketing interactions or a portal account. | Cascades that delete more than intended, and restrict rules that block the delete. |
| Anonymise | Overwrite personal columns on the row with neutral values, keep the row and its relationships. | The transaction or case must be kept but no longer needs to identify the person. | Free text columns, related notes and attachments, and the old values the update leaves in audit history. |
| Restrict processing | Keep the data but stop using it: deactivate, set do not contact preferences and consent, remove from segments and marketing lists, narrow access. | The data is disputed, held for a legal claim, or awaiting a decision. | Automations, journeys and integrations that ignore the status and keep processing. |
Why does cascade behaviour decide whether erasure breaks your invoicing?
Every relationship in Dataverse has a delete behaviour, and it decides what happens to the child rows when a parent such as a contact is deleted. Cascade All deletes the related rows too. Remove Link keeps them and clears the lookup, leaving an orphan with no customer. Restrict blocks the delete while related rows exist. Parental relationships cascade by default, referential ones remove the link, and custom configuration can mix both.
So deleting a contact is not one operation. Depending on how each relationship is configured in your environment, it may silently delete the activities and notes regarding that contact, orphan cases so they no longer show a customer, or fail because orders or invoices restrict it. None of those outcomes is what a finance team or auditor expects. Before running erasure, open each relationship from contact and lead to the tables that matter in the maker portal and record its delete behaviour, because customisation and platform updates mean you cannot assume the standard configuration.
The practical rule: where transactional records such as orders, invoices, contracts or regulated cases must be retained, anonymise the contact rather than deleting it. The relationships stay intact, reports still add up, and the person is no longer identifiable. Delete the records that have no retention reason, such as marketing interactions, individually and deliberately.
What happens to personal data held in audit history?
If auditing was on, the change history of a record keeps old values. Anonymising a contact writes new audit entries whose old values are the name, email and phone you just removed, so the erasure is incomplete while that history exists. Deleting the row does not necessarily remove its audit history either.
Dataverse offers ways to delete audit data: deleting the change history of a specific record through the API, and administrator deletion of audit logs by date or table. Which options exist and how they behave has changed over time, so confirm against current Microsoft documentation, test in a sandbox, and agree with the DPO whether the change history for this person should be deleted or retained for another legal reason. Our sibling guide on Dynamics 365 audit trails explains why broad audit deletion destroys evidence and how exported audit copies need the same erasure. For checking what a record's history holds before and after, the free Easy Audit PCF control shows it readably on the form.
How do Customer Insights profiles, portals and copies outside Dataverse affect erasure?
Personal data rarely lives only in the tables you query. Customer Insights - Data builds unified profiles from source systems, so a profile deleted without cleaning its sources returns on the next refresh; erase at source first, then refresh and confirm. Customer Insights - Journeys holds consent and interaction data that needs its own handling. How those are built and connected in your tenant is described on our Customer Insights implementation page, and Microsoft publishes data subject request guidance for its products that you should check for the current method.
Power Pages portal users also exist in the identity provider, which needs its own deletion. Beyond that, list every copy: data lake and warehouse exports, Power BI datasets, integration logs and middleware stores, flow run history, mailboxes synchronised with server-side sync, and SharePoint document libraries. Environment backups cannot be edited record by record; the DPO needs to know that, and restore procedures should reapply completed erasures before a restored environment is used.
How do you set retention policies so erasure requests stop piling up?
Most painful requests are painful because data was kept indefinitely. A retention schedule agreed with the DPO, then enforced automatically, shrinks every future search and removes data nobody should hold. Enforce it in Dataverse with scheduled jobs rather than good intentions.
- Bulk deletion jobs: define the criteria as a query, for example leads not modified since a cut-off date with no qualified status, and schedule the job to recur. Test the FetchXML criteria as a view first and check the count, because the job deletes everything it matches, including through cascades.
- Anonymisation on a schedule: where rows must be kept but identity need not be, a scheduled flow or plug-in that overwrites personal columns after the retention period is safer than deletion.
- Dataverse long-term retention: retention policies can move inactive data out of the live tables into read-only long-term retention, where available for your tables and licensing. It reduces live storage but is still data you hold, so it stays in scope for requests. Check current Microsoft documentation for how retained data is searched and purged.
- Capacity is a side benefit, not the goal. The sibling guide on Dataverse storage capacity cleanup covers the storage view of the same clean up.
- Review the schedule when new tables, integrations or instances are added, so retention keeps pace with the data model.
What evidence proves a data subject request was completed?
A register record that shows what was done without recreating what was erased. Keeping a spreadsheet of the deleted details defeats the purpose. Refer to the person by the request reference and minimal identifiers the DPO approves for the register.
- The request reference, date received, request type and the DPO decision, including what must be retained and why.
- The search definition used: matching keys by type, not the values, and the systems and environments searched, with the date and time of each search.
- Per system: the count of records found per table and the action taken on each group, delete, anonymise or restrict, with timestamps.
- Audit history handling, copies outside Dataverse handled, and anything that could not be erased, such as backups, with the reason.
- Who executed each step and who approved it, by role, and the date the response was sent.
Is Dynamics 365 the right platform for data with strict retention rules?
Usually yes. Dataverse has the relationships, security, auditing and scheduled deletion to execute requests properly; the problems come from configuration that was never designed for erasure. Where your requirements go beyond what configuration can express, such as per field retention across many regimes or erasure built into every workflow, the decision deserves a proper look. We recommend the right solution - whether that's Microsoft Dynamics 365, Power Platform, or a custom-built CRM. Some businesses need the Microsoft ecosystem. Others need full control without licensing. We deliver both. A custom-built CRM on React, Node.js, PostgreSQL or .NET can build retention and erasure into the data model from the start, where that fits better than the Microsoft ecosystem.
Should personal data with strict retention rules live in Dynamics 365 or a CRM built around them?
Can afford licensing and want the Microsoft ecosystem
Dynamics 365
Microsoft 365, Teams and Outlook integration, a mature partner ecosystem, Copilot, and apps for sales, service and field operations that are configured rather than built.
Need full control and zero licensing
Custom CRM
A CRM built on React, Node.js, PostgreSQL or .NET that you own outright: your data model, your hosting, no per-user subscription, and features shaped exactly to your process.
Not sure which fits
We help you decide
A short discovery weighs licensing budget, process complexity, integrations and long-term ownership, then recommends one path. We deliver both, so the recommendation has no reason to lean.
How does Solzet help with GDPR requests in Dynamics 365?
We build the repeatable parts: a person search that runs across your Dynamics instances and legacy CRM, a documented map of where personal data lives and how each relationship cascades, tested delete, anonymise and restrict routines, audit history handling, retention jobs and the evidence record, all executed to decisions your DPO has made. Where the data and security review should be wider, that is our Dynamics 365 health check and technical audit.
Solzet delivers remotely from Yerevan, Armenia, with senior consultants and full-stack developers and 8+ years of Dynamics 365 Customer Engagement and Power Platform work, directly or white-label for Microsoft partners.
What do people ask us?
How do we find all data about a person in Dynamics 365?
Agree matching keys with your DPO, such as email addresses, normalised phone numbers, name with date of birth or postcode, and external IDs. Use Dataverse search as a first pass, then run FetchXML or Web API queries per table across contacts, leads, cases, activities and activity parties, notes and attachments, portal records and custom tables. Repeat in every environment including sandbox copies, and in the legacy CRM, and log the results per system.
Does deleting a contact in Dynamics 365 delete its cases and activities?
It depends on the delete behaviour of each relationship. Cascade All deletes the related rows, Remove Link keeps them without a customer, and Restrict blocks the delete while related rows exist. Customisation changes these, so check each relationship from contact to the tables you care about in the maker portal before running erasure. Where orders, invoices or regulated cases must be kept, anonymise the contact instead.
Is anonymising a contact enough to erase personal data in Dataverse?
Not on its own. Anonymising overwrites the personal columns on the row, but related notes, attachments, activity parties and free text may still identify the person, and if auditing is enabled the audit history keeps the old values, including those written by the anonymising update. Handle related records and agree with your DPO how change history for the record is dealt with.
Can we delete audit history for one record in Dynamics 365?
Dataverse provides a way to delete the change history of a specific record through the API, as well as administrator deletion of audit logs by date or table. Check current Microsoft documentation for the options available in your environment, test in a sandbox, and agree with your DPO first, because audit history may also need to be retained as evidence for other obligations.
How do we set up a retention policy in Dynamics 365?
Agree a retention schedule with your DPO, then enforce it with recurring bulk deletion jobs whose criteria are written as a query, tested as a view first because cascades delete related rows too. Use scheduled anonymisation where rows must be kept, and consider Dataverse long-term retention for inactive data where available, remembering that retained data is still in scope for data subject requests.
What should a DSAR evidence record contain?
The request reference and DPO decision, the matching key types and systems searched with timestamps, the count of records found per table and the action taken on each, how audit history and copies outside Dataverse were handled, anything that could not be erased and why, and who executed and approved each step. It should not contain the personal data that was erased.
Is this legal advice on GDPR?
No. This is technical guidance on executing requests in Dynamics 365 and Dataverse. Whether a request is valid, which exemptions apply, what must be retained and the response deadline are decisions for your data protection officer and legal advisers, and they should approve the actions before anything is deleted or anonymised.
Where should you go next?
Dynamics 365 health check and technical audit
An independent review of data quality, security, configuration and ALM with evidence for every finding.
Dynamics 365 audit trails that survive a regulator
What Dataverse auditing records, change history through the Web API, export to immutable storage and documenting gaps.
Dataverse storage capacity cleanup
Freeing database, file and log capacity without deleting what you need to keep.
Dynamics 365 Customer Insights implementation
Journeys, unified profiles, segments and consent on Dataverse.
Solzet Easy Audit PCF control
A free, readable change history panel for model-driven forms.
Custom CRM Development
CRM on React, Node.js, PostgreSQL and .NET for organizations that need full control without Microsoft licensing.
Which solution is right for your business?
Tell us what you need. A senior consultant replies within one business day with a recommendation - Dynamics 365, Power Platform, or a custom-built CRM - not a sales script.