A data request handler on AWS for a few dollars a month
A subject access request rarely arrives labelled as one. It arrives as an angry email that ends “and send me everything you have on me”, in an inbox that gets forty messages a day, and it sits there. Three weeks later somebody notices, and a thirty-day statutory window has nine days left in it and nobody has started gathering anything. This post walks through a small system whose most valuable single feature is noticing on day zero.

Key takeaways
- The clock starts on arrival. Recognising a request the same day is most of the value.
- Requests arrive worded as complaints, not as legal notices, and both count.
- Gathering is per system and each system is asked once, with a record of what it returned.
- A person reviews every package before it leaves, and executes every deletion.
- Designed on AWS for about $2 a month.
The whole system on one page
Before any code, here is the shape of what we are designing.
- Database
- App integration
- Analytics
- People
The clock starts on arrival
This is the fact the whole design turns on. Response deadlines run from when the request was received, not from when it was recognised, opened or forwarded to the right person. A request that sits unread for three weeks has already consumed most of its window.
So the most valuable thing this system does is notice, on the day, in an inbox where nobody was looking for one. Everything after that — the gathering, the package, the review — is useful and would be manageable by hand if somebody had three weeks. The three weeks is what gets lost.
What runs (the inside)
- The recogniser. Reads inbound mail and asks one narrow question: is somebody asking for their data, or asking for it to be deleted? Part 2 covers the wording it has to catch and the wording it must not over-catch.
- The gatherer. Asks each system what it holds about this person, records the answer including “nothing”, and assembles it. Part 3 is about the systems that cannot be asked programmatically, which is most of them.
- The reviewer. Presents the package with everything that would be sent, highlights what needs redacting, and requires a person to release it. Part 4.
One request, end to end
- App integration
- Security & identity
- Management
- Analytics
- People
In plain words
An email arrives on the 8th complaining about a delivery, and the last line says “please also send me a copy of all the personal data you hold about me and then delete my account”. That is two requests in a sentence at the end of a complaint, and in an ordinary inbox it is genuinely easy to miss.
The recogniser catches both, records the arrival date as day zero, and tells whoever handles these within the hour. Verification is straightforward: the email came from the address on the account. The gatherer asks the six systems that hold anything, five answer within seconds, and the sixth — a booking tool with no export API — becomes a task for a person with three days on it.
By the 11th the package is assembled: the order history, the messages, the account record, the support tickets, and a note that the marketing tool holds only an email address and a subscription state. Somebody spends twenty minutes reviewing it, redacts two lines of an internal note that mention another customer, and sends it on the 12th — four days in, with the deletion scheduled separately once the access request is satisfied.
Design rules that shaped every decision
- The clock starts on arrival. Everything is measured from that date, not from recognition.
- Recognise generously and confirm cheaply. A false positive costs one clarifying question.
- Ask every system, and record “nothing” as an answer. An unasked system is not the same as an empty one.
- Verify proportionately. Over-verification is a recognised way of obstructing a request.
- A person reviews and releases. Nothing leaves and nothing is deleted automatically.
- Deletion is a plan a person executes, with the record of what was deleted kept.
Why this shape
Businesses that get these wrong almost never do so out of unwillingness. They do it because a request arrived worded as something else, went unnoticed, and by the time somebody was looking at it the remaining time was not enough to ask six systems and review the answers properly.
So the design spends its effort on the two places time is lost: recognition, which is one model call on inbound mail, and gathering, which is a fan-out that would otherwise be somebody emailing colleagues. The review is deliberately manual because it is the part where judgement is genuinely required and where an error is expensive.
The next four posts walk through each piece: how a request is recognised, how the requester is verified, how the data is gathered, and how the package is reviewed and delivered. One diagram per post, a cost breakdown, and an engineering reference at the end.
All posts