This recipe keeps a simple submissions log in Google Sheets: one row per submission, per client, added when the email actually goes out, and removed again when the candidate is erased in PlacementFlow.
A Sheet is a new copy of personal data. Every row holds a candidate's name and contact details, and your agency is responsible for that copy: who the Sheet is shared with, how long rows are kept, and answering access and erasure requests. Keep the Sheet private to the people who need it, and keep the erasure Zap below switched on for as long as the logging Zap is.
candidate_id, First name, Last name, Email, Client, Client contact, Sent at, Type, Consent, PlacementFlow linkThe candidate_id column is what the erasure Zap uses to find rows, so keep it.
test is false, andcandidate__representation_consent does not exactly match withdrawn.candidate_id → candidate_idcandidate__first_name, candidate__last_name, candidate__emailclient__namerecipient_contact__namesent_atsubmission_type (cv or notes)consent_authority (candidate for the candidate's own consent, attestation for a recorded recruiter attestation)candidate__pf_urltest is false.candidate_id, value candidate_id.A candidate submitted to several clients has several rows. The lookup returns one row per run, so either repeat steps 3 and 4 a few times with a filter that stops when nothing is found, or use a lookup that returns multiple rows and loop over them (Looping by Zapier). Check the Sheet after the first real erasure to confirm every row went.
A spreadsheet has no record id of its own, so there is usually nothing to write back here: candidate_id in the Sheet is the link between the two. If you also run a CRM Zap (see the Bullhorn or Atlas recipes), the CRM id it writes back appears on later events as candidate__external_id, and you can add it as a column to cross-reference the CRM record.