Your data-removal tool, on your own machine. Open source.

Free My ID is AGPL-licensed, runs locally and keeps your details on your own computer. Read the code, run it, change it.

Free My ID takes your name off the websites that sell it. This page is for people who want to run it on Linux, macOS or a home server.

A terminal on your own computer connected to a small home server, inside a house outline, with a clock for the schedule.

Download Free My ID

What's ready today, and what's coming

  • Available nowThe Windows app, with the same engine and command line (freemyid) inside.
  • Coming in v0.2Linux and macOS, pipx, the Docker image, headless runs, JSON output.

Version 0.2 isn't out yet. Commands marked "Coming in v0.2" show how it's planned to work, and details may still change before release.

Run it headless on a home server. Same engine as the Windows app, driven from the command line and a schedule, with no account and no cloud. Your profile and records stay on the box you control.

Install

With pipx Coming in v0.2

For Linux and macOS. pipx keeps Free My ID in its own environment.

pipx install freemyid
freemyid --help

With Docker Coming in v0.2

The image will run as a normal user with a read-only file system, with the browser it needs built in. Your data lives in one volume.

# compose.yaml
services:
  freemyid:
    image: ghcr.io/freemyid/freemyid
    read_only: true
    tmpfs: [/tmp]
    cap_drop: [ALL]
    security_opt: ["no-new-privileges:true"]
    volumes:
      # your encrypted profile and records
      - freemyid-data:/data
    environment:
      FREEMYID_HOME: /data
      FREEMYID_PASSPHRASE_FILE: /run/secrets/freemyid_passphrase
    secrets: [freemyid_passphrase]

secrets:
  freemyid_passphrase:
    file: ./passphrase.txt   # chmod 600

volumes:
  freemyid-data:

Then run it once, or from a timer on the host:

docker compose run --rm freemyid doctor
docker compose run --rm freemyid run --headless

From source Coming in v0.2

The code is public today, but Linux and macOS support isn't finished until v0.2.

git clone https://github.com/FreeMyID/freemyid.git
cd freemyid
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/freemyid --help

First run

Coming in v0.2

freemyid doctor checks that everything Free My ID needs is in place and tells you what to fix. Then set up your profile with questions, or from a file for a box with no one at the keyboard.

# check browser, key store, scheduler and mail
freemyid doctor

# the Windows wizard's questions, in the terminal
freemyid setup

# or no questions at all
freemyid setup --from config.yaml

The config file format will be published with v0.2. Keep the file private: it holds the details you want removed.

Headless scheduling

Coming in v0.2

Free My ID checks once a day. One command writes the job for your system: a systemd user timer on Linux, a launchd agent on macOS.

# systemd user timer on Linux, launchd agent on macOS
freemyid schedule install
freemyid schedule status

# Linux servers: keep user timers running after you log out
loginctl enable-linger "$USER"

The timer it writes looks like this. A run missed while the machine was off happens at the next start. On macOS the agent is called org.freemyid.recheck.

# ~/.config/systemd/user/
#   freemyid-recheck.timer
[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=15min

Prefer cron? These two lines do the same job:

0 10 * * * freemyid run --headless --scheduled
@reboot sleep 120 && freemyid run --headless --scheduled

run --headless never asks a question. If something needs a person, such as a site's "I'm not a robot" check, it stops and adds it to your to-do list (freemyid todo) instead of guessing.

Secrets on a headless box

Coming in v0.2

On Windows the key sits in Windows' own password store. A server often has no desktop key store, so v0.2 adds two other ways to unlock the same encrypted store:

  • A passphrase file that only your user can read (Free My ID refuses a file others can read). The key is derived from it (scrypt).
  • systemd-creds on Linux, so the passphrase is kept encrypted by the machine itself rather than in a plain file. The timer's service loads it as the credential freemyid-passphrase.
install -m 600 /dev/null ~/.config/freemyid/passphrase
$EDITOR ~/.config/freemyid/passphrase
export FREEMYID_PASSPHRASE_FILE=~/.config/freemyid/passphrase

JSON output and exit codes

Coming in v0.2

Every command that reads data will take --json, and exit codes will be stable, so scripts and monitoring can rely on them.

freemyid status --json | jq .
freemyid run --headless; echo "exit code: $?"

The full command and exit code reference (CLI.md on GitHub)

Contribute

The most useful help is keeping the list of people-search sites and their removal steps correct. Sites change their forms often. You can also add or fix a submitter, the code that sends one site's removal request.

Regular users never need a GitHub account: they can email us instead.

Security

Found a security problem? Please report it privately, not in a public issue.