💥 Explore this insightful post from Hacker News 📖
📂 **Category**:
📌 **What You’ll Learn**:
Automated data broker opt-out runner for macOS. Removes your personal information from 500+ people-search sites and data broker databases on a monthly schedule — with CAPTCHA solving, persistent state tracking (so completed opt-outs aren’t resubmitted every run), and an iMessage notification when done.
Each month, the script:
- Searches each data broker site for your name + state
- Finds your specific listing (for sites that need a profile URL)
- Fills and submits the opt-out form automatically
- Solves CAPTCHAs via CapSolver (AI-powered, ~$0.001/solve)
- Skips brokers you were already removed from recently (90-day re-check window)
- Sends you an iMessage with the results summary
- Opens any sites that require manual action in your browser
- macOS (uses launchd for scheduling and Messages for iMessage)
- Node.js 18+
- Playwright browsers installed
npx playwright install chromium
# 1. Clone the repo
git clone https://github.com/stephenlthorn/auto-identity-remove.git
cd auto-identity-remove
# 2. Install dependencies
npm install
# 3. Run interactive setup (creates config.json and schedules the monthly job)
node setup.js
# 4. Run manually anytime
./run.sh
node setup.js guides you through:
| Step | What it does |
|---|---|
| Personal info | Name, city, state, ZIP, email, phone |
| Aliases | Past names or variations (e.g. “Steve Doe”) |
| CapSolver key | For CAPTCHA-protected opt-out forms |
| One-time accounts | Creates accounts on sites that require login (stored in config.json, gitignored) |
| iMessage | Phone number to text the results summary to |
| launchd schedule | Registers a monthly job to run on the 1st at 9am |
Your personal info never leaves your machine. config.json and state.json are both gitignored.
CapSolver (optional but recommended)
Some opt-out forms have reCAPTCHA. Without CapSolver, those sites go to your manual list instead of being handled automatically.
- Sign up at capsolver.com — free, pay-as-you-go
- Add $1–2 of credits (enough for months of use at ~$0.001/solve)
- Paste your API key when
setup.jsasks, or add it toconfig.json:
"capsolver": ⚡
auto-identity-remove/
├── setup.js ← Run once: interactive setup + scheduling
├── watcher.js ← Main runner
├── brokers.js ← Broker list with opt-out strategies
├── run.sh ← Manual trigger
├── config.example.json ← Template (copy → config.json)
├── package.json
├── .gitignore
│
├── config.json ← YOUR personal info (gitignored, created by setup.js)
├── state.json ← Opt-out history / skip logic (gitignored)
└── logs/ ← Per-run JSON logs (gitignored)
state.json tracks when each broker was last successfully opted out. The default re-check window is 90 days — brokers typically re-add your data within that window, so the script re-submits when it’s time.
{
"optOuts": {
"Spokeo": {
"lastSuccess": "2026-05-01T09:00:00.000Z",
"totalRuns": 3,
"detail": ""
}
}
}
On each run you’ll see:
✅ Removed— opt-out submitted this run⏭ Skipped (fresh)— removed recently, re-check not due yet🔍 Not listed— your name wasn’t found on that site📋 Manual needed— opened in your browser for you to handle❌ Error— network/timeout issue, will retry next run
| Site | Method |
|---|---|
| Spokeo | Search → find listing → opt-out form |
| WhitePages | Search → find listing → suppression form |
| FastPeopleSearch | Search → opt-out form |
| TruePeopleSearch | Direct opt-out form |
| BeenVerified | Opt-out search form |
| Radaris | Search → privacy form |
| Intelius | Direct opt-out form |
| PeopleFinders | Direct opt-out form |
| PeopleSmart | Direct opt-out form |
| MyLife | Search → opt-out |
| Nuwber | Search → removal form |
| FamilyTreeNow | Direct opt-out form |
| CheckPeople | Direct opt-out form |
| ThatsThem | Direct opt-out form |
| USPhonebook | Direct opt-out form |
| PublicDataUSA | Direct opt-out form |
| SmartBackgroundChecks | Direct opt-out form |
| SearchPeopleFree | Direct opt-out form |
| PeopleSearchNow | Direct opt-out form |
| InfoTracer | Direct opt-out form |
| SocialCatfish | Direct opt-out form |
| NationalPublicData | Direct opt-out form |
| ClustrMaps | Direct opt-out form |
| PrivateRecords | Direct opt-out form |
| Acxiom | Direct form (feeds dozens of downstream brokers) |
| LexisNexis | Direct form (legal/financial data) |
| ZoomInfo | Direct form (B2B professional data) |
| Clearbit | Direct form (B2B enrichment data) |
| Pipl | Email opt-out via Mail.app |
Generic — 500+ additional brokers (auto-detected)
generic-runner.js handles the remaining ~470 brokers from two public datasets:
For each site it tries four strategies in order:
- Click a “Do Not Sell My Personal Information” button
- Opt out via OneTrust / TrustArc / Osano privacy manager
- Fill any generic opt-out form (email, name, state) and submit
- Find and record a DSAR / data request link for manual follow-up
Sites requiring manual action are opened in your browser automatically.
Manual (opened in browser for you)
| Site | Why manual |
|---|---|
| Google — Results About You | Requires Google account interaction |
| Google — Outdated Content | Case-by-case URL submission |
Edit brokers.js and add an entry:
{
name: 'NewBrokerSite',
method: 'direct-form', // or 'search-form', 'email', 'manual'
optOutUrl: 'https://example.com/opt-out',
formFields: {
'input[name*="first" i]': F, // F, L, N, E, ST, Z are from config
'input[name*="last" i]': L,
'input[type="email"]': E,
},
submitSelector: 'button[type="submit"]',
captchaLikely: false,
priority: 2,
}
PRs welcome — especially for brokers with verified working selectors.
Or to run in the background and log output:
./run.sh >> logs/manual-run.log 2>&1 &
Uninstall / disable schedule
launchctl unload ~/Library/LaunchAgents/com.auto-identity-remove.plist
rm ~/Library/LaunchAgents/com.auto-identity-remove.plist
Why not just use a paid service?
Paid services like Incogni ($96/yr) or Optery ($39/yr) are excellent and cover more brokers with professionally maintained opt-out flows. This tool is for people who want full control, transparency, and no recurring subscription — or who want to handle the gaps those services miss (Acxiom, LexisNexis, ZoomInfo, Clearbit).
Using both is the strongest approach: a paid service for the bulk of brokers + this script for the gaps.
MIT
{💬|⚡|🔥} **What’s your take?**
Share your thoughts in the comments below!
#️⃣ **#stephenlthornautoidentityremove #Automated #data #broker #optout #runner #removes #personal #info #peoplesearch #sites #monthly #schedule #GitHub**
🕒 **Posted on**: 1779106902
🌟 **Want more?** Click here for more info! 🌟
