Open-source CLI for discovering where your data is shared, automating opt-out/deletion requests, and (where removal isn't possible) data-poisoning utilities.
Project description
da-toolkit
Open-source tools that give individual users control over their own data: find out where it's shared, see who has it, automate opt-out and deletion requests, and — where removal genuinely isn't an option — poison-pill it.
We serve individual users, not businesses. Everything here is free and open source, forever.
Status
v0.1. The opt-out/deletion request drafter is live for 20 US data
brokers (da optout ...), plus California's DROP platform and GPC
signalling (da drop ..., da gpc ...). A broker exposure scanner
(da scan ...) checks 5 US brokers' public search pages for candidate
matches, which you confirm before anything is stored. Own-signal
obfuscation and self-PII injection are live (da noise ...,
da poison ...).
Planned scope
| Phase | Capability | Status |
|---|---|---|
| 1 | Data-broker discovery (read-only lookups: who has your data) | v0.1 — 5 brokers, confirm-before-store, see below |
| 2 | Opt-out / deletion-request automation (US: CCPA, FCRA, CA DROP/GPC) | v0.1 — draft-only, see below |
| 3 | Data-poisoning utilities (for cases where removal isn't possible) | v0.1 — tiers (a)+(b) only, see below |
Phase 3 tier (c) — mass-generating fake identities to pollute a broker's whole database — is intentionally gated and not implemented: it affects third-party systems in ways tiers (a)/(b) don't, and stays unwritten pending dedicated counsel review. See docs/poisoning/scope.md.
Install
Not yet published to PyPI (once it is, this will be pip install da-toolkit).
Until then, install from source:
git clone https://github.com/normiecore/da-toolkit
cd da-toolkit
pip install -e .
Quickstart
da optout list # 20 supported brokers + legal basis
da optout generate --broker spokeo \
--name "Ada Lovelace" --email ada@example.com # prints a draft + where to send/paste it
da optout status # tracked requests + overdue flags
da optout remind <request-id> --name "..." --email "..." # follow-up draft after a missed deadline
da optout only drafts requests — it never sends email or submits a
web form for you, and it never automates form submission against a
broker's site. See docs/optout/brokers.md for
why, and for the full list of covered brokers and their legal basis.
da drop generate --name "Ada Lovelace" --email ada@example.com
# drafts one request covering every CPPA-registered
# broker (~545), plus an authorization record
da drop remind <request-id> --name "..." --email "..." # follow-up draft after a missed deadline
da gpc instructions # how to turn on Global Privacy Control in your browser
da drop drafts a request for California's DROP platform and an
authorization record to go with it — like da optout, it never submits
anything on your behalf; you submit it yourself at DROP's own portal.
da gpc only prints instructions: GPC is a browser setting, not
something da-toolkit can send for you. See
docs/optout/drop-gpc.md for why, including an
open question flagged to the CEO about whether DA should ever register
as a formal authorized agent and submit DROP requests directly.
da scan brokers # list brokers this scanner supports
da scan run --first-name Ada --last-name Lovelace --state CA
# queries broker search pages, then asks
# "Is this you?" per candidate before storing
da scan list # your confirmed matches
da scan forget <match-id> # delete a confirmed match
da scan shows candidate matches transiently — a broker search for a
common name frequently surfaces other people. Nothing is written to
disk until you confirm a specific candidate is you; declined or
unconfirmed candidates are discarded. It never bypasses a CAPTCHA or
anti-bot block: a blocked broker is reported as such and skipped. See
docs/scan/design.md for the full design and
guardrails, and why only 5 brokers are covered in v0.1.
da noise topics # decoy-query topic categories
da noise generate --count 10 # print decoy searches, no browser
da noise run --count 10 # open decoy searches in YOUR OWN browser, randomized timing
da poison profile --first-name Ada --last-name Lovelace \
--email ada@example.com # draft a synthetic variant of YOUR OWN PII
da noise (tier a) opens decoy searches in your own browser to muddy
your own behavioral profile — it never touches a broker's data. da poison (tier b) drafts text for you to paste into a broker's own
profile-correction form yourself; it never submits anything and never
fabricates a separate identity. See
docs/poisoning/scope.md for the full scope,
including the hard exclusion of mass fake-identity generation (tier c).
Privacy posture
Every capability in v0.1 follows the same rules, decided and documented in docs/legal/legal-research-spike.md:
- Draft-only.
da optoutandda dropnever send an email or submit a web form for you. They print a draft and tell you where to send/paste it yourself. - Confirm-before-store.
da scanshows candidate matches transiently. A broker search for a common name often surfaces other people; nothing is written to disk until you confirm a specific candidate is you. - No CAPTCHA or anti-bot evasion, ever. A blocked or bot-gated broker is reported as blocked and skipped, not worked around. This is a permanent product rule, not a v0.1 limitation that will later be "fixed."
- US-only in v1. Everything is scoped to US law (CCPA/FCRA broker opt-outs, CA DROP/GPC). EU/Canada request flows are deferred, not silently unsupported — see docs/optout/drop-gpc.md.
- Self-directed only.
da noiseandda poisononly ever act on your own signals/PII, opened in your own browser or printed for you to paste yourself. da-toolkit never fabricates a separate identity or acts at scale against a broker's systems — see docs/poisoning/scope.md for the hard boundary around tier (c), which is intentionally unimplemented.
Limitations
Read this before relying on da-toolkit for anything time-sensitive:
- Coverage is partial.
da optoutcovers 20 US brokers andda scancovers 5 — a small fraction of the hundreds of data brokers operating in the US.da dropis the broadest tool (~545 CPPA-registered brokers via one DROP submission) but DROP itself only covers brokers registered with California, and only if you submit the draft yourself. - Broker URLs may be stale. Opt-out and search-page URLs were compiled from public documentation, not continuously re-verified against the live sites. Broker pages change without notice; always check the source URL da-toolkit prints before trusting it.
- Nothing is automated end-to-end. Every capability stops at a draft, an instruction, or a locally-confirmed record — you still have to take the final action (send the email, paste the form text, flip the browser setting, submit at DROP's portal).
- Local storage is plaintext. Tracked requests and confirmed scan
matches are saved as unencrypted JSON under
.da/in your working directory. Treat that directory like any other file containing your own PII — it is not protected beyond your OS's normal file permissions. - No guarantee of broker compliance. da-toolkit exercises legal rights on your behalf in spirit, but cannot force a broker to honor a request, and does not verify that it did.
Legal disclaimer
This project automates requests that rely on rights granted by specific privacy laws (e.g. GDPR, CCPA, PIPEDA). Availability, scope, and correct procedure depend on your jurisdiction and the data holder's. Using this tool does not guarantee a broker will comply, and the maintainers make no legal claims on your behalf. Nothing here is legal advice.
License
GPL-3.0-or-later — see LICENSE and the rationale in CONTRIBUTING.md.
Contributing
See CONTRIBUTING.md. Please also read CODE_OF_CONDUCT.md and, if you're reporting a vulnerability, SECURITY.md instead of filing a public issue.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file da_toolkit-0.1.0.tar.gz.
File metadata
- Download URL: da_toolkit-0.1.0.tar.gz
- Upload date:
- Size: 58.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9eeac11cd3405fb1f22ccc4eca616d156b490dc43d9be0a4f42d16f22bf1d94e
|
|
| MD5 |
04b1e12c15c1f2448b9747dfb5b81272
|
|
| BLAKE2b-256 |
5c90e2f87f4e2b3493b23fbd4e24a0724ef074e8193e8e11d16ad9623f492212
|
File details
Details for the file da_toolkit-0.1.0-py3-none-any.whl.
File metadata
- Download URL: da_toolkit-0.1.0-py3-none-any.whl
- Upload date:
- Size: 40.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
025a5a722ec758fae93fb690da39ef76fb2d6875c1c4369dd25f13f11b603973
|
|
| MD5 |
238ecc4cc8dab1a0e190fe788ca29162
|
|
| BLAKE2b-256 |
05808437e1ea8cbe94113f4ec9da1bedf3807ba818eb45226f442b1256600e72
|