The processor record — Article 30(2)
If your company handles personal data on a client’s behalf, GDPR asks you for a second, separate record — not a section of your own.
Article 30(2) shapes it differently on purpose: it is organised per client, and it has no purpose, no lawful basis, no retention and no data-subject categories. Those calls belong to your client, not to you.
Regixo drafts it from two things you declare, and marks the rest as yours.
Land here from: Understand the record (your own Article 30(1) record). You need this page only if you act as a processor for someone else — a SaaS company hosting customer data, an agency running a client’s systems, a payroll bureau.
- Work out whether you need it at all — the controller/processor question, in plain terms. (how ↓)
- Declare how your company acts —
actsAsinregixo.yml. (how ↓) - Say whose data each source holds —
roleandprocessorFor, per source. (how ↓) - Read what Regixo drafted, and what it deliberately left out. (read ↓)
- Answer your part — the fields a scan cannot know. (how ↓)
- Know where it stops — sealing this record is not built. (read ↓)
1 · Do you need this record at all?
One question decides it: for the data in this system, who decides why it is used?
| If… | You are the… | The record you keep |
|---|---|---|
| Your company decides why and how the data is used — your own users, staff, customers. | Controller | Your Article 30(1) record. This is the default. |
| A client decides why and how, and you only act on their instructions — you host it, run it, or process it for them. | Processor | An Article 30(2) record, as well — this page. |
| Both, in different systems — your own product and work you do for clients. | Both | Both records. Regixo keeps them separate, as the law does. |
Being a processor is a fact about a relationship, not something a scanner can detect. Regixo never guesses it — you declare it, and the next two steps are that declaration.
2 · Declare how your company acts
The goal: Regixo drafts the Article 30(2) record only once you say you act as a processor.
Until then nothing changes, and existing setups are untouched — the default is controller.
You edit regixo.yml yourself — it is a declaration about your company.
Your agent can do the re-draft afterwards.
“Rebuild my Regixo draft paperwork from the current map.”
Show the commandHide the commandShow the sentenceHide the sentence
$ # set it in regixo.yml, then re-draft $ regixo report # re-draft only · regixo start also re-scans
actsAs: both # controller (default) · processor · bothHow to check it worked: restart the portal, then open the Compliance ▾ menu — it
gains a Processor record entry, “Art. 30(2) — processing you run for clients”. The portal reads
actsAs at start-up, so one that was already running will not show it until it restarts.
Open it before you have declared any client and the page says so itself: “No sources are declared
role: processor with a processorFor client yet — declare them in regixo.yml
and re-run regixo start.” That is step 3.
3 · Say whose data each source holds
The goal: the record is organised per client, so every processor-role source has to name the client whose data it holds. Two per-source declarations do it.
- id: client-warehouse
kind: sql
driver: snowflake
connectionRef: SNOWFLAKE_URL
region: eu-west-1
role: processor # this system holds someone else's data
processorFor: "Northwind Retail Oy" # whoseA source declared role: processor with no processorFor is not
guessed onto a client and not dropped — it lands in an unassigned bucket as an open call, so you
see it and fix it. The record says so in its own words:
These sources are declared processor-role but name no controller — add `processorFor: "<client>"` to each in regixo.yml so its processing lands on that client's section.
4 · What the record contains — and what it deliberately omits
An Article 30(2) record is not a copy of your own record with the names changed. It carries these, per client:
| Field | Where it comes from | Article |
|---|---|---|
| Controller — the client | Your processorFor declaration. | 30(2)(a) |
| Controller contact | needs you — Regixo has no way to know it. | 30(2)(a) |
| Categories of processing | suggested from the kinds of personal data the mapped sources hold — yours to confirm or rewrite. | 30(2)(b) |
| Transfers outside the EU | suggested — detected from the hosting region of that client’s sources, with the country as a value. | 30(2)(c) |
| Transfer safeguard | needs you when a transfer is detected — the Chapter V ground. | 30(2)(c) |
| Security measures | needs you — “where possible” in the law, and an honest blank here until you describe them. | 30(2)(d) |
| Personal data seen | found — mechanical evidence from the scan. Supplementary, not a statutory Article 30(2) item. | — |
There is no purpose, no lawful basis, no retention period and no categories of data subject on this record.
That is not a gap Regixo will fill later — those are the controller’s calls under Article 30(1), and they belong on your client’s own record. Offering you fields for them would invite you to make decisions that are not yours to make.
If you need them for a system, that system is one where you are the controller, and it belongs on your own record instead.
GDPR · ART. 30(2) · RECORD OF PROCESSING CARRIED OUT ON BEHALF OF CONTROLLERS
Processor record DRAFT
The record you keep for the processing you run for clients — organised per controller, as the law shapes it. It deliberately has no purpose, lawful basis or retention: those calls belong to each client’s own record.
1 controller · 3 fields need you — fill one: regixo annotate set "processor:Northwind Retail Oy" <field> "<value>"
1. On behalf of Northwind Retail Oy
| Controller | Northwind Retail Oy |
|---|---|
| Controller contact | Add Northwind Retail Oy’s contact details (Art. 30(2)(a)) needs you regixo annotate set "processor:Northwind Retail Oy" controllerContact "…" |
| Categories of processing | Hosting, storage and processing of Email, Name, Phone data on Northwind Retail Oy’s behalf suggested |
| Personal data seen | Email, Name, Phone found |
| Transfers outside the EU | Yes — Stripe is hosted in US (us-east-1) suggested |
| Transfer safeguard | Pick the Chapter V ground that covers this transfer — an adequacy decision (Art. 45), an Art. 46 safeguard such as the Commission’s standard contractual clauses, or an Art. 49 derogation. See: regixo annotate grounds needs you regixo annotate set "processor:Northwind Retail Oy" transferSafeguard "…" |
| Security measures | Describe the technical and organisational security measures for this processing (Art. 30(2)(d)) needs you regixo annotate set "processor:Northwind Retail Oy" securityMeasures "…" |
Sources: client-warehouse, stripe · 14 datasets
5 · Answer your part
The goal: close the open calls. They are addressed by client, using the key
processor:<client> — the client’s declared name, so the key survives every re-scan.
$ regixo annotate list $ regixo annotate set "processor:Northwind Retail Oy" securityMeasures "…"
This one’s yours. These are statutory answers about your own organisation — a person writes them, never an agent.
The five fields you can fill on a client section are
controllerContact · processingCategories · transfersOutsideEU ·
transferSafeguard · securityMeasures. Ask for purpose,
lawfulBasis or retention here and Regixo refuses by name — they are not
fields on this record.
--confirm records an answer as a named person’s act, and --why records the
reasoning behind it. Both work exactly as they do on your own record — same rules, same attribution,
same store. See Fill the RoPA for how confirming works.
processor:<client>. So they travel in regixo catalog export, survive
re-scans, and are attributed to whoever confirmed them — there is no second place to look.6 · What is not built
Sealing the processor record is not built. The draft is complete and useful on its own — it is a real Article 30(2) record you can read, fill and hand over — but there is no signed, OFFICIAL version of this record the way there is for your Article 30(1) record. Unlocking and signing covers the controller record and the DORA register today.
The client’s representative slot is not modelled. Article 30(2)(a) also asks, where applicable, for the client’s representative. The client’s name and contact are here; the representative is not, and the record does not pretend otherwise.
How you know the record is finished
- Every client you process for has a section — and no source sits in the unassigned bucket.
- Each section shows no needs you rows: the contact, the categories of processing, the transfer answer and the security measures are all filled.
- The summary line at the top reads 0 fields need you.
- The draft is written next to your other records as
RoPA_PROCESSOR_DRAFT.jsonand the readableRoPA_PROCESSOR_DRAFT.html—regixo reportwrites both.