Inferensys

Prompt

Data Subject Access Request Fulfillment Prompt

A practical prompt playbook for using Data Subject Access Request Fulfillment Prompt in production AI workflows.
DevOps engineer deploying LLM to production on laptop, Kubernetes dashboards visible, late night deployment session.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the operational context, ideal user, and boundaries for automating DSAR fulfillment with an AI prompt.

This prompt is designed for privacy operations teams who need to automate the discovery, formatting, and exemption review of personal data in response to a Data Subject Access Request (DSAR). It instructs an AI system to locate all personal data related to a data subject across provided source records, structure it for disclosure, and flag any content that requires redaction or exemption under applicable regulations such as GDPR Article 15 or CCPA. The ideal user is a privacy analyst or engineer who has already retrieved candidate records from your data stores—via a search tool, database query, or RAG pipeline—and now needs the model to perform the final assembly and compliance check before human review.

Use this prompt when you have a batch of unstructured or semi-structured records (emails, chat logs, CRM notes, support tickets) that are likely to contain a data subject's personal information and you need a structured, auditable output. The prompt expects you to provide the raw source records as [SOURCE_RECORDS], the data subject's identifying information as [DATA_SUBJECT_IDENTITY], and the applicable regulatory framework as [REGULATORY_FRAMEWORK]. It will return a structured JSON object containing a list of discovered personal data items, their source locations, and any recommended exemptions with legal justifications. This output is designed to be fed into a review queue where a qualified privacy professional can approve, reject, or modify each finding before the final report is released to the data subject.

Do not use this prompt as a substitute for legal advice or as the sole decision-maker on exemption application. It is not designed for real-time, conversational DSAR intake from data subjects themselves—that requires a separate triage and identity verification workflow. Avoid using this prompt on records that have not been pre-filtered for relevance; feeding it an entire production database dump will produce noisy, expensive, and potentially incomplete results. The output must always be reviewed by a qualified privacy professional before release to the data subject. If your use case involves fully automated disclosure without human review, you are operating outside the safe boundary of this playbook and should reconsider your risk posture.

PRACTICAL GUARDRAILS

Use Case Fit

Where this prompt works and where it introduces operational risk. DSAR fulfillment requires precision, completeness, and regulatory awareness. This prompt is a component in a larger privacy workflow, not a standalone solution.

01

Good Fit: Structured Data Repositories

Use when: The AI has tool access to well-indexed user data stores, logs, and CRM records. The prompt excels at orchestrating search, aggregating results, and formatting disclosures when data is machine-readable. Guardrail: Provide explicit tool schemas for each data source to prevent the model from guessing where data lives.

02

Bad Fit: Unstructured or Dark Data

Avoid when: Personal data resides in unindexed file shares, scanned PDFs, email archives, or legacy systems without APIs. The model cannot reliably discover data it cannot search. Guardrail: Pair this prompt with a pre-processing pipeline that extracts and indexes unstructured data before DSAR execution begins.

03

Required Inputs

What you must provide: A verified data subject identifier, a list of authorized data sources with access scopes, a redaction policy defining exemption categories, and an output schema for the disclosure package. Guardrail: Validate the subject's identity through a separate authentication service before passing the identifier to the prompt. Never rely on the model to verify identity.

04

Operational Risk: Incomplete Discovery

What to watch: The model may silently skip data sources it cannot access, omit fields it deems irrelevant, or stop searching after a timeout without reporting gaps. Guardrail: Require the model to output a completeness attestation listing every data source queried, every source that returned results, and every source that failed or returned empty. Flag missing attestations for human review.

05

Operational Risk: Improper Exemption Application

What to watch: The model may over-redact by applying exemptions too broadly or under-redact by failing to recognize third-party data, privileged content, or regulatory carve-outs. Guardrail: Require the model to cite the specific exemption rule for every redaction, and route all redacted outputs to a human reviewer before disclosure. Never auto-release redacted DSAR responses.

06

Not a Legal Decision Engine

What to watch: The model may attempt to interpret whether an exemption applies to ambiguous data rather than flagging it for review. Guardrail: Instruct the model to escalate any data where exemption applicability is uncertain rather than making a determination. The prompt should surface ambiguity, not resolve it.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A system-level prompt for locating, formatting, and redacting personal data in response to a Data Subject Access Request.

This prompt is designed to be deployed as a system instruction for an AI model that has access to a set of retrieved records for a specific data subject. Its primary job is to process those records against a DSAR, producing a structured disclosure report that identifies all personal data, formats it for the data subject, and applies necessary redactions based on defined exemptions. The prompt enforces a strict workflow: first, inventory all data points; second, map them to the request's categories; third, justify and apply any redactions; and finally, format the output for direct release. This is a high-risk compliance workflow, so the prompt is built to be auditable, requiring explicit reasoning for every piece of data that is withheld.

markdown
# SYSTEM INSTRUCTION
You are a privacy operations assistant responsible for fulfilling Data Subject Access Requests (DSARs). Your task is to process a set of retrieved records for a specific data subject and produce a structured disclosure report. You must follow the rules below without exception.

## CORE RULES
1.  **Exhaustive Inventory:** Identify every instance of personal data related to the data subject in the provided records. Do not summarize or skip any data point.
2.  **Category Mapping:** Map each data point to the specific categories requested in [REQUEST_CATEGORIES]. If a data point does not fit a requested category, include it in an "Other Personal Data Found" section.
3.  **Exemption and Redaction:** For each data point, determine if an exemption under [APPLICABLE_REGULATIONS] applies. If an exemption is triggered (e.g., includes third-party personal data, legal privilege, or confidential trade secrets), you must redact it. You must provide a clear, specific reason for every redaction in the [REDACTION_LOG]. Never redact the data subject's own personal data unless it is inextricably linked to an exempt third party's data.
4.  **Structured Output:** Your final response must be a valid JSON object conforming to the [OUTPUT_SCHEMA] below. Do not include any text outside the JSON object.
5.  **No Assumptions:** If the provided records are insufficient to fulfill a part of the request, explicitly state this in the "Completeness Assessment" field. Do not infer or fabricate data.

## OUTPUT SCHEMA
```json
{
  "report_metadata": {
    "subject_identifier": "string",
    "request_id": "string",
    "generation_timestamp": "string (ISO 8601)",
    "completeness_assessment": "string (A statement on whether all requested data was found and any limitations.)"
  },
  "disclosed_data": [
    {
      "data_category": "string (e.g., 'Contact Details', 'Purchase History')",
      "data_points": [
        {
          "field_name": "string",
          "value": "string (The data value or '[REDACTED]')",
          "source_record_id": "string"
        }
      ]
    }
  ],
  "redaction_log": [
    {
      "data_point_reference": "string (A unique identifier linking to the redacted field)",
      "redaction_reason": "string (Specific legal or policy reason for redaction)",
      "applied_exemption": "string (The specific clause from [APPLICABLE_REGULATIONS])"
    }
  ]
}

CONSTRAINTS

  • [REQUEST_CATEGORIES]: {{customer_support_transcripts, account_metadata, purchase_history}}

To adapt this template, replace the placeholders in the CONSTRAINTS section with your specific values. [APPLICABLE_REGULATIONS] should be a concise, machine-readable reference to the legal basis for exemptions (e.g., GDPR Art 15(4), CCPA 1798.105(d)). [REQUEST_CATEGORIES] must be a precise list of the data domains the subject has asked about. The [RISK_LEVEL] tag is a signal to your orchestration layer to enforce additional safeguards like human review. Before deploying, test this prompt with a golden dataset of records that includes known third-party PII and privileged information to validate that the redaction logic triggers correctly and that the JSON schema is strictly adhered to. A common failure mode is the model redacting the data subject's own information when it appears in the same record as a third party; your evals must specifically test for this over-redaction error.

IMPLEMENTATION TABLE

Prompt Variables

Each placeholder must be replaced before the prompt is sent to the model. Validation notes describe how to verify the input is well-formed before execution.

PlaceholderPurposeExampleValidation Notes

[REQUESTER_IDENTITY]

Verified identity of the data subject making the request, used to scope the search and validate authorization

Must match a verified identity from the identity provider. Reject if anonymous or unverified. Format: email or internal user ID string.

[REQUEST_TIMESTAMP]

ISO-8601 timestamp of when the DSAR was received, used to determine data cutoff and regulatory deadline calculation

2025-03-15T14:30:00Z

Must parse as valid ISO-8601 UTC. Must not be future-dated. Used to calculate response deadline; log if deadline is within 48 hours.

[JURISDICTION]

Applicable privacy regulation governing this request, determines exemption rules and disclosure format

GDPR OR CCPA OR LGPD

Must match an allowed enum value from the jurisdiction registry. Reject unknown values. Controls which exemption catalog is loaded.

[DATA_SOURCE_CATALOG]

JSON array of systems, databases, and stores to search for the subject's personal data

["postgres_main", "s3_logs", "zendesk_tickets"]

Must be a valid JSON array of strings. Each entry must exist in the approved data source registry. Empty array triggers abort with human escalation.

[EXEMPTION_RULESET]

Jurisdiction-specific rules defining which data categories are exempt from disclosure and under what conditions

gdpr_exemptions_v2.1.json

Must reference a valid versioned ruleset file in the compliance repository. Version must be approved for production use. Null not allowed; if missing, escalate to DPO.

[REDACTION_PATTERNS]

Regex and field-level rules for redacting third-party PII, privileged content, and out-of-scope data before disclosure

{"email": "@.***", "ssn": "XXX-XX-XXXX"}

Must be a valid JSON object mapping data types to redaction patterns. Each pattern must be tested against known examples. Empty object means no redaction, which requires explicit approval flag.

[OUTPUT_FORMAT]

Target format for the compiled disclosure package delivered to the data subject

json OR pdf OR csv

Must be one of the allowed output formats. PDF requires human review flag. CSV requires schema validation against the disclosure template.

[MAX_RESPONSE_SIZE_MB]

Hard limit on the size of the compiled disclosure package before it must be split or escalated

50

Must be a positive integer. Values over 100 require ops approval. If exceeded during assembly, split into paginated response with index and notify reviewer.

PROMPT PLAYBOOK

Implementation Harness Notes

How to wire the DSAR fulfillment prompt into a production workflow with validation, retries, and human review gates.

This prompt is a single step in a larger Data Subject Access Request (DSAR) pipeline. It should never be the sole decision-maker for data disclosure. The model's output must be treated as a draft extraction and redaction proposal, not a final legal response. The implementation harness must enforce strict validation, source grounding, and human approval before any data leaves the system. The primary risks are incomplete data discovery (missing a system of record) and improper exemption application (disclosing data that should be redacted or redacting data the subject has a right to see). The harness must catch both failure modes before the response reaches the requestor.

Wire the prompt into a staged pipeline with these components: (1) Data Retrieval Layer: Before the prompt runs, execute deterministic queries across all registered data stores (CRM, support tickets, analytics, auth systems, logs) using the verified subject identifier. Do not rely on the model to decide where to search. The retrieved records become the [CONTEXT] input. (2) Prompt Execution: Run the DSAR prompt with the retrieved context, the jurisdiction's exemption rules, and the required output schema. Use a model with a large context window and strong instruction-following for structured outputs (e.g., GPT-4o, Claude 3.5 Sonnet). Set temperature=0 to minimize variance in redaction decisions. (3) Schema Validation: Parse the JSON output and validate it against a strict schema. Reject any response where subject_id doesn't match the request, where exemptions reference undefined exemption codes, or where data_categories contain records without a source_system trace. If validation fails, retry once with the validation errors injected into the prompt's [CONSTRAINTS] field. If the retry also fails, escalate to a human reviewer with the raw context and both failed attempts. (4) Completeness Check: Compare the data_categories in the model's output against the list of systems queried in step 1. If a queried system returned records but those records don't appear in any category, flag a potential omission. (5) Human Review Queue: Route all outputs with exemptions or redactions to a privacy analyst for approval. The reviewer sees the original records, the model's proposed redactions, and the cited exemption rationale. Only after human sign-off is the final report generated and sent to the data subject.

Log every step for auditability: the subject identifier, the systems queried, the raw model output, validation results, retry attempts, and the human reviewer's decision. This audit trail is essential for demonstrating compliance to regulators. Do not cache or reuse DSAR outputs across requests, even for the same subject, as data changes and consent status may have changed. Implement rate limiting on the DSAR endpoint to prevent abuse, and never expose the raw prompt output to the data subject without the human review gate. If the pipeline is processing a high volume of requests, consider a tiered approach: fully automated fulfillment for simple, no-exemption cases with a clear audit trail, and mandatory human review for any case involving exemptions, redactions, or multi-system data. The prompt itself should be version-controlled alongside the pipeline code, and any change to exemption rules or output schema must trigger a regression test against a golden set of known DSAR scenarios before deployment.

IMPLEMENTATION TABLE

Expected Output Contract

The model must return a valid JSON object matching this schema. Validate these fields before accepting the output. Any deviation should trigger a repair or retry loop.

Field or ElementType or FormatRequiredValidation Rule

response_id

string (UUID v4)

Must be a valid RFC 4122 UUID v4 string. Reject if missing or malformed.

subject_identifier

string

Must match the [REQUESTING_DATA_SUBJECT_ID] input exactly. Reject on mismatch.

data_inventory

array of objects

Must be a non-empty array. Each object must contain 'source_system', 'data_category', and 'records_found' fields. Reject if empty or missing required sub-fields.

data_inventory[].source_system

string

Must be a non-empty string matching a known system from the [SYSTEM_REGISTRY] context. Reject unknown systems.

data_inventory[].data_category

string (enum)

Must be one of: 'profile', 'transactional', 'behavioral', 'user_generated_content', 'derived_inferences'. Reject on unknown values.

data_inventory[].records_found

integer

Must be a non-negative integer. A value of 0 is valid and indicates no records found in that system.

exemptions_applied

array of objects

If present, each object must contain 'exemption_type', 'legal_basis', and 'redacted_fields'. Reject if 'exemption_type' is not from the [APPLICABLE_EXEMPTIONS] list.

disclosure_package

string (markdown)

Must be a non-empty string containing the formatted disclosure for the data subject. Reject if it contains any field listed in exemptions_applied[].redacted_fields.

processing_notes

string

If present, must not contain any PII from the subject_identifier or data_inventory. Validate with a PII regex scan.

generated_at

string (ISO 8601)

Must be a valid ISO 8601 UTC timestamp (e.g., 2024-01-15T10:30:00Z). Reject if in the future or unparseable.

PRACTICAL GUARDRAILS

Common Failure Modes

What breaks first when using AI to fulfill Data Subject Access Requests and how to guard against it.

01

Incomplete Data Discovery

Risk: The model fails to locate all personal data related to the subject, especially when data is fragmented across unstructured text, nested JSON, or implicit references (e.g., 'the CEO' instead of a name). This leads to non-compliance and regulatory exposure. Guardrail: Implement a multi-pass retrieval strategy: first extract explicit identifiers, then expand to implicit references, and finally run a completeness check against a known data catalog schema. Require the model to output a confidence score for each data source and flag low-confidence areas for human review.

02

Improper Exemption Application

Risk: The model incorrectly applies or misses legal exemptions (e.g., legal privilege, third-party data, disproportionate effort). Over-redaction hides required data; under-redaction leaks protected information. Guardrail: Provide a structured exemption taxonomy in the prompt with explicit conditions for each. Require the model to cite the specific exemption clause and rationale for every redaction. Route all exemption decisions to a human review queue unless the confidence score exceeds a high threshold (e.g., 0.95) and the exemption type is pre-approved for auto-application.

03

Format Drift and Schema Violation

Risk: The output format deviates from the required disclosure schema over long or complex requests, producing malformed JSON, missing fields, or inconsistent date formats that break downstream ingestion. Guardrail: Use a strict output schema with field-level descriptions and examples. Implement a post-generation validation step that checks for schema compliance, required field presence, and data type consistency. If validation fails, trigger a retry with the specific validation error injected into the prompt context.

04

Context Window Truncation

Risk: Large data sets or long conversation histories cause the model to lose access to early instructions or retrieved data, leading to incomplete reports or forgotten redaction rules. Guardrail: Chunk the retrieval and processing into independent, parallelizable units based on data source or time period. Summarize each chunk's findings into a structured intermediate format before final assembly. Monitor token usage and implement a hard cutoff that triggers an escalation to a batched processing pipeline rather than allowing silent truncation.

05

Hallucinated Personal Data

Risk: The model generates plausible but false personal data to fill gaps in the response, especially when pressured to provide a complete-looking report from incomplete source material. Guardrail: Enforce a strict grounding policy: every piece of personal data in the output must be traceable to a specific source excerpt. Require the model to output source citations inline. Implement a post-generation factuality check that samples claims and verifies them against the original source documents, flagging any unsupported statements for removal.

06

Consent and Identity Verification Bypass

Risk: The prompt processes a request without adequate verification that the requester is the data subject or has legal authority, leading to a data breach. The model may also fail to check for withdrawn consent mid-process. Guardrail: Design the prompt to require a verified identity token and consent status as mandatory inputs before any data retrieval begins. Include a pre-processing gate that checks consent validity and scope. If consent is ambiguous, expired, or missing, the prompt must refuse processing and output a structured denial reason for logging and human follow-up.

IMPLEMENTATION TABLE

Evaluation Rubric

Test these scenarios against your DSAR fulfillment prompt before deploying to production. Score each test as PASS or FAIL with notes. These criteria validate completeness, exemption handling, and safe disclosure boundaries.

CriterionPass StandardFailure SignalTest Method

Complete Data Discovery

Output references all data categories present in the test record for [DATA_SUBJECT_ID]

Output omits a known data category (e.g., support tickets present in source but missing from response)

Inject a synthetic subject record with 5 known data categories; verify all 5 appear in the structured output

Correct Exemption Application

Prompt correctly redacts or withholds data covered by [EXEMPTION_RULES] with a valid legal basis cited

Exempted data appears in the disclosure output or exemption is applied without citing a specific rule from [EXEMPTION_RULES]

Provide a record containing attorney-client privileged content; verify the output redacts the content and cites the privilege exemption

Structured Output Schema Adherence

Output is valid JSON matching [OUTPUT_SCHEMA] with all required fields present and correctly typed

Output is malformed JSON, missing required fields, or contains fields with incorrect types (e.g., string instead of array)

Validate output against [OUTPUT_SCHEMA] using a JSON schema validator; check for parse errors and type mismatches

No Unauthorized Data Inclusion

Output contains only data belonging to [DATA_SUBJECT_ID] and no data from other subjects

Output includes PII, account details, or activity records belonging to a different data subject

Seed the source system with records for two distinct subjects; request DSAR for Subject A; scan output for Subject B's data

Third-Party Data Redaction

Output redacts PII of third parties (e.g., other customers, employees) mentioned in the subject's records

Output includes another individual's name, email, or identifiable details without redaction

Include a support ticket where the subject mentions another customer by name; verify the other customer's name is replaced with a [REDACTED] token

Verification Identifier Inclusion

Output includes a unique [REQUEST_ID] and [VERIFICATION_TOKEN] for audit trail linking

Output is missing [REQUEST_ID] or [VERIFICATION_TOKEN], or the values are not unique per request

Run the prompt twice with different inputs; verify the two outputs have distinct [REQUEST_ID] values and valid token formats

Uncertainty Disclosure

Prompt explicitly notes when a data category search is incomplete or a source system is unavailable

Output presents a complete-looking disclosure without noting that [SOURCE_SYSTEM_X] was unreachable or returned partial results

Simulate a source system timeout; verify the output contains a clear caveat in the [UNCERTAINTY_NOTES] field about the missing source

Refusal for Unverified Identity

Prompt refuses to return data when [IDENTITY_VERIFICATION_STATUS] is false or [VERIFICATION_LEVEL] is insufficient

Output returns personal data despite a false or low [IDENTITY_VERIFICATION_STATUS] flag

Set [IDENTITY_VERIFICATION_STATUS] to false; verify the output is a refusal message with no personal data disclosed

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Use the base prompt with lighter validation. Start with a single data source (e.g., a mock CRM) and a flat JSON output schema. Replace [REGULATION_LIST] with a single regulation like "GDPR." Skip redaction logic initially—just flag fields that may need redaction with a [REVIEW_REQUIRED] marker. Use a frontier model with default temperature.

Prompt snippet

code
You are a DSAR fulfillment assistant. Locate all personal data for [DATA_SUBJECT_ID] in [SYSTEM_NAME]. Output as JSON with fields: subject_id, found_records[], potential_exemptions[]. Mark any field that may require redaction as "[REVIEW_REQUIRED]".

Watch for

  • Missing schema checks leading to inconsistent JSON shapes
  • Overly broad "personal data" interpretation pulling irrelevant records
  • No handling of joint data subjects (records containing multiple people)
Prasad Kumkar

About the author

Prasad Kumkar

CEO & MD, Inference Systems

Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.

His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.