Making Sense of the Dates in the OneTrust Data Subject Profile Updated Event
A customer recently asked me a deceptively simple question: what do the dates in the Data Subject Profile Updated event payload actually mean, and when are they populated? It is a fair thing to ask, because the payload carries several date fields, they interact with consent state in ways that are not obvious, and OneTrust does not document the behaviour anywhere I could point them to.
So I did some testing to make sure I could articulate exactly what each one is set to. This is the write-up I wish had existed when the question came in. It covers the three dates that cause the most confusion, ConsentDate, ActivationDate and WithdrawnDate, and how each behaves across re-consent, withdrawal and double opt-in (DOI).
ConsentDate
ConsentDate signifies when the purpose was last consented to.
- If the data subject consents again, it is updated to the most recent time they provided consent.
- If the data subject withdraws their consent,
ConsentDatestays set to the last time they had consented. It does not clear. Withdrawal is reflected elsewhere: thetransactionStatusbecomesWITHDRAWNand theWithdrawnDateis populated. - For DOI purposes,
ConsentDateis only populated after the confirmation has been received. Until the double opt-in is confirmed, there is no consent date to report.
The mental model that helps: ConsentDate always points at the latest affirmative consent event. Withdrawal never rewrites it; only a new consent does.
ActivationDate
ActivationDate is the one that trips people up, because most of the time it is blank.
- It is blank unless the consent was collected through a DOI collection point. And even then, it stays blank until the confirmation has been received.
- When the confirmation is received for a DOI purpose,
ActivationDateis set to the same value asConsentDateat that moment. - After that, the two dates diverge. If the data subject provides new consent later,
ConsentDateis updated butActivationDateremains as it was. It captures the first activation, not the latest consent. - For non-DOI purposes,
ActivationDateis never populated.
So ActivationDate is effectively “when this DOI consent was first confirmed and became active”, and it is frozen at that point. If you see it populated, you are looking at a double opt-in purpose that has been confirmed at least once.
WithdrawnDate
WithdrawnDate is the most straightforward of the three.
- It is only ever populated if the data subject has withdrawn consent.
- If a data subject re-consents after previously withdrawing,
WithdrawnDateremains populated. It is not cleared. As withConsentDateon withdrawal, the state change is carried by the other fields:transactionStatusreturns toACTIVEandConsentDateis updated to the new consent.
In other words, WithdrawnDate records the last withdrawal that happened, and it persists even once the subject is active again. To know the current state you have to read it together with transactionStatus, not on its own.
Reading them together
No single date tells you the current consent state. The dates are a history; transactionStatus is the current state. Read them as a pair:
| Field | What it records | Cleared on re-consent? | Cleared on withdrawal? |
|---|---|---|---|
ConsentDate | Last affirmative consent (DOI: only after confirmation) | Updated to the new date | No, stays at last consent |
ActivationDate | First DOI confirmation; blank for non-DOI | No, frozen at first activation | No |
WithdrawnDate | Last withdrawal | No, stays populated | Set/updated |
A worked example makes the interaction concrete. Take a DOI purpose that a subject opts into, confirms, later withdraws, then opts back into:
- Opt-in submitted (not yet confirmed). All three dates blank.
transactionStatusreflects a pending state. - Confirmation received.
ConsentDateandActivationDateare both set, to the same value.WithdrawnDateblank.transactionStatusACTIVE. - Consent withdrawn.
ConsentDateunchanged,ActivationDateunchanged,WithdrawnDatenow set.transactionStatusWITHDRAWN. - Re-consents (and re-confirms).
ConsentDateupdated to the new consent,ActivationDatestill frozen at step 2,WithdrawnDatestill holds the step 3 value.transactionStatusback toACTIVE.
By the end, all three dates are populated and they point at three different moments. That is by design, and it is exactly why reading any one of them in isolation is misleading.
The takeaway
If you are building an integration off the Data Subject Profile Updated event, treat the dates as an append-mostly history rather than live flags. ConsentDate moves forward with each new consent, ActivationDate is a one-time DOI marker, WithdrawnDate sticks once set, and none of them clear on the state change you might expect them to. Whenever you need the current position, branch on transactionStatus and use the dates for the “when”, not the “what”.