Metadata-Version: 2.4
Name: da-toolkit
Version: 0.1.0
Summary: 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-URL: Homepage, https://github.com/normiecore/da-toolkit
Project-URL: Issues, https://github.com/normiecore/da-toolkit/issues
Author: DA
License: GPL-3.0-or-later
License-File: LICENSE
Keywords: ccpa,data-broker,deletion-request,gdpr,opt-out,privacy
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Security
Requires-Python: >=3.9
Requires-Dist: click>=8.1
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Description-Content-Type: text/markdown

# 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](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:

```bash
git clone https://github.com/normiecore/da-toolkit
cd da-toolkit
pip install -e .
```

## Quickstart

```bash
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](docs/optout/brokers.md) for
why, and for the full list of covered brokers and their legal basis.

```bash
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](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.

```bash
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](docs/scan/design.md) for the full design and
guardrails, and why only 5 brokers are covered in v0.1.

```bash
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](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](docs/legal/legal-research-spike.md):

- **Draft-only.** `da optout` and `da drop` never 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 scan` shows 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](docs/optout/drop-gpc.md).
- **Self-directed only.** `da noise` and `da poison` only 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](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 optout` covers 20 US brokers and `da scan`
  covers 5 — a small fraction of the hundreds of data brokers operating in
  the US. `da drop` is 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](LICENSE) and the rationale in
[CONTRIBUTING.md](CONTRIBUTING.md#license-choice).

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). Please also read
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and, if you're reporting a
vulnerability, [SECURITY.md](SECURITY.md) instead of filing a public issue.
