eraser

Home · Docs · 1.5

Handling Broker Replies

What to do when a data broker answers a removal request. Most replies need no repo change; the ones that do are broker-level facts, recorded in data/brokers.yaml.

How replies reach you

Replies land in the mailbox you sent from. eraser monitor is the automated path: it pulls broker-domain mail over IMAP, classifies each one (internal/inbox/classifier.go), and writes SQLite history + pipeline rows (eraser pipeline shows what still needs a human). Reading the inbox by hand is the same job without the database writes.

Per-request status (sent, acknowledged, confirmed, overdue) lives in your mailbox and the SQLite history - not in this repo. Only facts about the broker itself go in data/brokers.yaml. See EU-NOTES.md for why there’s no review-status file here.

Once you’ve actioned a reply, move it out of the inbox (Trash is fine - it’s reversible; nothing here empties the trash).

Response → action

Classifications match ResponseType in internal/inbox/classifier.go.

Reply saysTypeAction
Deletion done / suppressed / “we no longer hold your data”successnone - archive the mail
“No record / no match for you” from a genuine brokerno_data_held (No data held)none - they’re still a real broker, a future re-scrape may list you again
“We are not a data broker” / “B2B only, not in scope”rejectedremove the entry from data/brokers.yaml, then check the count floor (below)
“We won’t process this by email - use our web form / portal”form_requiredset email: "", set/refresh opt_out_url to the form they name, add a dated notes: line
Won’t act without a government-ID document-set category: requires-id, add a dated notes: line (users exclude this category in bulk)
Confirmation / identity link to clickconfirmation_requiredclick it (or run eraser confirm) - no data change
Bounce / dead addressbouncederaser mark-bounced <id>, or set email: "" + dated note by hand. Never delete a real broker over a bounce - MarkEmailUnreachable in internal/broker/broker.go exists so the record survives for a later working address
Refuses on a real statutory exemption (FCRA / GLBA / DPPA), genuine dead endrejectedset email: "", add a dated notes: line citing the basis; keep the row (see the goodhire entry)

Clear no-record replies are separate from deletion confirmations and refusals. Triage a no_data_held reply as no action, but check it first: the request moves to “No data held” only when the reply is confident (at least 0.7) and not flagged for review. Subject lines like “not found”, “no record” or “unable to locate” no longer score as rejections from the subject line alone; the body decides. Use the reclassify action on any older reply that still shows rejected and reads as no-record. Conditional replies or requests for identity verification still need review. On upgrade, Eraser reclassifies qualifying saved replies once, using their stored text without fetching mail. It only resolves the current request and superseded pending work when the latest reply is confident; newer requests, newer tasks, completed/skipped work, and manual pipeline progress are preserved. Original messages and task notes remain in history.

“Remove the entry” vs. “blank the email” is a judgement call: delete when the company is genuinely not a broker and there’s nothing to come back to; blank + note when they’re a broker you just can’t reach by email, or a dead end worth remembering.

Editing data/brokers.yaml