← All guides AI Release
RU Subscribe to @ai_release1

How to delete your personal data from the internet: data broker opt-outs

Updated: 08.11.2026 · AI Release · @ai_release1
How to delete your personal data from the internet: data broker opt-outs

TL;DR

A data broker is a company that collects and resells personal profiles. An opt-out is the broker’s process for stopping the sale or display of your data. This workflow is local-first: you keep the request text, confirmations, and verification output on your own machine.

Requirements and setup

Illustration: Requirements and setup
Illustration: Requirements and setup

If you are choosing consumer AI tools for this workflow, see AI tools for everyday people: what is actually useful.

Check the base tools:

curl --version
python3 --version
bash --version

Example output shape:

curl 8.x.x ...
Python 3.x.x
GNU bash, version 5.x.x ...

Your versions can differ. Save the output in ~/privacy-removal/tool-versions.txt so you can reproduce the workflow later.

Step 1. Create the local removal workspace and inventory

What to do: Create a folder structure, a request log, and a short inventory of the personal data you want removed. Use one row per broker, not one row per data point.

mkdir -p ~/privacy-removal/{inbox,outbox,evidence}
cd ~/privacy-removal
printf 'broker,category,profile_url,request_date,request_id,status,next_check\n' > removal-log.csv
curl --version > tool-versions.txt
python3 --version >> tool-versions.txt

Create the inventory file:

cat > inventory.txt <<'EOF'
Full name: Alex Example
City: Example City
Emails: alex@example.com
Phone: +1-555-0100
Usernames: alex-example
Public profile URLs to check:
- https://<broker-domain>/profile/123
EOF

Replace every <...> value with the real value from the broker’s page or your own records. Keep the example row format:

broker,category,profile_url,request_date,request_id,status,next_check
Acme Data,people-search,https://<broker-domain>/profile/123,2025-01-15,ACME-12345,submitted,2025-02-14

Why: A local log prevents duplicate requests and gives you evidence if a profile reappears. The inventory keeps the minimum facts needed for a deletion request; do not collect more than the broker asks for.

How to check: Confirm the files exist and the CSV header is correct.

find . -maxdepth 2 -type f -print
head -1 removal-log.csv

Expected output:

./removal-log.csv
./inventory.txt
./tool-versions.txt
broker,category,profile_url,request_date,request_id,status,next_check

Step 2. Submit broker deletion requests and capture evidence

Illustration: Step 2. Submit broker deletion requests and capture evidence
Illustration: Step 2. Submit broker deletion requests and capture evidence

What to do: Create one reusable deletion-request template, render a broker-specific copy, submit it through the broker’s published channel, and log the request ID.

Create the template:

cd ~/privacy-removal
cat > deletion-request.txt <<'EOF'
To: <broker-privacy-contact>
Subject: Personal data deletion request - <full-name>

Broker: <broker-name>
Profile URL: <profile-url>
Requester: <full-name>
Contact email: <email>

Please delete the personal data associated with the profile above. If your organization requires a specific form or identity check, reply with the required channel and the request reference number.

Thank you,
<full-name>
EOF

Render an example request with Python’s standard library:

python3 - <<'PY'
from pathlib import Path

fields = {
    "<broker-privacy-contact>": "privacy@acme-data.invalid",
    "<full-name>": "Alex Example",
    "<broker-name>": "Acme Data",
    "<profile-url>": "https://acme-data.invalid/profile/123",
    "<email>": "alex@example.com",
}

text = Path("deletion-request.txt").read_text()
for key, value in fields.items():
    text = text.replace(key, value)

Path("outbox/request-acme.txt").write_text(text)
print("wrote outbox/request-acme.txt")
PY

Expected output:

wrote outbox/request-acme.txt

The .invalid domain is a reserved example domain. Replace it with the real broker contact and profile URL from the broker’s privacy page.

Submit the generated text through the broker’s opt-out form or privacy email. After submission, copy the confirmation into inbox/ and add the request ID to the CSV:

printf 'Acme Data,people-search,https://<broker-domain>/profile/123,2025-01-15,ACME-12345,submitted,2025-02-14\n' >> removal-log.csv
EvidenceLocal pathWhat it proves
Exact request text`outbox/request-acme.txt`What you sent and when
Broker confirmation`inbox/acme-confirmation.eml`Request ID and broker response
Public profile check`evidence/acme-profile-check.html`Whether the page was still reachable

Why: A rendered copy proves the exact wording and recipient. A request ID is the reference you use in follow-ups. The table keeps evidence separate from your working notes.

How to check: Confirm that no placeholder remains and that the log row is present.

grep -q '<' outbox/request-acme.txt && echo "ERROR: placeholder remains" || echo "OK: no placeholders"
grep 'ACME-12345' removal-log.csv

Expected output:

OK: no placeholders
Acme Data,people-search,https://<broker-domain>/profile/123,2025-01-15,ACME-12345,submitted,2025-02-14

If you use an AI agent to draft replies or sort confirmations, apply the controls in AI agent security: protecting your data during automation.

Step 3. Verify removal and schedule rechecks

Illustration: Step 3. Verify removal and schedule rechecks
Illustration: Step 3. Verify removal and schedule rechecks

What to do: Check the public profile URL, save the HTTP result, update the CSV status, and set a recheck date.

cd ~/privacy-removal
curl -L -s -o evidence/acme-profile-check.html -w '%{http_code}\n' 'https://<broker-domain>/profile/123'

Example result:

404

A 404 supports removal: the profile page is no longer reachable. A 200 means the page is still live. A 403 or 429 is inconclusive; open the URL manually in a private browser window and record what you see.

Update the log after verification:

python3 - <<'PY'
import csv
from pathlib import Path

p = Path("removal-log.csv")
rows = list(csv.DictReader(p.open()))
for row in rows:
    if row["request_id"] == "ACME-12345":
        row["status"] = "removed"
        row["next_check"] = "2025-02-14"

with p.open("w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=rows[0].keys())
    writer.writeheader()
    writer.writerows(rows)

print("updated")
PY

Expected output:

updated

Final checklist:

Why: Removal is not complete when the form is submitted. You need a public-page check and a dated follow-up because profiles can be recreated or relisted.

How to check: Confirm the status changed and the evidence file is not empty.

grep 'ACME-12345' removal-log.csv
wc -c evidence/acme-profile-check.html

Expected output shape:

Acme Data,people-search,https://<broker-domain>/profile/123,2025-01-15,ACME-12345,removed,2025-02-14
1234 evidence/acme-profile-check.html

The byte count will differ. A zero-byte file means the request produced no saved body; rerun curl without -s and inspect the error.

Troubleshooting

Problem. The verification command cannot resolve the broker host.

getent hosts <real-broker-domain>
curl -I 'https://<real-broker-domain>/'

Problem. The Python renderer cannot find the template.

cd ~/privacy-removal
ls -la
python3 - <<'PY'
from pathlib import Path
print(Path("deletion-request.txt").exists())
PY

Expected output:

True

Problem. The placeholder check reports an error.

grep -n '<' outbox/request-acme.txt

Summary and next steps

You now have a local evidence log, a tested request template, and a verification command. Next, replace the example broker with a real one, submit one request, and schedule the recheck date in your calendar.

FAQ

Do I have to pay a data broker to delete my data?

Use the broker’s published free opt-out or privacy contact where one exists. If a broker offers a paid service, verify the price and terms on its own page before paying.

How long does a data broker deletion request take?

Deadlines vary by broker and jurisdiction. Check the broker’s privacy notice or confirmation email for the stated deadline; do not rely on a fixed number from another guide.

Can I remove a people-search profile without creating an account?

Many brokers provide a web form or privacy email that does not require a full account. If the form requires verification, use the minimum identity proof the broker documents and keep the confirmation.

Are local tools enough to keep my data removed?

Local tools give you a repeatable log and evidence, but they do not force a broker to act. You still need to submit each request through the broker’s channel and recheck the public profile on your scheduled date.

🤖 AI summary