Set up and run California DROP

This guide walks through enabling DROP (Delete Request and Opt-out Platform) in Transcend and running one operator-led cycle: pull the CPPA download from CalPrivacy, index records, build and upload matched records in the run wizard, run erasures, and generate the report-back file.

New to DROP? Start with California DROP with Transcend for concepts, scope, and volume planning. Data brokers must begin processing by August 1, 2026, on a 45-day cycle. This article is not legal advice.

  • A CalPrivacy data broker account and CPPA-issued broker ID.
  • DROP enabled on your Transcend organization via Early Access (see Enable Data Broker DROP below).
  • A DROP API key from CalPrivacy for the environment you will use. Transcend pulls the CPPA download through the DROP API. Start in sandbox.
  • An Internal Workflows V2 erasure workflow (not published to the Privacy Center) with a data subject selected. See the Workflows quickstart if you need to create one.
  • A way to match CalPrivacy’s hashed identifiers against your records and produce a matched-records CSV. Transcend does not match for you.

Use an email as coreIdentifier on every matched-records row.

DROP ships behind an Early Access feature gate. An organization admin can turn it on without waiting on Transcend:

  1. Open Administration → Early Access in the Admin Dashboard.
  2. Find Data Broker DROP and turn it On.
  3. Refresh the Admin Dashboard. DROP Requests appears in the left navigation.

Details on Early Access gates: Early Access Features.

Organization admins manage Early Access. If Data Broker DROP is missing or blocked for your org, contact your Transcend account team.

Open DROP Requests → Configuration. This is a one-time, per-organization setup.

DROP Configuration: broker ID, sandbox or production environment, erasure workflow, CPPA API key, and list types
SettingNotes
Broker IDYour CalPrivacy-issued identifier (e.g. DB-#####). Echoed into report-back filenames.
EnvironmentSandbox while you test; production for live cycles.
List typesThe deletion-list types you process (email, phone, maid, ctv, ndz, name_vin).
Erasure workflowSelect the Internal erasure workflow DROP requests should run through. It must have a data subject. DROP data subject request (DSR) creation fails with “No subject associated with workflowConfigId…” if the subject is missing.
DROP API keyYour CalPrivacy DROP API key for the selected environment.

Click Save settings. Prefer sandbox credentials first. Changing the data broker ID or environment clears the stored API key — re-enter the key before saving.

Sandbox pulls validate your CPPA API key and download test deletion lists. They do not count toward the 45-day DROP access cadence — only production pulls do.

Each DROP run opens a Status wizard that tracks the cycle end to end:

  1. Download the CPPA requests
  2. Index the records
  3. Build your matched-records file
  4. Submit deletion requests
  5. Wait for data subject requests
  6. Review and report back

The Runs tab lists every download cycle, indexing status, and CPPA deadline countdown. Use Pull CPPA requests now to start a new cycle.

DROP Runs list with Pull CPPA requests now, download cycles, and indexing status

On DROP Requests → Runs, click Pull CPPA requests now. Prefer one open run at a time: finish or park a run before pulling again. Sequencing is report, then pull — finish and submit the prior report-back before polling the next list.

Wait until indexing completes on the run (Indexed status). Indexing materializes one row per CPPA work item. Matching and starter-file download only work against indexed records. If indexing stops early, use Index records / resume on the run page.

On the run Status tab, download the outstanding starter file (or all indexed records). The starter includes dropRecordId, dropListType, optional hash, cppaStatusCode, coreIdentifier, email, phone, and your org’s configured identifier columns.

DROP run Status wizard on Build your matched-records file, with Download outstanding starter file

Match hashed identifiers against your records using CalPrivacy’s standardization and hashing rules, then fill the matched-records CSV using the shape and coreIdentifier rules below.

Still on the run Status tab, choose CSV to upload your matched-records file (or apply a declared status to remaining records). Anything left without a DSR or declared status reports to CalPrivacy as not found (status 5).

DROP run Status wizard on Submit deletion requests with Choose CSV and Download outstanding starter file

The upload wizard validates rows, then lets you submit DSRs and declare status codes. Map CSV columns to request identifiers (email → email, phone → phone). Transcend groups rows that share the same coreIdentifier into one erasure request.

Matched-records upload wizard validating pending DSRs before Submit

Erasures run through your selected workflow and connected integrations. Spot-check one DSR immediately: open it and confirm the Identifiers panel shows email and/or phone. If Identifiers is empty, stop the batch and fix coreIdentifier / column mapping before continuing.

DROP-originated erasure request Details tab showing Identifiers for email and phone

On the run detail page, generate the report. Transcend builds the CalPrivacy report-back file once every request in the run has reached a terminal state, or once the run has passed its 45-day deadline. Download the report-back CSV, upload it to the CalPrivacy Data Broker Portal, then mark the run submitted in Transcend.

Headers are camelCase. Exact names matter.

dropRecordId,dropListType,coreIdentifier,email,phone,maid,cppaStatusCode
ColumnRequiredNotes
dropRecordIdYesEcho the CPPA download Id verbatim (string, never an Excel float).
dropListTypeYesLowercase list type from the download.
coreIdentifierYes — use emailUse the person’s email. Same email across rows for the same person → one DSR.
email / phone / customWhen matchedPut plaintext in the right column. Do not use a single matched_value column. Fill these even when coreIdentifier is also an email.
cppaStatusCodeOptionalOnly 2 (exempt) or 4 (opted out) when declaring instead of erasing. Leave blank for normal erasures. Do not send 3 or 5.
hashOptionalSafe to keep from the starter file; not required for intake.

Do not send: person_key, drop_record_id, drop_list_type, status_override, matched_on, matched_value, report_status, or other snake_case legacy headers.

Row model: one DROP id per hashed identifier per list. Same person on email + phone + MAID → three rows, three dropRecordIds, one coreIdentifier.

Records omitted from the upload report as status 5 (not found).

Put the person’s email in coreIdentifier. That is what Transcend uses to group rows into one data subject request (DSR) and to create Identifiers. Opaque keys like person-0003 do not work.

On every matched-records row for the same person:

  • Set coreIdentifier to their email.
  • Still fill the email and phone columns when those list types matched (routing uses those columns).
  • In the upload wizard, map email → email and phone → phone.
  • After upload, open one DSR and confirm Identifiers shows email and/or phone before you treat the batch as successful.
dropRecordId,dropListType,coreIdentifier,email,phone,maid,cppaStatusCode
A7kP2xQ9Lm4R,email,alex.rivera@example.com,alex.rivera@example.com,,,
B8mQ3yR0Mn5S,phone,alex.rivera@example.com,,+14155551001,,
C9nR4zS1No6T,maid,alex.rivera@example.com,,,IDFA-0000-EXAMPLE,

→ one person, three DROP record ids, one deletion request. coreIdentifier is the email on every row.

CalPrivacy’s lists contain one row per hashed identifier, so the same person can appear more than once (for example email and phone). Transcend groups matched-records rows by coreIdentifier before creating a request, and attaches every contributing DROP record id to that request for accurate report-back. DROP-originated requests show Request Origin: DROP on the Details tab.

Sandbox CPPA downloads may use numeric ids. Production ids are typically 12-character Base62. Always copy the exact id into dropRecordId and into report-back.

CodeMeaning
2Exempt — match found, but data is exempt from deletion (or declared exempt at intake).
3Deleted — match found and non-exempt personal information was deleted (earned when the DSR completes; do not declare at intake).
4Opted out — multiple consumers share the identifier; all were opted out of sale or sharing (or declared at intake).
5Not found — no matched-records row, or the request did not reach a terminal state before the deadline.

Do I submit the report-back file myself? Yes in the current phase. Transcend generates the file; you download it and upload it to the CalPrivacy portal.

Will one person create multiple erasure requests? No, if matched records use the same email in coreIdentifier. Transcend creates one request that still carries every DROP record id.

Use an email as coreIdentifier on every matched-records row.

Does Transcend store matched records in plaintext? Matched identifiers use the same encrypted request pipeline as other data subject requests. Browser intake encrypts identifiers to your Sombra key before submit.

What if requests are still open near the 45-day deadline? Transcend blocks report generation while requests are pending, with an exception once the run passes its deadline, so you are never stuck unable to report.

Is sandbox different from production? Mostly the same CSV shapes and status codes, with a different environment and API key. One known difference: CalPrivacy sandbox downloads have used numeric work item ids, while CalPrivacy’s published specifications describe ids as 12-character Base62 strings. Treat Id / dropRecordId as an opaque string you echo back. Finish one full sandbox cycle — including a DSR Identifiers spot-check — before switching to production.

Upload failed with “No subject associated with workflowConfigId”? Open the erasure workflow selected in DROP Configuration and set a data subject, then publish if needed. Retry the matched-records upload.

Can I turn DROP on myself? Yes — Administration → Early Access → Data Broker DROP → On. If the gate is blocked for your organization, ask your Transcend account team.