Skip to main content

Automated data broker removal tool — close your accounts, erase your data.

Project description

OpenEraseMe

Automated data broker removal tool — close your accounts, erase your data.

Beta — Core features are stable and tested. Some advanced features (web-form CAPTCHA solving, DPA auto-filing) require manual setup or are event-flagged only.

CI License Python

OpenEraseMe helps you exercise your GDPR/CCPA right to erasure against data brokers. It provides:

  • A curated registry of 74 data brokers with opt-out processes documented
  • CLI tools to plan, send, track, and triage removal requests
  • Skills for LLM-powered agents (Claude Code, OpenClaw, etc.)
  • Lifecycle management with deadline tracking, reminders, escalation, and re-scans

Features

  • Curated broker registry with YAML-based definitions for 74 data brokers across EU (35), UK (4), and US (33), including opt-out URLs, required account identifiers, contact methods (web forms, email), and verification keywords.
  • Event-sourced architecture with an append-only SQLite event store, state projections, and full audit trail for every removal request.
  • CLI automation with 30+ commands to plan removal campaigns, send opt-out requests in batches, track progress, monitor deadlines, and triage broker replies from the terminal.
  • Web-form automation via Playwright for brokers that only accept opt-outs through web forms, including form-filling, CAPTCHA detection, and screenshot capture.
  • Inbox triage via IMAP polling to fetch broker replies, classify them with an LLM (Claude), and generate jurisdiction-aware rebuttals for rejections.
  • Deadline tracking with automatic jurisdiction-aware deadline monitoring (GDPR: 30 days, CCPA: 45 days). The tick engine checks daily for overdue requests and triggers reminders with exponential backoff.
  • Escalation workflows that flag requests for DPA complaints after brokers miss the legal response window.
  • LLM agent skills as ready-made skill files for Claude Code, OpenClaw, and other LLM-powered coding agents. These skills let AI assistants work with the tool on your behalf.
  • Jurisdiction-aware workflows with support for GDPR (Europe), CCPA (California), CPRA, LGPD, and PIPEDA erasure rights, including jurisdiction-specific templates, timelines, and legal references.
  • Scheduler integration that generates cron, launchd, or systemd configurations to run the tick engine, inbox polling, and quarterly re-scans automatically.
  • Dashboard and reports for campaign analytics, jurisdiction breakdowns, and GDPR-compliant record-keeping exports.

Install

End users (from PyPI):

pip install openeraseme

Optional extras:

pip install openeraseme[web]      # Playwright-based browser automation
pip install openeraseme[triage]   # LLM triage via Anthropic Claude

Developers (from source):

# Clone the repository
git clone https://github.com/danieljustus/OpenEraseMe.git
cd OpenEraseMe

# Install dependencies with uv
uv sync
uv pip install -e ".[dev,web,triage]"

# Configure your environment
cp .env.example .env
# Edit .env and add your ANTHROPIC_API_KEY

See .env.example for all supported environment variables.

Usage

Getting started

# Initialize your profile with personal details
openeraseme init-profile

# List all registered brokers, optionally filtered by jurisdiction
openeraseme brokers list --jurisdiction GDPR

# Show details for a specific broker
openeraseme brokers show --name spokeo

Demo

$ openeraseme init-profile
✓ Profile saved to ~/.config/openeraseme/profile.json

$ openeraseme brokers list --jurisdiction GDPR
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Name         ┃ Website                     ┃ Jurisdiction  ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ Spokeo       │ https://www.spokeo.com      │ CCPA          │
│ Intelius     │ https://www.intelius.com    │ CCPA          │
│ Acxiom (EU)  │ https://www.acxiom.com      │ GDPR          │
│ Schufa       │ https://www.schufa.de       │ GDPR          │
└──────────────┴─────────────────────────────┴───────────────┘

$ openeraseme plan create --campaign initial --jurisdiction GDPR --max 5
✓ Plan created: 5 brokers selected
  Campaign: initial

$ openeraseme status
Campaign: initial
┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃ Broker      ┃ Status      ┃ Deadline             ┃
┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ Acxiom (EU) │ planned     │ —                    │
│ Schufa      │ planned     │ —                    │
│ Experian EU │ planned     │ —                    │
│ Equifax EU  │ planned     │ —                    │
│ Creditreform│ planned     │ —                    │
└─────────────┴─────────────┴──────────────────────┘

Planning and execution

# Create a removal plan for GDPR brokers (limit to 10)
openeraseme plan create --campaign initial --jurisdiction GDPR --max 10

# Review the plan before sending
openeraseme plan show --campaign initial

# Execute the plan in batches (respects rate limits, requires consent)
openeraseme execute --campaign initial --batch-size 5 --delay 30 --yes

# Check overall campaign progress
openeraseme status

# View deadline calendar and upcoming tick actions
openeraseme calendar --weeks 4

Inbox triage (requires [triage] extra)

# Poll your IMAP inbox for broker replies
openeraseme poll-inbox --username your@email.com

# Classify a broker reply via LLM
openeraseme classify-reply <request_id>

# Generate a jurisdiction-aware rebuttal for a rejection
openeraseme generate-rebuttal <request_id>

Web-form automation (requires [web] extra)

# Run a broker's web-form opt-out via Playwright
openeraseme run-web-form <broker_id>

# List manual fallback tasks for forms that couldn't be automated
openeraseme manual-tasks list

# Mark a manual task as completed
openeraseme manual-tasks complete <task_id>

Lifecycle and maintenance

# Run the tick engine (checks deadlines, reminders, escalations)
openeraseme tick --dry-run
openeraseme tick

# Generate scheduler configs (cron / launchd / systemd)
openeraseme generate-scheduler --output ./schedules

# Install schedules
openeraseme schedule install ./schedules

# Generate a dashboard report
openeraseme generate-dashboard

# Export campaign data for GDPR record-keeping
openeraseme export --format json --output campaign.json

Other commands

# Validate registry YAML files against the schema
openeraseme validate

# Show event history for a request
openeraseme events show <request_id>

# List all removal requests
openeraseme requests list --status pending

# Grant consent for destructive operations
openeraseme grant execute --ttl 3600

Run openeraseme --help for a full list of commands and options.

Architecture

OpenEraseMe uses an event-sourced architecture built on SQLite:

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   CLI /     │────▶│   Event      │────▶│  Request    │
│   Skills    │     │   Store      │     │  State      │
└─────────────┘     │  (SQLite)    │     │ (Projection)│
                    └──────────────┘     └─────────────┘
                           │
                    ┌──────┴──────┐
                    ▼             ▼
            ┌──────────┐   ┌──────────┐
            │  Tick    │   │  Reports │
            │  Engine  │   │ / Export │
            └──────────┘   └──────────┘
  • Event Store: Append-only log of all actions (planned, sent, ack, reminder, deadline reached, etc.)
  • State Projection: Rebuilds the current state of every request from events
  • Tick Engine: Daily scan for deadlines, reminders, and escalations
  • Triage: LLM-based classification of broker replies with jurisdiction-aware rebuttal generation

Development

Setup

uv sync --all-extras
uv pip install -e ".[dev,web,triage]"
pre-commit install

Run tests

uv run pytest --verbose --tb=short

Lint and type-check

uv run ruff check src/openeraseme/
uv run ruff format --check src/openeraseme/
uv run mypy src/openeraseme/

All three checks run in CI on every push and pull request to the main branch.

Project structure

src/openeraseme/
  cli/           — Typer CLI application
  core/          — Event store, projections, tick engine, templating, scheduler
  registry/      — Broker loader, schema validation
  services/      — CLI command handlers
  adapters/      — Web (Playwright), Triage (Claude), Email (SMTP/IMAP)
registry/
  brokers/       — YAML broker definitions (eu/, uk/, us/)
  laws/          — Jinja2 legal templates (GDPR, CCPA, rebuttals)
  schemas/       — JSON Schema for broker validation
skills/          — LLM agent skill files (Claude Code, OpenClaw)
examples/        — Integration examples for Claude Code, OpenClaw, cron

Documentation

License

MIT

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

openeraseme-0.1.0.tar.gz (274.2 kB view details)

Uploaded Source

Built Distribution

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

openeraseme-0.1.0-py3-none-any.whl (105.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for openeraseme-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8d723afab3638f33033350ecc2f847e7e3700f874385e03011fd6ebfb232d244
MD5 69ceb76352c1de65cadfab9b125b6717
BLAKE2b-256 50ed32225c09d5f89bf9e1e2224b093468bd3e85935cc0fa40ab9b9b4879f958

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on danieljustus/OpenEraseMe

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

File details

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

File metadata

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

File hashes

Hashes for openeraseme-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c1e8183a762367b86cd27e37ee7576c9e2032384f8b07b9a43c2b6ff23cfdf16
MD5 207a88843c242bc63b2cd888d3b85a7b
BLAKE2b-256 f2292abb06cf541710ee877767f80c72a82e7ce7a499c594d42da0f57a0c75dc

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on danieljustus/OpenEraseMe

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