Inferensys

Prompt

GDPR Data Subject Request Extraction Prompt

A practical prompt playbook for privacy operations teams and DPOs using AI to extract structured request details from data subject access and deletion requests in production workflows.
Operations team reviewing AI workflow automation on laptop, workflow builder visible, casual office setup.
PROMPT PLAYBOOK

When to Use This Prompt

Convert unstructured data subject access and deletion requests into structured, auditable payloads for privacy operations teams.

Privacy operations teams and Data Protection Officers (DPOs) routinely receive data subject access requests (DSARs) and deletion requests through a variety of channels—email, web forms, support tickets, and even physical mail. These requests arrive as unstructured free text with wildly inconsistent formatting. A single inbox might contain a one-line demand for 'all my data,' a legally worded letter citing specific statutes, and a customer support ticket asking to 'close my account and remove my info.' Manually triaging this queue creates operational bottlenecks, risks missing statutory response deadlines (e.g., GDPR's 30-day window), and introduces classification errors that can lead to non-compliance. This prompt is designed to be the first step in an automated pipeline, extracting structured, machine-readable details from raw DSAR text so that requests can be instantly routed, prioritized, and logged.

The ideal user is a privacy engineer or operations lead integrating this prompt into a request intake system. The prompt expects a raw text input and a defined output schema, and it returns a typed JSON payload containing the request category (e.g., access, deletion, rectification), the data subject's identity details, verification status, the scope of the request, and a calculated statutory deadline. It is built for a high-stakes domain, so it includes explicit instructions for handling ambiguity—such as flagging when identity is unverified or when the scope of data requested is vague—rather than guessing. Do not use this prompt for automated legal decisions, for performing the actual identity verification, or for generating a final response to the data subject. Its job is solely to structure the intake.

Before using this prompt, ensure you have a clear understanding of the input channels you will be processing and the downstream system that will consume the structured JSON. The prompt is most effective when paired with a validation layer that checks the output against your expected schema and a human review queue for requests flagged as high-risk or ambiguous. The next section provides the copy-ready prompt template you can adapt to your specific jurisdictional requirements and data taxonomy.

PRACTICAL GUARDRAILS

Use Case Fit

Where the GDPR Data Subject Request Extraction Prompt works well, where it fails, and the operational preconditions required before deployment.

01

Good Fit: Structured Intake Forms

Use when: Users submit DSARs through web forms with clear fields. The prompt excels at normalizing structured input into typed categories (access, deletion, rectification) and extracting identity verification markers. Guardrail: Always validate the extracted identity against your customer database before processing the request scope.

02

Bad Fit: Unstructured Legal Threats

Avoid when: The inbound email is a multi-page legal letter mixing a DSAR with litigation threats, settlement offers, or regulatory complaints. The prompt may extract the DSAR but miss the legal risk context. Guardrail: Route documents exceeding a complexity threshold to human legal review before AI extraction.

03

Required Input: Verified Sender Context

Risk: Extracting a request without verifying the sender's identity or jurisdiction leads to unauthorized data disclosure. Guardrail: The prompt must receive a pre-verified [SENDER_IDENTITY_STATUS] and [JURISDICTION] variable from your identity provider. Never rely on the model to verify identity from the email body alone.

04

Operational Risk: Ambiguous Data Scope

Risk: A request for 'all my data' without specifying systems (CRM, logs, HR) creates an unbounded scope that can break downstream fulfillment. Guardrail: The prompt must output a data_scope_confidence score. If confidence is low, route to a human for scope clarification before triggering automated data collection.

05

Operational Risk: Multi-Jurisdiction Conflicts

Risk: A single request invoking both GDPR and CCPA rights can create conflicting deadlines and redaction rules. Guardrail: The prompt must extract each distinct jurisdictional basis separately. Use a post-processing rule to flag conflicting obligations and escalate to the DPO for resolution.

06

Bad Fit: Voice or Scanned Handwriting

Avoid when: The request arrives as an audio file or a low-quality scan of a handwritten letter. Transcription errors or OCR artifacts will corrupt entity extraction and deadline calculations. Guardrail: Require a human-verified transcript or high-quality OCR text as the [INPUT] before invoking this prompt.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A production-ready prompt for extracting structured GDPR data subject request details from unstructured text, with strict JSON output, null handling, and confidence annotation.

The following prompt template is designed to be copied directly into your AI harness. It instructs the model to act as a privacy operations extraction engine, consuming raw request text and producing a typed JSON payload. The template uses square-bracket placeholders for all dynamic inputs, including the request text, the required output schema, and any operational constraints. Before integrating, replace each placeholder with the actual values your application provides at runtime. This prompt enforces strict behavior: no fabricated data, explicit nulls for missing fields, and confidence scores where evidence is ambiguous. It is the core instruction set you will wrap with validation, retries, and logging in your implementation harness.

text
You are a GDPR Data Subject Request extraction engine. Your only job is to read the provided request text and return a valid JSON object that matches the [OUTPUT_SCHEMA].

Follow these rules exactly:
- Extract only information explicitly stated in the request text. Do not infer, assume, or fabricate any data.
- For any field where the information is not present or cannot be determined, use null.
- For any field where the evidence is ambiguous or partial, include a "confidence" field with a value of "low", "medium", or "high".
- Normalize dates to ISO 8601 format (YYYY-MM-DD).
- Normalize request types to the controlled vocabulary in [REQUEST_TYPE_ENUM].
- If the request mentions multiple jurisdictions, extract each as a separate entry in the "jurisdictions" array.
- Calculate the regulatory deadline from the date of receipt using the rules in [DEADLINE_RULES]. If the receipt date is missing, set the deadline to null.
- Do not include any text outside the JSON object.

[INPUT]

[OUTPUT_SCHEMA]

[REQUEST_TYPE_ENUM]

[DEADLINE_RULES]

[CONSTRAINTS]

To adapt this template, start by defining your [OUTPUT_SCHEMA] as a strict JSON Schema object. This schema should include fields for request_type, data_subject_identity, identity_verification_status, data_scope, jurisdictions, receipt_date, and regulatory_deadline. The [REQUEST_TYPE_ENUM] placeholder should be replaced with a comma-separated list of your supported request types, such as access, deletion, rectification, portability, restriction, and objection. The [DEADLINE_RULES] placeholder must contain clear, jurisdiction-specific rules for calculating the response deadline (e.g., "GDPR: one calendar month from receipt, extendable by two months for complex requests"). The [CONSTRAINTS] placeholder is your final safety net; use it to inject operational rules like "If identity_verification_status is unverified, set data_scope to null and add a note to the response." After replacing the placeholders, test the prompt against a golden dataset of known requests and edge cases, including blank inputs, ambiguous scopes, and multi-language text. The next step is to wire this prompt into an application harness that validates the JSON output against your schema before any downstream action is taken.

IMPLEMENTATION TABLE

Prompt Variables

Inputs required for the GDPR Data Subject Request Extraction Prompt to produce reliable, typed outputs. Replace each placeholder with concrete values before execution.

PlaceholderPurposeExampleValidation Notes

[REQUEST_TEXT]

The raw text of the data subject request, which may include email bodies, web form submissions, or transcribed verbal requests.

I want to know what personal data you hold on me. Please delete my email address and phone number from your marketing lists.

Must be a non-empty string. Check for encoding issues if copied from web forms or email clients. Null not allowed.

[JURISDICTION]

The legal jurisdiction under which the request is being evaluated, which determines the applicable rights and deadline calculations.

GDPR-EU

Must match an allowed enum value: GDPR-EU, GDPR-UK, or MULTI. If MULTI, the prompt should flag for manual review. Validate against a controlled list before injection.

[REQUEST_DATE]

The date the request was received, used for calculating the statutory response deadline.

2025-03-15

Must be in ISO 8601 date format (YYYY-MM-DD). Parse and validate as a real calendar date. Future dates should trigger a warning.

[COMPANY_NAME]

The legal name of the data controller organization, used to contextualize identity verification checks.

Acme Corp EU Subsidiary GmbH

Must be a non-empty string. Should match the registered legal entity name. Null not allowed.

[DPO_EMAIL]

The contact email for the Data Protection Officer, included in the output for downstream acknowledgment workflows.

Must match a basic email regex pattern. Validate format before injection. Null not allowed.

[OUTPUT_SCHEMA]

The strict JSON schema definition that the model must conform to, including required fields, types, and enum constraints.

See full JSON Schema in Output Contract section

Must be a valid JSON Schema object. Validate with a schema validator before injection. The schema should define request_category, identity_verification_status, data_scope, and deadline_calculation fields.

[CONSTRAINTS]

Additional behavioral constraints injected into the prompt, such as handling rules for ambiguous scope or multi-jurisdiction requests.

If request_category is ambiguous, set confidence to LOW and flag for human review. Do not infer data categories not explicitly mentioned.

Must be a non-empty string. Review constraints for conflicts with the output schema. Null allowed if no special constraints are needed.

PROMPT PLAYBOOK

Implementation Harness Notes

Wire this prompt into a DSAR intake pipeline with validation, retry, and human escalation.

The extraction prompt is only one component of a reliable DSAR processing system. To move from a useful prompt to a production-grade intake pipeline, you must wrap the LLM call in application logic that validates the output, handles failures gracefully, and maintains a complete audit trail. This harness is responsible for substituting variables into the template, calling the model, checking the response against the expected schema, and deciding whether the extracted payload is trustworthy enough to ingest into your case management system. Without this layer, even a well-designed prompt will produce occasional malformed JSON, low-confidence classifications, or ambiguous identity verification signals that should never flow into automated workflows.

Begin by constructing the final prompt string from the template, substituting [REQUEST_TEXT] with the raw, unredacted data subject request and [RECEIPT_DATE] with the ISO 8601 timestamp of receipt. Call the LLM with a low temperature (0.0–0.1) to maximize schema adherence. Parse the response and validate the JSON against the output schema: request_type must be one of the defined enum values, identity_verification_status must be a recognized status, and all required fields must be present. If validation fails, construct a retry prompt that appends the original request text, the failed JSON output, and the specific validation errors, then call the model once more. If the retry also fails, log the failure and route the entire request to a human review queue. Do not attempt more than one automated retry for schema validation failures.

Confidence scoring is the primary gating mechanism for automation. After successful schema validation, check the confidence_scores: if request_type_confidence or identity_verification_confidence falls below 0.7, route the request to the human review queue regardless of schema validity. For requests that pass both schema and confidence gates, calculate the statutory deadline by adding one calendar month to receipt_date, adjusting for your organization's jurisdiction rules (e.g., accounting for local holidays or specific regulatory interpretations of 'one month'). Store the complete structured payload in your DSAR case management system, trigger the appropriate workflow based on request_type (access, deletion, rectification, portability, objection, or restriction), and log every extraction with the SHA-256 hash of the raw request text, the full extracted payload, all confidence scores, the reviewer decision if escalated, and the calculated deadline. Never use the extracted output to automatically respond to the data subject without DPO review, even when all confidence scores are high.

IMPLEMENTATION TABLE

Expected Output Contract

The structured JSON payload the prompt must return for a GDPR Data Subject Request. Use this contract to build a downstream validator and integration adapter.

Field or ElementType or FormatRequiredValidation Rule

request_id

string (UUID)

Must be a valid UUID v4 generated by the extraction prompt if not present in [INPUT]

request_type

enum: access | deletion | rectification | restriction | portability | objection

Must match exactly one of the listed enum values; reject any other string

subject_identity.status

enum: verified | unverified | partial | not_provided

Must be one of the four enum values; if no identity evidence is found, set to not_provided

subject_identity.details

object { name, email, id_reference, additional_identifiers }

All sub-fields default to null if not extractable; email must pass a basic regex check if present

data_scope.categories

array of strings from a controlled taxonomy

Each string must match an entry in the approved data category taxonomy; empty array allowed if scope is fully general

data_scope.systems

array of strings

If present, each string must be a non-empty system identifier; null allowed if no systems specified

data_scope.temporal_range

object { start: ISO8601 | null, end: ISO8601 | null }

If provided, dates must be valid ISO8601 strings; null for open-ended ranges; start must be before end if both present

deadline.calculated_date

ISO8601 date string

Must be a valid date exactly 30 calendar days from the receipt date; if receipt date is ambiguous, set to null and flag in warnings

jurisdictions

array of ISO 3166-1 alpha-2 country codes

Each entry must be a valid two-letter country code; at least one jurisdiction required; reject unknown codes

PRACTICAL GUARDRAILS

Common Failure Modes

What breaks first when extracting structured data from GDPR Data Subject Requests and how to guard against it in production.

01

Ambiguous Scope of Request

What to watch: The model fails to distinguish between an access request, a deletion request, and a rectification request when the user's language is vague or mixes multiple request types. This leads to incorrect downstream routing and potential non-compliance. Guardrail: Use a strict enum for request_type in the output schema and instruct the model to default to clarification_needed if the primary intent cannot be determined. Add a pre-processing classification step before extraction.

02

Unverified Identity Assumption

What to watch: The prompt extracts detailed personal data scope or processes a request without flagging that the user's identity has not been verified. This creates a critical data breach risk. Guardrail: Include a required boolean field identity_verified in the output schema. The prompt must be instructed to set this to false unless explicit verification evidence is provided in the input context. Downstream systems should block fulfillment if this flag is not true.

03

Multi-Jurisdiction Deadline Miscalculation

What to watch: The model calculates a single deadline based on GDPR (30 days) but misses that the request also falls under a national law with a shorter timeline, or fails to account for valid extensions. Guardrail: Instruct the model to extract all mentioned jurisdictions and calculate a deadline for each. Add a strictest_deadline field and a deadline_calculation_notes field to show the work. Always require human review of the final deadline before it is communicated to the requestor.

04

Hallucinated Data Categories

What to watch: The model invents specific data categories (e.g.,

05

Ignoring Implicit Refusal to Narrow Scope

What to watch: The organization asks the requestor to clarify or narrow an overly broad request, and the requestor's follow-up is non-committal or repeats the broad request. The model interprets this as a valid narrowed scope. Guardrail: Include a scope_clarification_status field with values like narrowed, still_broad, or no_response. The prompt must be instructed to detect when a follow-up message does not actually provide the requested clarification and to flag the scope as unresolved for human intervention.

06

Conflation of Controller and Processor Requests

What to watch: A request is directed at a data processor, but the model extracts it as a standard controller request, missing the critical step of identifying the obligation to forward the request to the relevant controller. Guardrail: Add a recipient_role field to the output schema with options for controller and processor. The prompt must be instructed to identify the recipient's role and, if processor, to extract the identity of the controller and set a must_forward_to_controller flag to true.

IMPLEMENTATION TABLE

Evaluation Rubric

Criteria for testing the GDPR Data Subject Request Extraction Prompt before production deployment. Each row defines a pass standard, a failure signal, and a concrete test method to validate output quality.

CriterionPass StandardFailure SignalTest Method

Request Type Classification

Output field [REQUEST_TYPE] is exactly one of the defined enum values: 'access', 'deletion', 'rectification', 'portability', 'restriction', 'objection'.

Missing field, null value, or value not in the enum list.

Run 50 labeled examples per request type. Assert enum membership and exact match to ground truth label.

Identity Verification Status

Output field [IDENTITY_VERIFIED] is a boolean. When [VERIFICATION_EVIDENCE] is present, it contains a direct quote from [INPUT_TEXT].

Boolean is null or [VERIFICATION_EVIDENCE] contains a hallucinated quote not found verbatim in the input.

Run 30 examples with explicit ID proof and 30 without. Assert boolean correctness and exact string match of evidence span.

Data Scope Specification

Output field [DATA_CATEGORIES] is a non-empty array of strings when scope is specified. Each string maps to a category mentioned in [INPUT_TEXT].

Array is empty when scope is specified, or contains categories not mentioned in the input.

Run 20 examples with explicit scope lists. Assert array length > 0 and that every element has a corresponding substring match in the input.

Deadline Calculation

Output field [RESPONSE_DEADLINE] is an ISO 8601 date. It is exactly 30 calendar days from [RECEIPT_DATE] unless a jurisdiction-specific override is triggered.

Date is missing, incorrectly calculated, or uses the wrong jurisdiction rule.

Run 10 examples with known receipt dates and jurisdictions. Assert date difference equals 30 days for GDPR-default cases.

Multi-Jurisdiction Handling

When [INPUT_TEXT] references multiple regulations, output field [APPLICABLE_REGULATIONS] is an array containing all referenced jurisdictions. [RESPONSE_DEADLINE] uses the shortest applicable deadline.

Array is missing a referenced regulation, or deadline is not the minimum of the applicable rules.

Run 10 examples mixing GDPR, CCPA, and LGPD references. Assert array completeness and that deadline equals the minimum calculated value.

Ambiguous Scope Flagging

When the data scope is ambiguous, output field [SCOPE_AMBIGUITY_FLAG] is true and [CLARIFICATION_NEEDED] contains a non-empty string describing the ambiguity.

Flag is false when scope is ambiguous, or [CLARIFICATION_NEEDED] is empty or generic.

Run 15 examples with deliberately vague scope language. Assert flag is true and clarification string length > 20 characters.

Source Grounding

Every extracted field value that is not a derived calculation must have a corresponding substring match in [INPUT_TEXT].

A field contains a value not present in the input text, indicating hallucination.

Automated substring check: for each non-derived field, assert value is a substring of [INPUT_TEXT] or is null.

Null vs. Missing Distinction

Fields with no information in the input are null. Fields where the input explicitly states the information is unavailable are set to the string 'UNAVAILABLE'.

Null and 'UNAVAILABLE' are used interchangeably, or a field is populated with a guess when evidence is absent.

Run 20 examples with known missing vs. unavailable fields. Assert exact match to expected null or 'UNAVAILABLE' token.

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Use the base prompt with a frontier model and a simple JSON schema. Focus on extracting the core fields: request_type, data_subject_identity, identity_verification_status, and data_scope. Skip deadline calculations and jurisdiction analysis. Use a single example in the prompt to guide output shape.

Watch for

  • The model conflating access and deletion requests when both are mentioned.
  • Missing identity_verification_status when the request is ambiguous.
  • Overly broad data_scope when the user says "everything" or "all my data."
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.