All insights

AI Agents

AI agents for DSAR fulfillment: automating privacy requests without disclosing the wrong data

A data subject access request is expensive because finding one person's data across every system is manual, and dangerous because handing it to the wrong person is a breach. An AI agent can carry the search and draft the response. It must never verify identity, disclose, or delete on its own. Here is the split, the Salesforce data model underneath it, and the guardrails that keep an agent from over-disclosing at scale.

AI agents for DSAR fulfillment: automating privacy requests without disclosing the wrong data, article illustration

The fastest way to turn a privacy request into a data breach is to answer it for the wrong person.

That single risk is why I get nervous when a team tells me they want an agent to “handle DSARs end to end.” A data subject access request asks you to gather everything you hold about one individual and hand it back.

Get the identity wrong, or sweep in a second person’s data, and you have not served a request. You have disclosed personal data to someone with no right to it, on the record, with a legal clock running.

An agent belongs in this process. Just not everywhere in it. The call I give teams is a clean split: let the agent do the searching and drafting, the parts that are slow and mechanical, and keep identity verification, disclosure, and deletion behind a human. Build it that way and you cut the cost of a request without inheriting a new class of incident.

Why DSARs are expensive enough to automate

The volume is going up and the unit cost is brutal. Gartner has put the cost of fulfilling a single access or deletion request by hand at roughly $1,524, and DataGrail’s research reports request volumes climbing fast, into the hundreds per million identities per year, with annual costs for a mid-size company reaching into seven figures.

Almost all of that cost is one step: finding the data. A person is scattered across Leads, Contacts, Person Accounts, Cases and their comments and attachments, Campaign Members, Chatter, custom objects joined by lookups, plus Marketing Cloud subscriber data and any unified profile in Data 360. A privacy analyst chasing that by hand, across teams, against a deadline, is the whole expense.

The deadlines leave little room for slow. GDPR gives you one month, extendable by two more for complex requests. California’s CCPA and CPRA give you 45 days, extendable once by another 45. Virginia and Colorado run on similar 45-day clocks, and roughly twenty US states now have their own laws with their own timers. Miss one across a portfolio of jurisdictions and the failure is regulatory, not operational.

What an agent should do, and what it must never do

Draw the line at the point where a mistake becomes irreversible or discloses data.

An agent is well suited to the discovery sweep. Given a verified subject, it can traverse the object graph, pull every record that references the person, and assemble a manifest far faster than a human clicking through related lists.

It can also draft the response package and propose redactions for a reviewer. Those are search and summarization tasks, the things models are good at, and none of them release data or destroy it.

Three steps stay human, or at least stay behind a human approval, every time.

Identity verification is the first gate and the one an agent must not decide alone. California’s regulations describe a tiered standard: a two-data-point match for reasonable certainty, and a three-point match plus a signed declaration for the higher bar that deletion of sensitive data demands.

A model that can be talked into lowering that bar is a model that will eventually disclose to an imposter. Keep verification deterministic, and keep authorized-agent requests, where a third party asks on someone’s behalf, under extra human scrutiny.

Disclosure is the second gate. Someone accountable signs off on the package before it leaves, because the review is two questions at once: did we find everything, and did we accidentally include someone else. Mixed data, where a case thread names two customers, is exactly where automated redaction over-removes or under-removes, and both are wrong. Over-redaction frustrates a legitimate request. Under-redaction is the breach again.

Deletion is the third, and it is one-way. A right-to-be-forgotten action that runs on an unverified or misidentified request cannot be undone. Double-gate it.

The reason this matters more with agents than with scripts is that agents generalize. A hardcoded query does exactly what it was written to do. An agent can be prompt-injected or can hallucinate its way into an action nobody scoped, and because it acts through real tools, the org is legally responsible for what it does.

That is the whole argument for keeping a human in the loop on the steps that disclose or destroy.

The Salesforce pieces you build on

Salesforce does not ship a turnkey agent that fulfills DSARs for you. What it ships are the parts, and the work is assembling them with the right gates.

Privacy Center is the fulfillment tooling. It is an add-on managed package where admins define policies that run on core-cloud data: right-to-be-forgotten policies that delete or mask, portability policies that export a subject’s personal data into files for a DSAR, plus de-identification and retention. Under the hood it exposes a DsarPolicy object and a DsarPolicyLog, so the fulfillment step and its audit trail are real records you can drive from automation and report on later.

Data 360 handles the unified-profile side separately, and the seam between them is a common gap. Deletion in Data Cloud runs through the Consent API against the Individual data model, and it reprocesses at 30, 60, and 90 days to catch data that arrives after the first pass. That means “deleted” is not instantaneous or single-shot across your estate, and your process has to account for the lag rather than reporting completion too early.

For discovery and classification, Shield’s Data Detect scans standard and custom objects to find and label PII regardless of which field it sits in, which is how you avoid missing personal data hiding in a free-text field named Notes. Data Detect turns “where might this person be” from tribal knowledge into a scan.

And consent is the check that gates everything. Before any action, you read the person’s current preferences.

# Does this individual have a "forget" preference on file?
GET /services/data/v64.0/consent/action/shouldForget?ids=<individualId>&verbose=true

The Consent API answers by action, including email, track, and shouldForget, aggregated across Lead, Contact, User, Person Account, and Individual. An agent that skips this check is an agent acting on stale consent. Grounding it in consent and contact-point data is what keeps the action lawful.

Wiring it together

The orchestration is a Flow with an invocable Apex discovery step and hard stops at the gates. The shape:

  1. Intake creates a DSAR request record and starts the SLA clock.
  2. A verification subflow runs the two- or three-point match. If it does not return verified, the flow halts. No discovery runs against an unverified request.
  3. Invocable Apex runs the discovery sweep and returns a manifest of everything found.
  4. A pause routes the manifest to a privacy reviewer for redaction sign-off. The agent has drafted; the human decides.
  5. On approval, a Privacy Center DsarPolicy runs the export or the deletion, and the Consent API handles the Data Cloud side.
  6. Every step writes to the log, and the clock stops.

The discovery Apex is the part worth getting right, because a missed object is a missed obligation. A sketch of the graph traversal:

public with sharing class DsarDiscoveryService {
    @InvocableMethod(label='Discover subject records')
    public static List<Manifest> find(List<Request> reqs) {
        String email = reqs[0].subjectEmail;
        Manifest m = new Manifest();

        m.contacts = [SELECT Id, Name, Email FROM Contact WHERE Email = :email];
        m.leads = [SELECT Id, Name, Email FROM Lead
                   WHERE Email = :email AND IsConverted = false];
        m.personAccounts = [SELECT Id, Name FROM Account
                            WHERE IsPersonAccount = true AND PersonEmail = :email];

        Set<Id> contactIds = new Map<Id, Contact>(m.contacts).keySet();
        m.cases = [SELECT Id, Subject, ContactId FROM Case WHERE ContactId IN :contactIds];
        m.campaignMembers = [SELECT Id, CampaignId, ContactId
                             FROM CampaignMember WHERE ContactId IN :contactIds];
        return new List<Manifest>{ m };
    }
}

Run it with sharing, and let the agent’s running user hold only read access to the objects in scope. The permissions the agent inherits are the permissions it acts with, which is the same running-user discipline every Agentforce build lives or dies on. A discovery agent should never hold delete rights. The deletion runs later, as a separate action, under a separate human approval.

Guardrails, in the platform’s own terms

If you surface any of this through Agentforce rather than pure Flow, lean on the controls Salesforce already gives you. Agentforce guardrails let you constrain an agent to defined topics and block off-scope actions, so a DSAR agent cannot wander into taking an action it was never scoped for. The Einstein Trust Layer masks sensitive fields before they reach the model and keeps the provider from retaining the data, so the agent reasons over what it needs without the raw PII leaking into a prompt.

Design the agent’s actions to enforce the split at the tool level rather than in instructions. A DiscoverSubjectData action returns a manifest and can disclose nothing. A ProposeRedactions action drafts and routes to a human. There is no DisclosePackage or DeleteSubject action the agent can call on its own, because those live behind approval records. An instruction telling an agent not to do something is a suggestion. Not giving it the action is a control.

For teams in financial services or healthcare, where verification standards and record-retention rules are heaviest, that tool-level separation is what lets you put an agent anywhere near the process at all.

The split is the point

An agent will not save you from a badly designed DSAR process. It will make a well-designed one much cheaper, by taking the slow discovery-and-draft work off people and leaving them the judgment calls.

Keep the judgment calls human. Verify identity deterministically, sign off on every disclosure, and gate every deletion twice. Do that, and the agent removes the cost that made DSARs painful without adding the risk that would make them dangerous.

Understanding the basics

Can AI agents handle data subject access requests automatically?

An agent can automate the slow parts of a DSAR, discovering where a person’s data lives and drafting the response, but it should not verify identity, disclose data, or delete records on its own. Those steps are irreversible or release personal data, so they belong behind human approval. Salesforce does not ship a turnkey DSAR-fulfillment agent; you build the orchestration on Flow, Apex, and Privacy Center.

What is the deadline to respond to a DSAR?

Under GDPR you have one month, extendable by two further months for complex or numerous requests. Under California’s CCPA and CPRA you have 45 days, extendable once by another 45. Virginia, Colorado, and most other US state laws use a 45-day clock with a 45-day extension, so a business operating across jurisdictions tracks several timers at once.

How does Salesforce handle right-to-be-forgotten requests?

Privacy Center runs delete or mask policies on core-cloud data, while Data 360 processes deletion through the Consent API against the Individual data model and reprocesses at 30, 60, and 90 days to catch late-arriving data. Because the two run separately, “deleted” is not instant or single-shot across all clouds, and a process has to account for the lag.

How do you stop an AI agent from disclosing the wrong person’s data?

Gate the risky steps. Verify identity deterministically before any discovery runs, require human sign-off on the response package to catch mixed or third-party data, and design the agent’s actions so it has no ability to disclose or delete on its own. Mask sensitive fields with the Trust Layer so raw PII never enters a prompt.


Trying to get privacy requests off spreadsheets without handing an agent the keys to your customer data? Talk to us, we design the human gates before we wire the automation.

Keep reading

All insights