Skip to main content

Self-hosted CLI that automates CCPA/CPRA data-broker opt-out requests via Playwright

Reason this release was yanked:

Not ready

Project description

OptOut

Self-hosted CLI tool that automates submitting opt-out and data-deletion requests to data brokers.

You run it on your own machine with your own information. There is no central server, no accounts, no SaaS. Because you are the data subject submitting on your own behalf, the entire "authorized agent" legal apparatus that commercial services like DeleteMe and Optery have to build does not apply here.


What it does and does not do

Does:

  • Submit opt-out / deletion requests to people-search and marketing data brokers.
  • Track deadlines (CCPA: 45 days, GDPR: 30 days, etc.) and surface overdue requests.
  • Re-scan brokers periodically and re-submit if your data reappears.
  • Open a real browser window (Chromium) so you solve CAPTCHAs — no bot-detection arms race.
  • Send opt-out emails from your own inbox so brokers can't block "the service."

Does not:

  • Submit requests for anyone other than the person running the tool.
  • Touch credit bureaus (Experian, Equifax, TransUnion) — those have separate, regulated dispute processes.
  • Remove government records, court filings, or news articles.
  • Guarantee removal from sites that ignore opt-out requests.
  • Store your personal information anywhere except your own machine (~/.config/optout/).

Install

Requirements: Python 3.11+ and pip (or uv).

git clone https://github.com/your-username/optout.git
cd optout
pip install -e ".[dev]"          # or: uv pip install -e ".[dev]"
playwright install chromium      # one-time browser download

Quickstart

1. Initialize your profile

optout init

The interactive wizard asks for your name, address, email, and SMTP credentials. It writes ~/.config/optout/config.yml (mode 600) and creates the local SQLite database.

2. Queue brokers for opt-out

optout brokers list              # see all supported brokers
optout queue                     # queue all brokers
optout queue --broker whitepages # queue one specific broker

3. Submit opt-out requests

optout submit

A browser window opens for each web-form broker. Follow the on-screen prompts — select your listing, solve CAPTCHAs, confirm emails. Email-method brokers are submitted automatically using your configured SMTP credentials.

4. Check status

optout status

Shows a table of every submission: method used, current status, statutory deadline, and days remaining.

5. Re-scan periodically

optout monitor

Checks which brokers still list you and re-queues any that have re-added your data. Cron-friendly — run it monthly.


Commands

optout init                      # interactive setup wizard
optout brokers list [--category] # list all known brokers
optout brokers info <slug>       # details + your submission history for one broker
optout scan [--broker SLUG]      # check which brokers currently list you
optout queue [--broker SLUG]     # add brokers to the submission queue
optout submit [--broker SLUG]    # process the queue and submit opt-outs
optout status [--broker] [--status] # table of submissions, deadlines, callouts
optout monitor                   # one-shot re-scan (schedule with cron or launchd)
optout escalate                  # send follow-ups for submissions past their deadline
optout export                    # dump all submission history as JSON

Configuration

~/.config/optout/config.yml is generated by optout init. Key sections:

profile:
  legal_name: "Jane Q Public"
  current_address:
    street: "123 Main St"
    city: "Austin"
    state: "TX"
    zip: "78701"
  emails:
    current: ["jane@example.com"]
  phones:
    current: ["+15125551234"]

email:
  method: smtp
  smtp:
    host: smtp.gmail.com
    port: 587
    username: jane@example.com
    password_env: OPTOUT_SMTP_PASSWORD   # never stored in the file itself

playwright:
  headless: false    # keep false so you can solve CAPTCHAs
  slow_mo_ms: 0

monitoring:
  rescan_interval_days: 30

Sensitive values (SMTP passwords) are read from environment variables, not stored in the config file.


Supported brokers

Slug Name Method Verification
whitepages Whitepages Web form Phone (SMS)
spokeo Spokeo Web form Email
beenverified BeenVerified Web form Email
radaris Radaris Email None
mylife MyLife Email None

Community contributions add brokers as YAML files — see CONTRIBUTING.md.


Running tests

pytest                           # full suite
pytest tests/test_production_brokers.py  # validate all broker YAMLs only

Legal basis

OptOut cites the applicable statute in every opt-out email and web-form submission:

  • CCPA §1798.105 (California Consumer Privacy Act) — right to deletion, 45-day response window
  • CPRA (California Privacy Rights Act) — extends CCPA, same 45-day window
  • GDPR Art. 17 (General Data Protection Regulation) — right to erasure, 30-day response window
  • VCDPA, CPA, CTDPA, UCPA — state-level equivalents

Each broker's YAML lists which statutes apply. The tool automatically includes the correct citation in every submission.


Honest limitations

  • Removal is not guaranteed. Some brokers comply reliably; others are slow or re-add data.
  • Web-form flows break when brokers redesign their opt-out pages. If a broker's steps stop working, open an issue or submit a YAML fix.
  • CAPTCHAs require your attention — the tool will pause and prompt you.
  • Email submissions depend on your SMTP server being reachable and not blocked by the broker.
  • Data frequently reappears (60–90 days is typical). Use optout monitor to catch this.

License

AGPL-3.0-only. See LICENSE.

This license was chosen intentionally: anyone who forks this and runs it as a hosted service must publish their changes. The project's legal model depends on each user running their own copy — a hosted fork changes the legal character of the tool.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

optout-0.1.0.tar.gz (67.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

optout-0.1.0-py3-none-any.whl (56.4 kB view details)

Uploaded Python 3

File details

Details for the file optout-0.1.0.tar.gz.

File metadata

  • Download URL: optout-0.1.0.tar.gz
  • Upload date:
  • Size: 67.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optout-0.1.0.tar.gz
Algorithm Hash digest
SHA256 12a246c947aeb8fe5a2e0a8e7412a63109d217c36dc54e7bbbca27a69b7bbb3d
MD5 f15ac2d21ace40974fd20da0a78eb239
BLAKE2b-256 e3137e7865baa67f01a6c8389f5a1c4d2d5c1a3acd59344ccd9e82377a6d2b1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for optout-0.1.0.tar.gz:

Publisher: release.yml on Blake104/OptOut

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file optout-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: optout-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 56.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optout-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fbdf53c09feb7a2cd411a21e397480fb67a6f2b77c171fa56da81ca26bd24319
MD5 c1eded09cb86415ad188771d073f0a1f
BLAKE2b-256 a3b8ef8a7c4f69889bbd54ba5e16e60e59c55d00f2138d23770b0c447a835619

See more details on using hashes here.

Provenance

The following attestation bundles were made for optout-0.1.0-py3-none-any.whl:

Publisher: release.yml on Blake104/OptOut

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page