OSINTverse

Free · Open source · Linux and macOS

Every open-source OSINT tool. One command.

otlite installs and runs Sherlock, Maigret, Holehe, SpiderFoot, theHarvester, and dozens more by name. Each tool gets its own virtualenv, every run is saved, and nothing needs Docker or an account.

curl -fsSL https://get.otinstaller.com/otlite | sh
  • Free and Apache-2.0 licensed
  • Python 3.10–3.14
  • No Docker, no account
First run
otlite install sherlock maigretinstalled sherlock, maigretotlite run --all u:jane_doesherlock   done   12 profilesmaigret    done   9 profilesotlite results --sort time2 runs saved under results/<tool>/jane_doe/
Tools
47
Version
1.2.1
License
Apache-2.0
Runs on
Linux · macOS

otinstaller is now otlite

Same tools, same commands, a new name: type otlite where you typed ot or otinstaller. pip install -U otinstaller installs otlite and keeps the old command working with a note. Your keys and settings move from ~/.otinstaller to ~/.otlite on the first run; reinstall your tools once, because virtualenvs cannot be moved.

Migration guide

Why otlite

Every tool installs and runs a little differently. Not anymore.

One interface to install, run, update, and remove open-source OSINT tools, with every result kept and ready for scripts.

  • Install by name

    otlite install sherlock creates a private virtualenv for the tool, at the version otlite pinned and tested. Nothing touches your system Python, and removing a tool removes all of it.

    otlite install sherlock
  • One input syntax for every tool

    u:, e:, d:, ip: and friends become each tool's own flags, so you stop looking up options. Every original flag still works after --.

    otlite run holehe -- e:jane@example.com
  • Run every matching tool

    --all runs each installed tool that takes the input, in parallel. auto works out the input type for you, and playbooks repeat a set of tools.

    otlite auto jane@example.com
  • Results you can use

    Every run is saved by tool, target, and time. results sorts and filters them, extract pulls out emails, domains, IPs, and URLs, and diff shows what changed since the last run.

    otlite results --since 7d --sort duration
  • Built for scripts and AI agents

    Every run also writes an envelope in one JSON shape for every tool, with the entities it found. Every command takes --json, nothing prompts with --yes, and exit codes are stable.

    otlite results --status failed --json
  • All API keys in one place

    keys set asks for the value without showing it and stores it in ~/.otlite/.env, readable only by you. Each tool receives only the keys it declares; values never reach logs or results.

    otlite keys set SHODAN_API_KEY
  • Curated and tested

    A tool is listed only after it installs cleanly and passes a smoke test, and the catalog is checked every night. Attack and harassment tools are left out by policy.

    otlite list
  • Update and recover cleanly

    One command updates one tool or all of them, check-updates shows what is behind, and resume picks up installs and runs that were interrupted.

    otlite update --all
  • Fixes, not just errors

    doctor checks Python, git, venv, and pipx, and prints the exact command that fixes each problem on Debian, Ubuntu, Kali, Arch, Fedora, or macOS.

    otlite doctor

Typed inputs

Stop memorizing flags.

Tell otlite what the target is. It maps the input to each tool's own syntax, so one line runs Sherlock, Maigret, and every other username tool you have installed.

  • u:

    Username

  • e:

    Email

  • p:

    Phone

  • d:

    Domain

  • url:

    URL

  • ip:

    IP address

  • q:

    Search text

  • tg:

    Telegram

  • lat: lng:

    Coordinates

Example
$ otlite run --all u:jane_doe
  sherlock     done
  maigret      done
  blackbird    done
  nexfil       done
saved to results/<tool>/jane_doe/ (+ .meta.json and .envelope.json per run)

--all and auto take u:, e:, p:, d:, url: and ip:. They skip interactive and long-running tools, and tools that need API keys unless you pass --include-credentialed. otlite playbook domain-recon example.com runs a saved set.

Install

Installed in under a minute.

Pick your setup. otlite doctor checks the machine and prints the command that fixes anything missing.

1. Install otlite

One line (recommended)

curl -fsSL https://get.otinstaller.com/otlite | sh
otlite doctor
otlite init

Finds Python 3.10 or newer, installs pipx through brew, apt, dnf, or pacman if it is missing, then installs otlite. No root needed for otlite itself.

2. Run your first tool

First run

otlite install sherlock
otlite run sherlock -- u:jane_doe
otlite results
# results/sherlock/jane_doe/<timestamp>_sherlock_jane_doe_<id>.txt
  • Linux or macOS

    Tested on Ubuntu 22.04 and 24.04, Debian 12, Arch, Kali rolling, and macOS 14 on Apple silicon. On Windows, run it inside Ubuntu on WSL2, or use ot from the OTInstaller Registry.

  • Python 3.10–3.14, git, venv

    On Debian, Ubuntu, and Kali: sudo apt install python3-venv git. A few tools have narrower Python limits, which otlite info shows. otlite doctor prints the fix for anything missing.

Catalog

All 47 tools, in detail

Every tool otlite installs: what it does, what it takes, the keys it can use, what to know before you run it, and the two lines that install and run it. Live from the otlite catalog, refreshed about once an hour; each tool is pinned to the version otlite tested.

Username
24
Domain
19
Email
14
URL
11
IP address
7
Name
5
Phone
4

47 / 47 tools

Username

Find where a handle exists across sites.

  • Sherlock

    sherlock

    ★ 93kMIT

    Sherlock checks a username against several hundred sites and reports where a profile with that exact handle exists. It returns a list of profile URLs, nothing about who owns them.

    Works on
    Username
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • A first pass on a handle before deeper work.
    • Spotting which platforms a brand or project name is already taken on.
    • Feeding profile URLs into socid-extractor or Maigret for details.

    Before you run it

    • Sites change their responses often, so expect a few false positives; open each hit.
    • Rate limits on popular sites can mark a profile as missing when it exists. Re-run with --timeout raised.

    Install and run sherlock

    otlite install sherlock
    otlite run sherlock -- u:jane_doe

    Pairs with Maigret, socialscan and Nexfil.

  • Maigret

    maigret

    ★ 38kMIT

    Maigret searches a username across thousands of sites and, where it finds a profile, extracts the public fields on it: display name, bio, location, linked accounts. It can write an HTML or PDF report.

    Works on
    Username
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • A fuller dossier than Sherlock on one handle.
    • Finding the same person under a slightly different name through the extracted links.
    • Reports you can hand to someone who does not read terminals (--html, --pdf).

    Before you run it

    • The full site list is slow. Use --top-sites for a quick pass.
    • Some sites need cookies to return profile fields; Maigret still reports the match without them.

    Install and run maigret

    otlite install maigret
    otlite run maigret -- u:jane_doe

    Pairs with Sherlock, socid-extractor and Linkook.

  • Blackbird

    blackbird

    ★ 9.2kOther

    Blackbird checks a username or email address on hundreds of sites and reports where an account exists. Username checks use the community WhatsMyName site list, and hits come back as profile URLs you can export to CSV or PDF.

    Works on
    Username, Email
    Typed inputs
    u: Usernamee: Email
    API keys
    None

    Good for

    • A second username sweep next to Sherlock, from a different site list.
    • Checking which services an email address has an account on.
    • CSV or PDF exports (--csv, --pdf) to attach to a case.

    Before you run it

    • Sites change their responses, so treat each hit as a lead and open it before relying on it.
    • The optional --ai profile sends the names of matched sites to Blackbird's own service and needs a free key from --setup-ai. Leave it off if that is a problem for your case.
    • The project moved from p1ngul1n0/blackbird to antoniaci/blackbird and ships no licence file, so the registry lists its licence as Other.

    Install and run blackbird

    otlite install blackbird
    otlite run blackbird -- u:jane_doe

    Pairs with Sherlock, Maigret and Holehe.

  • user-scanner

    user-scanner

    ★ 5kMIT

    user-scanner takes a username or email and checks platforms that reveal whether an account exists. It groups results by category and ships an MCP server, so agents can call it too.

    Works on
    Username, Email
    Typed inputs
    u: Usernamee: Email
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs

    Good for

    • One run for both a handle and the email behind it.
    • Agent workflows: the same checks over MCP.
    • A second source next to Sherlock and Holehe.

    Before you run it

    • otlite never runs it with --allow-loud, which would notify the target.

    Install and run user-scanner

    otlite install user-scanner
    otlite run user-scanner -- u:jane_doe

    Pairs with Sherlock, Holehe and socialscan.

  • Aliens Eye

    aliens-eye

    ★ 4.1kMIT

    Aliens Eye searches a username across several hundred social sites and reports the matches. Its site list overlaps Sherlock's, so it mostly serves as a cross-check.

    Works on
    Username
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • A cross-check on Sherlock and Nexfil output.
    • Handles on smaller regional sites.

    Before you run it

    • Treat results as leads; the detection rules are community maintained.

    Install and run aliens-eye

    otlite install aliens-eye
    otlite run aliens-eye -- u:jane_doe

    Pairs with Sherlock, Nexfil and Maigret.

  • Nexfil

    nexfil

    ★ 2.6kMIT

    Nexfil checks a username against a few hundred sites and prints the profile URLs that exist. It is quick and has a small dependency set, which makes it a good extra opinion.

    Works on
    Username
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • Another username pass next to Sherlock and Maigret.
    • Fast checks in scripts with the original -u flag.

    Before you run it

    • Detection rules are updated less often than Sherlock's; verify hits by hand.

    Install and run nexfil

    otlite install nexfil
    otlite run nexfil -- u:jane_doe

    Pairs with Sherlock, Maigret and Aliens Eye.

  • socialscan

    socialscan

    ★ 1.8kMPL-2.0

    socialscan asks a short list of major platforms whether a username or email is available, taken, or invalid, using their own sign-up validation. Fewer sites than Sherlock, far fewer false positives.

    Works on
    Username, Email
    Typed inputs
    q: Search text
    API keys
    None

    Good for

    • A reliable yes or no on the big platforms.
    • Checking whether a handle is free before registering it.
    • Verifying Sherlock hits on the platforms socialscan covers.

    Before you run it

    • Covers roughly a dozen platforms; use it for precision, not reach.

    Install and run socialscan

    otlite install socialscan
    otlite run socialscan -- q:acme

    Pairs with Sherlock, Maigret and user-scanner.

  • Linkook

    linkook

    ★ 1kMIT

    Linkook starts from a username, finds profiles, then follows the links those profiles publish to discover further accounts and emails. It draws the connections rather than listing flat hits.

    Works on
    Username, Email
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • Turning one handle into the set of accounts that link to each other.
    • Finding an email published on a profile page.
    • Exporting the link graph for a case.

    Before you run it

    • Crawling linked profiles takes longer than a plain username check.

    Install and run linkook

    otlite install linkook
    otlite run linkook -- u:jane_doe

    Pairs with Maigret, socid-extractor and Sherlock.

  • The Big Brother

    thebigbrother

    ★ 772MIT

    The Big Brother's command-line scanner checks a username on hundreds of sites and lists where it exists. It is built on Sherlock's site data and detection rules, and writes the hits as profile URLs to text, CSV, or XLSX.

    Works on
    Username
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • A Sherlock-style sweep when you want spreadsheet output (--csv, --xlsx).
    • Trying spelling variants in one run with the {?} placeholder, which swaps in _, - and .

    Before you run it

    • The README describes a much larger web console and a commercial reporting service. otlite installs the project but runs only its username scanner.
    • It fetches Sherlock's current site list at run time and shares Sherlock's false positives. Add --local to use the bundled copy instead.

    Install and run thebigbrother

    otlite install thebigbrother
    otlite run thebigbrother -- u:jane_doe

    Pairs with Sherlock, Maigret and Blackbird.

  • Zen

    zen

    ★ 603Apache-2.0

    Zen pulls author email addresses out of public commits for a GitHub user, repository, or organisation. It returns username and email pairs, and many of them are GitHub noreply addresses rather than real inboxes.

    Works on
    Username, URL
    Typed inputs
    u: Usernameurl: URL
    API keys
    None

    Good for

    • Finding the commit email behind a developer's GitHub handle.
    • Listing contributor addresses for a repository (url:https://github.com/owner/repo).
    • Organisation-wide sweeps with the original --org flag.

    Before you run it

    • Unauthenticated GitHub API calls are capped at 60 an hour, which a large organisation or busy repository uses up quickly.
    • Upstream has not changed since 2019. It only reads GitHub's public API, so nothing reaches the person or their own sites.

    Install and run zen

    otlite install zen
    otlite run zen -- u:jane_doe

    Pairs with Holehe, h8mail and Sherlock.

Email

See which services an address is registered on.

  • GHunt

    ghunt

    ★ 20kOther

    GHunt looks up a Google account by its Gmail address and returns the public parts of it: profile name and photo, Google ID, reviews, and sometimes a calendar or Maps contributions. It works through Google's own endpoints.

    Works on
    Email
    Typed inputs
    e: Email
    API keys
    None
    • Needs your own login or session
    • Asks questions in the terminal
    • Skipped by run --all and auto

    Good for

    • Confirming a Gmail address belongs to a live account.
    • Finding the display name and photo behind an address.
    • Pivoting from an address to public Maps reviews.

    Before you run it

    • Needs a one-time login (ghunt login) with your own Google cookies. Use a dedicated research account.
    • Google changes endpoints often; if a module fails, update with otlite update ghunt.

    Install and run ghunt

    otlite install ghunt
    otlite run ghunt -- e:jane@example.com

    Pairs with Holehe, MailAccess and socialscan.

  • Holehe

    holehe

    ★ 15kGPL-3.0

    Holehe asks about 120 services whether an email address is registered, using their password-reset and sign-up checks without sending anything to the address. It reports used, not used, or rate limited per site.

    Works on
    Email
    Typed inputs
    e: Email
    API keys
    None

    Good for

    • Confirming an address is real and active before spending credits on it.
    • Seeing which platforms to look at next for a given email.
    • Bulk checks from a file with the original --only-used flag.

    Before you run it

    • Several services rate limit quickly; a rate-limited row is unknown, not absent.
    • otlite runs Holehe with its password-recovery modules switched off by default.

    Install and run holehe

    otlite install holehe
    otlite run holehe -- e:jane@example.com

    Pairs with MailAccess, h8mail and socialscan.

  • h8mail

    h8mail

    ★ 5.3kOther

    h8mail checks an email address against breach sources and, with API keys, pulls the matching records. Without keys it still queries the free sources and local breach dumps you point it at.

    Works on
    Email
    Typed inputs
    e: Email
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs

    Good for

    • A quick breach check on an address.
    • Searching your own local dump files with -lb.
    • Chaining into reverse lookups on discovered passwords with the original flags.

    Before you run it

    • The useful sources need API keys. Add them with otlite keys set NAME; otlite keys check verifies them.
    • Breach data is sensitive. Store results under a case and restrict the folder.

    Install and run h8mail

    otlite install h8mail
    otlite run h8mail -- e:jane@example.com

    Pairs with Holehe, MailAccess and GHunt.

  • MailAccess

    mailaccess

    ★ 1.4kMIT

    MailAccess checks an email address against a large set of platforms for registration, groups the hits into likely identities, and flags addresses seen in breach data. It is a newer alternative to Holehe with broader coverage.

    Works on
    Email, Domain
    Typed inputs
    e: Emaild: Domain
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs

    Good for

    • Broad registration checks on one address.
    • A second opinion next to Holehe.

    Before you run it

    • Newer project; verify surprising hits by hand.

    Install and run mailaccess

    otlite install mailaccess
    otlite run mailaccess -- e:jane@example.com

    Pairs with Holehe, h8mail and GHunt.

  • NeutrOSINT

    neutrosint

    ★ 42MIT

    NeutrOSINT asks Proton's own API whether an address exists on Proton Mail, without emailing it. For a valid address it also returns the date of the account's PGP key, and it flags custom domains that route mail through Proton.

    Works on
    Email, Username
    Typed inputs
    e: Email
    API keys
    None

    Good for

    • Confirming a Proton address is live before spending time on it.
    • Testing one username across proton.me, protonmail.com, pm.me and the other Proton domains.
    • Spotting business domains hosted on Proton.

    Before you run it

    • The keyless light mode allows roughly 100 lookups an hour. After that, answers are unreliable until the limit resets.
    • The date belongs to the account's current PGP key, which changes if the owner regenerates keys, so it is not always the sign-up date.
    • The heavier mode signs in to a Proton account of your own through Chrome. otlite's e: input uses the light mode.

    Install and run neutrosint

    otlite install neutrosint
    otlite run neutrosint -- e:jane@example.com

    Pairs with Holehe, h8mail and MailAccess.

Phone

Check a number against messaging and social apps.

  • Ignorant

    ignorant

    ★ 2.1kGPL-3.0

    Ignorant checks whether a phone number is registered on a handful of apps such as Snapchat and Instagram, using the same sign-up checks Holehe uses for email. Nothing is sent to the number.

    Works on
    Phone
    Typed inputs
    None; pass its own arguments after --
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs

    Good for

    • Confirming a number is in use on messaging apps.
    • Pairing with Holehe when you have both an email and a number.

    Before you run it

    • Covers only a few services. Use the international format with the country code.

    Install and run ignorant

    otlite install ignorant
    otlite run ignorant -- --help

    Pairs with Toutatis, whatsapp-osint and Holehe.

  • Telegram Phone Number Checker

    telegram-phone-number-checker

    ★ 1.8kMIT

    This Bellingcat tool checks, through your own Telegram login, whether a number or username has an account. For a match it returns the Telegram user ID, username, and display name, and can save the profile photo.

    Works on
    Phone, Username
    Typed inputs
    p: Phoneu: Username
    API keys
    API_ID, API_HASH, PHONE_NUMBEROptional. Store each with otlite keys set NAME.
    • Dual-use: asks you to accept a notice before it installs
    • Needs your own login or session
    • Asks questions in the terminal
    • Skipped by run --all and auto

    Good for

    • Checking whether a phone number from a case is registered on Telegram.
    • Getting the stable numeric ID for a Telegram username.
    • Batch checks with comma-separated numbers in one run.

    Before you run it

    • Needs your own Telegram API ID and hash from my.telegram.org plus your account's phone number (otlite keys set API_ID, API_HASH, PHONE_NUMBER) and a login code on first run. It is interactive, so otlite run --all and otlite auto skip it.
    • Use a dedicated account, not your personal one. Telegram can restrict accounts that look up many numbers, and residential connections fare better than VPNs.
    • No response means either no account or a user who hides their number from lookups. It is not proof the number is unused.

    Install and run telegram-phone-number-checker

    otlite install telegram-phone-number-checker
    otlite run telegram-phone-number-checker -- p:+15551234567

    Pairs with Ignorant, whatsapp-osint and Telepathy.

  • whatsapp-osint

    whatsapp-osint

    ★ 1.5kMIT

    whatsapp-osint logs when a WhatsApp contact goes online and offline, through WhatsApp Web in a browser session you control. It produces a timeline, not message content.

    Works on
    Phone, Name
    Typed inputs
    None; pass its own arguments after --
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs
    • Needs your own login or session
    • Keeps running until you stop it
    • Skipped by run --all and auto

    Good for

    • Activity timelines for a number you are authorised to monitor.

    Before you run it

    • Needs a logged-in WhatsApp Web session and a browser driver. It runs until stopped.
    • This is monitoring of a person. Confirm your legal basis before you start it.

    Install and run whatsapp-osint

    otlite install whatsapp-osint
    otlite run whatsapp-osint -- --help

    Pairs with Ignorant and Toutatis.

Social media

Pull profiles, posts, and metadata from one platform.

  • Instaloader

    instaloader

    ★ 13kMIT

    Instaloader downloads the public posts, stories, captions, and metadata of an Instagram profile into a folder. It keeps JSON sidecars per post, so timestamps and locations survive the download.

    Works on
    Username, URL
    Typed inputs
    u: Username
    API keys
    None

    Good for

    • Preserving a public profile before it changes or disappears.
    • Pulling captions and geotags into a case file.
    • Downloading by hashtag or location with the original flags.

    Before you run it

    • Instagram throttles anonymous downloads hard. Log in with a dedicated account for anything beyond a profile or two.
    • Private profiles need a logged-in account that follows them.

    Install and run instaloader

    otlite install instaloader
    otlite run instaloader -- u:jane_doe

    Pairs with Toutatis, Instagram Monitor and socid-extractor.

  • Toutatis

    toutatis

    ★ 4.3kGPL-3.0

    Toutatis pulls the public and semi-public fields of an Instagram account: user ID, bio, follower counts, and the obfuscated email or phone Instagram shows on password reset. It needs your own session ID.

    Works on
    Phone, Username
    Typed inputs
    u: Username
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs
    • Needs your own login or session

    Good for

    • The numeric Instagram ID for a handle.
    • The masked recovery email or phone hint for a profile.

    Before you run it

    • Requires a sessionid cookie from a logged-in Instagram account, passed with the original -s flag. Use a dedicated account.

    Install and run toutatis

    otlite install toutatis
    otlite run toutatis -- u:jane_doe

    Pairs with Instaloader, Ignorant and Instagram Monitor.

  • Yark

    yark

    ★ 2.2kMIT

    Yark archives a YouTube channel: videos, titles, descriptions, thumbnails, and comments, and keeps a history so you can see what changed or was deleted between refreshes. It serves the archive as a local site.

    Works on
    URL, Username, Name
    Typed inputs
    None; pass its own arguments after --
    API keys
    None

    Good for

    • Preserving a channel before it is taken down.
    • Tracking title and description edits over time.

    Before you run it

    • Large channels take hours and disk space. Archive one channel per folder.

    Install and run yark

    otlite install yark
    otlite run yark -- --help

    Pairs with Instaloader and Instagram Monitor.

  • Instagram Monitor

    instagram-monitor

    ★ 1.5kGPL-3.0

    Instagram Monitor watches a public profile and records changes over time: new posts, follower count moves, bio edits, with optional notifications. It runs until you stop it.

    Works on
    Username
    Typed inputs
    u: Username
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs
    • Keeps running until you stop it
    • Skipped by run --all and auto

    Good for

    • Documenting changes to a profile during an investigation.
    • Alerts when a watched account posts.

    Before you run it

    • It never exits on its own, so --all and auto skip it. Run it in tmux or as a service.
    • Instagram throttles unauthenticated polling. Configure a dedicated account as the project documents.

    Install and run instagram-monitor

    otlite install instagram-monitor
    otlite run instagram-monitor -- u:jane_doe

    Pairs with Instaloader, Toutatis and Yark.

  • Telepathy

    telepathy

    ★ 1.3kMIT

    Telepathy reads public Telegram chats through your own account and saves chat details and member lists. A comprehensive scan (-c) adds the message history, reactions, and forwards, written as CSV files for each chat.

    Works on
    Username
    Typed inputs
    tg: Telegram channel
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs
    • Needs your own login or session
    • Asks questions in the terminal
    • Skipped by run --all and auto

    Good for

    • Archiving a public channel's messages before they are deleted.
    • Mapping which channels forward into a chat (-f writes an edge list for Gephi).
    • Collecting member usernames to check with Maigret or Sherlock.

    Before you run it

    • Needs your own Telegram API ID and hash from my.telegram.org and a login code on first run, so otlite run --all and otlite auto skip it. Use a dedicated account.
    • Requires Python below 3.13. The project has not been maintained since mid-2024; otlite installs the last PyPI release, 2.3.4.
    • Comprehensive scans with media (-c -m) download everything the chat posted and can run for hours. Check what you are storing.

    Install and run telepathy

    otlite install telepathy
    otlite run telepathy -- tg:channelname

    Pairs with Telegram Phone Number Checker, Maigret and Sherlock.

  • socid-extractor

    socid-extractor

    ★ 1.1kMIT

    socid-extractor takes a profile URL and returns the structured fields on the page: user ID, display name, bio, follower counts, linked accounts. It is the extraction engine Maigret uses, exposed on its own.

    Works on
    URL, Username
    Typed inputs
    url: URL
    API keys
    None

    Good for

    • Getting the numeric user ID behind a profile, which survives username changes.
    • Structured fields from one URL without a full Maigret run.
    • JSON output for scripts.

    Before you run it

    • Some sites only return fields with cookies; pass them with the original --cookies flag.

    Install and run socid-extractor

    otlite install socid-extractor
    otlite run socid-extractor -- url:https://example.com

    Pairs with Maigret, Linkook and Instaloader.

Domain and DNS

Map subdomains, lookalikes, and infrastructure.

  • theHarvester

    theharvester

    ★ 18kGPL-2.0

    theHarvester gathers email addresses, subdomains, IPs, and names for a domain from public sources. Search engines, certificate logs, and threat-intelligence services each report separately, and -f writes the combined results to JSON and XML.

    Works on
    Domain
    Typed inputs
    d: Domain
    API keys
    SHODAN_API_KEY, HUNTER_API_KEYOptional. Store each with otlite keys set NAME.

    Good for

    • Early recon on a domain you are authorised to assess.
    • Collecting staff addresses that show a company's email naming pattern.
    • Choosing sources with -b to stay passive or to add keyed ones.

    Before you run it

    • Needs Python 3.12 or later. otlite pins a tested commit; current upstream has moved on to Python 3.14.
    • Several sources only answer with an API key. Add the common ones with otlite keys set SHODAN_API_KEY and otlite keys set HUNTER_API_KEY.
    • DNS resolution, brute force, and screenshot options contact the target directly. Leave them off for passive work.

    Install and run theharvester

    otlite install theharvester
    otlite run theharvester -- d:example.com

    Pairs with Sublist3r, Holehe and SpiderFoot.

  • Sublist3r

    sublist3r

    ★ 11kGPL-2.0

    Sublist3r collects a domain's subdomains from search engines, certificate logs, and public lookup sites. It prints one deduplicated hostname list, with optional brute forcing (-b) and port checks (-p) on top.

    Works on
    Domain
    Typed inputs
    d: Domain
    API keys
    None

    Good for

    • A quick passive subdomain list for a domain you are assessing.
    • Cross-checking ctfr or theHarvester output against different sources.
    • Saving hostnames to a file (-o) for resolution or screenshots later.

    Before you run it

    • Upstream changes slowly and some of its sources have shut down or block scripted queries, so expect several engines to return nothing.
    • Brute forcing (-b) and port checks (-p) send traffic to the target's DNS servers and hosts. Leave them off for passive work.

    Install and run sublist3r

    otlite install sublist3r
    otlite run sublist3r -- d:example.com

    Pairs with ctfr, theHarvester and dnsgen.

  • BBOT

    bbot

    ★ 11kAGPL-3.0

    BBOT is a recursive scanner that starts from a domain or IP, discovers subdomains, hosts, and services, and feeds each finding back in as a new target. Presets choose between passive enumeration and active scanning.

    Works on
    Domain, IP
    Typed inputs
    d: Domainip: IP address
    API keys
    None

    Good for

    • Subdomain enumeration that keeps going as it finds new names.
    • Passive recon with the subdomain-enum preset when you must stay quiet.
    • Exports to JSON or CSV for a spreadsheet or a case.

    Before you run it

    • Active presets probe the target. Only run them with written authorisation.
    • The first run installs module dependencies, which can take a few minutes.

    Install and run bbot

    otlite install bbot
    otlite run bbot -- d:example.com

    Pairs with dnstwist, ctfr and SpiderFoot.

  • dnstwist

    dnstwist

    ★ 5.7kApache-2.0

    dnstwist generates lookalike domains for a name you give it, including typos, homoglyphs, and extra TLDs, then checks which ones are registered and what they resolve to. Output includes MX records, so you see which lookalikes can receive mail.

    Works on
    Domain, IP
    Typed inputs
    d: Domain
    API keys
    None

    Good for

    • Brand and phishing monitoring for your own domain.
    • Checking a suspicious domain for the brand it imitates.
    • Scheduled diffs with otlite diff to catch newly registered lookalikes.

    Before you run it

    • Resolution is live DNS traffic from your machine. Use --registered to keep the output short.

    Install and run dnstwist

    otlite install dnstwist
    otlite run dnstwist -- d:example.com

    Pairs with dnsgen, ctfr and Fierce.

  • ctfr

    ctfr

    ★ 2.1kGPL-3.0

    ctfr lists the subdomains of a domain by reading Certificate Transparency logs through crt.sh. Nothing touches the target; it only asks the public log index.

    Works on
    Domain
    Typed inputs
    d: Domain
    API keys
    None

    Good for

    • Quick passive subdomain lists.
    • Seeding BBOT or dnsgen with known names.

    Before you run it

    • crt.sh is sometimes slow or rate limited; retry later rather than hammering it.

    Install and run ctfr

    otlite install ctfr
    otlite run ctfr -- d:example.com

    Pairs with BBOT, dnsgen and Fierce.

  • Fierce

    fierce

    ★ 1.8kGPL-3.0

    Fierce brute-forces subdomains with a wordlist, tries zone transfers, and scans the IP space around the hosts it finds for more names. It is an old-school DNS recon tool that still works.

    Works on
    Domain, IP
    Typed inputs
    d: Domain
    API keys
    None

    Good for

    • Finding non-contiguous IP ranges tied to a domain.
    • Zone transfer checks on your own name servers.

    Before you run it

    • Brute force and zone transfer attempts are visible to the target's DNS operators.

    Install and run fierce

    otlite install fierce
    otlite run fierce -- d:example.com

    Pairs with ctfr, dnsgen and BBOT.

  • dnsgen

    dnsgen

    ★ 1.1kMIT

    dnsgen takes a list of known subdomains and generates plausible permutations: numbers, environments, regions, and common words. It prints candidates for a resolver to check; it does no resolution itself.

    Works on
    Domain
    Typed inputs
    None; pass its own arguments after --
    API keys
    None

    Good for

    • Expanding ctfr or BBOT output into more names to resolve.
    • Finding staging and dev hosts that follow a naming pattern.

    Before you run it

    • Pipe the output into a resolver such as the one in BBOT or secator; dnsgen only generates.

    Install and run dnsgen

    otlite install dnsgen
    otlite run dnsgen -- --help

    Pairs with ctfr, BBOT and dnstwist.

Web and records

Mine URLs, dorks, archives, and public filings.

  • ParamSpider

    paramspider

    ★ 3.2kMIT

    ParamSpider pulls every archived URL for a domain from the Wayback Machine and keeps the ones with query parameters. The result is a list of endpoints and parameter names without touching the live site.

    Works on
    Domain, URL
    Typed inputs
    d: Domain
    API keys
    None

    Good for

    • Passive endpoint discovery before an authorised test.
    • Finding old parameters a site may still accept.

    Before you run it

    • Installed from the repo's main branch, so otlite update paramspider tracks it.

    Install and run paramspider

    otlite install paramspider
    otlite run paramspider -- d:example.com

    Pairs with Sitedorks, FinalRecon and theHarvester.

  • FinalRecon

    finalrecon

    ★ 3kMIT

    FinalRecon runs a set of web recon checks against a URL in one go: headers, SSL certificate, WHOIS, crawler, DNS, subdomains, directory search, and a port scan. The --full flag runs everything.

    Works on
    Domain, IP, URL
    Typed inputs
    url: URL
    API keys
    None

    Good for

    • A first look at a site before deeper tools.
    • A single report with the basics for a case.

    Before you run it

    • Directory search and port scan are active. Use the passive modules on targets you do not own.
    • Some modules take API keys in its own config.

    Install and run finalrecon

    otlite install finalrecon
    otlite run finalrecon -- url:https://example.com

    Pairs with SpiderFoot, BBOT and ctfr.

  • CrossLinked

    crosslinked

    ★ 1.6kGPL-3.0

    CrossLinked scrapes search engines for LinkedIn results about a company and turns the names it finds into email addresses in the format you specify. It never touches LinkedIn directly.

    Works on
    Username, Email, Name
    Typed inputs
    None; pass its own arguments after --
    API keys
    None

    Good for

    • Building a staff list for an authorised assessment.
    • Guessing the email format of an organisation.

    Before you run it

    • Takes a company name and a format string such as {first}.{last}@example.com with the original flags; the typed prefixes only cover the simple cases.
    • Search engines rate limit scraping. Keep runs small.

    Install and run crosslinked

    otlite install crosslinked
    otlite run crosslinked -- --help

    Pairs with pywerview, secator and FinalRecon.

  • Auto Archiver

    auto-archiver

    ★ 1.1kMIT

    Auto Archiver saves a copy of what a URL points to, from social media posts and videos to plain pages. Each saved file gets a hash so you can show later that it has not changed, and runs can be logged to CSV or Google Sheets.

    Works on
    URL
    Typed inputs
    url: URL
    API keys
    GOOGLE_API_KEY, GOOGLE_CREDENTIALS, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYOptional. Store each with otlite keys set NAME.
    • Dual-use: asks you to accept a notice before it installs

    Good for

    • Preserving posts and videos before they are deleted.
    • Building an evidence log with a hash for each archived item.
    • Batch archiving from a Google Sheet once credentials are set.

    Before you run it

    • Requires Python below 3.13. Video downloads also need ffmpeg installed on the system.
    • Google Sheets or Drive storage needs GOOGLE_CREDENTIALS (otlite keys set GOOGLE_CREDENTIALS), and S3 storage needs the AWS keys. Local storage works without any key.
    • It fetches each URL from your machine, so the site sees your IP address. Some platforms only return full content to a logged-in session, set in its config file.

    Install and run auto-archiver

    otlite install auto-archiver
    otlite run auto-archiver -- url:https://example.com

    Pairs with Yark and Instaloader.

  • Sitedorks

    sitedorks

    ★ 1.1kGPL-3.0

    Sitedorks builds search-engine queries that look for a term across a curated set of sites, such as paste sites, code hosts, and social networks, and opens them in your browser. It saves typing the dorks by hand.

    Works on
    Domain, URL
    Typed inputs
    q: Search text
    API keys
    None
    • Asks questions in the terminal
    • Skipped by run --all and auto

    Good for

    • Checking where a company name or domain appears across paste and code sites.
    • Bug bounty scope discovery with the built-in program lists.

    Before you run it

    • It opens browser tabs rather than scraping, so there is no file output to keep. Use otlite run --case for the command record.

    Install and run sitedorks

    otlite install sitedorks
    otlite run sitedorks -- q:acme

    Pairs with ParamSpider, CrossLinked and OnionSearch.

  • OSINT Brazuca Regex

    osint-brazuca-regex

    ★ 1kMIT

    OSINT Brazuca Regex is a collection of regular expressions for Brazilian identifiers: CPF, CNPJ, phone numbers, licence plates, and more. otlite fetches the collection so you can grep documents and results with it.

    Works on
    Domain, Name
    Typed inputs
    None; pass its own arguments after --
    API keys
    None

    Good for

    • Extracting Brazilian identifiers from text and search output.
    • Validating CPF and CNPJ formats in a case.

    Before you run it

    • It is a pattern library, not a scanner. Use the patterns with grep, otlite extract, or your own scripts.

    Install and run osint-brazuca-regex

    otlite install osint-brazuca-regex
    otlite run osint-brazuca-regex -- --help

    Pairs with Sitedorks and ParamSpider.

  • EDGAR Tool

    edgar-tool

    ★ 218MIT

    EDGAR Tool runs the SEC's full-text search over company filings and saves the matches to a file. Each row names the filer, form type, and filing date and links to the document, in CSV, JSON, or JSON Lines.

    Works on
    Name
    Typed inputs
    q: Search text
    API keys
    None

    Good for

    • Finding every US filing that mentions a person or company name.
    • Narrowing by form type, date range, or place of incorporation.
    • Pulling recent filings for a list of tickers with edgar rss.

    Before you run it

    • The q: input runs edgar text-search, and a filing must contain every word you give, so shorter queries return more.
    • Searches cover the last five years by default. Add --date-range all or --start-date for older filings; SEC full-text search starts in 2001.
    • edgar rss with --every-n-mins keeps polling until you stop it. Run it on its own rather than under otlite run --all.

    Install and run edgar-tool

    otlite install edgar-tool
    otlite run edgar-tool -- q:acme

    Pairs with CrossLinked and theHarvester.

Dark web

Crawl and search onion services through Tor.

  • TorBot

    torbot

    ★ 4.9kOther

    TorBot crawls an onion site through Tor, collects the links and emails it finds, and can build a tree of the site. It needs a local Tor service to route through.

    Works on
    URL, Domain
    Typed inputs
    url: URL
    API keys
    None

    Good for

    • Mapping an onion site's structure.
    • Harvesting contact addresses published on it.

    Before you run it

    • Start Tor first (sudo systemctl start tor on Debian and Ubuntu).
    • Crawling is slow over Tor; limit depth.

    Install and run torbot

    otlite install torbot
    otlite run torbot -- url:https://example.com

    Pairs with OnionSearch and FinalRecon.

  • OnionSearch

    onionsearch

    ★ 1.8kGPL-3.0

    OnionSearch sends a query to a set of dark web search engines over Tor and collects the onion URLs they return into one CSV. It is a search aggregator, not a crawler.

    Works on
    URL
    Typed inputs
    q: Search text
    API keys
    None

    Good for

    • Finding onion sites that mention a term, name, or brand.
    • Seeding TorBot with URLs to crawl.

    Before you run it

    • Needs Tor running locally. The search term goes in with q:, which becomes the tool's positional argument.

    Install and run onionsearch

    otlite install onionsearch
    otlite run onionsearch -- q:acme

    Pairs with TorBot and Sitedorks.

Frameworks

Multi-module recon and scanning suites.

  • SpiderFoot

    spiderfoot

    ★ 22kMIT

    SpiderFoot runs two hundred-odd modules against a domain, IP, email, or username and links what they return into one graph. The CLI mode writes results to the terminal or a file; the web UI is optional.

    Works on
    Domain, IP, Username, Email
    Typed inputs
    d: Domainip: IP address
    API keys
    None

    Good for

    • Attack-surface mapping of a domain you are authorised to assess.
    • Pivoting from one seed into related hosts, emails, and names.
    • Passive-only runs (-u passive) when you must not touch the target.

    Before you run it

    • Installed from git rather than PyPI, so the first install takes longer.
    • Many modules need their own API keys; without them SpiderFoot still runs but with fewer sources.
    • A full scan can run for hours. Start with a passive scan and a module subset.

    Install and run spiderfoot

    otlite install spiderfoot
    otlite run spiderfoot -- d:example.com

    Pairs with BBOT, FinalRecon and secator.

  • IVRE

    ivre

    ★ 4.2kGPL-3.0

    IVRE stores and analyses scan results from Nmap, Masscan, Zeek, and passive DNS in a database, then lets you query and view them in a web UI. otlite installs the Python package; the scanners and database are separate.

    Works on
    Domain, IP
    Typed inputs
    None; pass its own arguments after --
    API keys
    None

    Good for

    • Keeping large scan datasets searchable.
    • Passive DNS and flow analysis from your own sensors.

    Before you run it

    • Needs MongoDB or another supported database and the scanners themselves. Follow the project's setup before the first run.

    Install and run ivre

    otlite install ivre
    otlite run ivre -- --help

    Pairs with BBOT, secator and Fierce.

  • fsociety

    fsociety

    ★ 1.8kMIT

    fsociety is a menu-driven collection of recon, scanning, and exploitation tools. The OSINT entries wrap other projects in this registry; the rest is penetration-testing tooling.

    Works on
    Domain, Username, Email
    Typed inputs
    None; pass its own arguments after --
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs
    • Asks questions in the terminal
    • Skipped by run --all and auto

    Good for

    • A menu over tools you already know.
    • Teaching environments.

    Before you run it

    • Interactive by design, so it does not fit --json pipelines. Much of it is offensive tooling: authorisation first.

    Install and run fsociety

    otlite install fsociety
    otlite run fsociety -- --help

    Pairs with secator and SpiderFoot.

  • OpenOSINT

    openosint

    ★ 1.6kMIT

    OpenOSINT is an agent-style tool: you describe what you want in a REPL and it chooses and runs lookups on usernames, emails, and domains. It also exposes an MCP server so other agents can drive it.

    Works on
    Username, Email, Domain
    Typed inputs
    u: Usernamee: Emaild: Domain
    API keys
    ANTHROPIC_API_KEY, SHODAN_API_KEY, VIRUSTOTAL_API_KEY, CENSYS_API_ID, CENSYS_SECRET, ABUSEIPDB_API_KEY, IP2LOCATION_API_KEY, BRIGHTDATA_API_KEY, BRIGHTDATA_SERP_ZONE, BRIGHTDATA_UNLOCKER_ZONE, OPENAI_API_KEY, OPENOSINT_PROXY_URLOptional. Store each with otlite keys set NAME.

    Good for

    • Exploratory sessions where you do not know which tool to run first.
    • Wiring open-source lookups into an agent over MCP.

    Before you run it

    • Needs a model provider configured; read the project's setup first.

    Install and run openosint

    otlite install openosint
    otlite run openosint -- u:jane_doe

    Pairs with user-scanner, SpiderFoot and secator.

  • secator

    secator

    ★ 1.3kOther

    secator wraps dozens of recon and scanning tools behind one command with a shared output format, and runs them as tasks, workflows, or full scans. It installs the underlying tools for you.

    Works on
    Domain, IP, Username, Email
    Typed inputs
    u: Usernamee: Emaild: Domain
    API keys
    None
    • Dual-use: asks you to accept a notice before it installs

    Good for

    • Standardised JSON output across many scanners.
    • Repeatable recon workflows for authorised targets.

    Before you run it

    • Its workflows can be active scans. Check what a workflow does before pointing it at a host.
    • Installing the wrapped tools pulls in Go and other runtimes.

    Install and run secator

    otlite install secator
    otlite run secator -- u:jane_doe

    Pairs with BBOT, SpiderFoot and FinalRecon.

  • pywerview

    pywerview

    ★ 1.1kGPL-3.0

    pywerview is a Python port of PowerView for enumerating Active Directory from Linux: users, groups, computers, shares, and sessions, over LDAP and SMB with domain credentials you hold.

    Works on
    Domain, Username
    Typed inputs
    None; pass its own arguments after --
    API keys
    None
    • Needs your own login or session

    Good for

    • AD enumeration during an authorised internal assessment.
    • Mapping group membership without a Windows host.

    Before you run it

    • Needs domain credentials and network access to a domain controller. This is internal network tooling, not open-source intelligence in the public sense.

    Install and run pywerview

    otlite install pywerview
    otlite run pywerview -- --help

    Pairs with CrossLinked and secator.

Command reference

Everything else, one verb each.

Add --json to any command for scripts, and --yes to skip prompts. otlite info <tool> shows a tool's inputs and a command to try.

Find

  • otlite list

    Browse the catalog (--installed for yours)

  • otlite search <query>

    Search tools

  • otlite info <tool>

    Inputs, keys, and an example command

  • otlite example <tool>

    Show sample output

Run

  • otlite install <tool>

    Install one or more tools

  • otlite run <tool> -- <args>

    Run one or more tools

  • otlite run --all u:<name>

    Every matching tool, in parallel

  • otlite auto <target>

    Detect the type and run

  • otlite playbook --list

    Saved multi-tool runs

Results

  • otlite results

    List, filter, and sort saved runs

  • otlite run --case <name>

    Group runs under a case

  • otlite extract <tool|path>

    Pull indicators from results

  • otlite diff <tool> <target>

    Compare the last two runs

Keys

  • otlite keys set <NAME>

    Store a key without echoing it

  • otlite keys list

    Names only, never values

  • otlite keys rm <NAME>

    Delete a key

  • otlite keys check

    Which tools are missing keys

Maintain

  • otlite update --all

    Update tools

  • otlite check-updates

    See what is behind

  • otlite remove <tool>

    Remove cleanly

  • otlite resume

    Finish interrupted jobs

  • otlite doctor

    Check the machine, print fixes

Results

Every run kept, in a shape scripts can read.

Output lands under ./results/<tool>/<target>/ in the folder you run from, or under results/cases/<case>/ with --case. Set OTLITE_RESULTS_DIR to keep everything in one place.

  • <timestamp>_<tool>_<target>_<id>.txt

    The tool's own output, exactly as it printed it.

  • .meta.json

    The command with secrets masked, timing, exit code, status, size, and SHA-256.

  • .envelope.json

    One JSON shape for every tool: input, case, status, duration, and the entities found (emails, domains, IPs, URLs, accounts).

Exit codes

0
Success
1
Error
2
Invalid input
127
The tool's command is missing
130
Interrupted
.envelope.json
{
  "envelope": 1,
  "tool": "sherlock@0.15.0",
  "runtime": "otlite",
  "input": "u:jane_doe",
  "status": "ok",
  "exit_code": 0,
  "duration_ms": 41230,
  "entities": [
    { "type": "url", "value": "https://github.com/jane_doe" }
  ],
  "output": { "path": "results/sherlock/jane_doe/…txt", "sha256": "…" }
}

A single-tool run exits with the tool's own exit code. Results can hold personal data, so store and share them accordingly.

otlite or ot?

Two ways to run the same kind of tool.

otlite is the lightweight edition. ot is the OTInstaller Registry's command line, for when you want every tool signed and sandboxed. Both are free and made by the same people.

otlite

No Docker, no account.

  • 47 curated tools, pinned and tested before each release
  • Each tool in its own virtualenv, not in a sandbox
  • Linux and macOS, Python 3.10–3.14
  • Tools that need a terminal or raw arguments work as usual
Install otlite

ot

Signed, scanned, and sandboxed.

  • Every package digest-pinned, signature-checked, and security-scanned
  • Runs in a locked-down container with no network unless declared
  • Linux, macOS, and Windows; needs Docker or Podman
  • Publish your own tools and guides to the registry
See OTInstaller

Use ot when you can run containers; use otlite on a server or VM without them, or when a tool needs a terminal.

What otlite sends

No usage telemetry. otlite talks to GitHub and PyPI to install tools, and to nothing else of ours. Crash reports are off unless you turn them on, cover only otlite's own crashes, and never include targets, arguments, output, keys, or paths. DO_NOT_TRACK=1 always turns them off.

Responsible use

otlite installs and runs third-party tools; it does not create or verify them. Many are dual-use, and those ask you to accept a notice before they install. Use them only on targets you are authorised to investigate, and follow the laws and service terms that apply to you. Phishing, brute-force, bombing, and doxing tools are never listed.

When open-source isn't enough

Breach records, people search, WHOIS history, and face matching come from commercial providers. SearchIn runs them from one search box, priced per lookup with no subscription.

See SearchIn

Watch it run

Ninety seconds, from install to results.

Recorded when otlite was still called otinstaller. The commands are the same: type otlite where the video types ot or otinstaller.

FAQ

otlite, answered

Is otlite free?

Yes. otlite is free and open source under the Apache-2.0 license. It is never billed to an OSINTverse wallet and does not need an OSINTverse account.

What happened to otinstaller?

It was renamed otlite in October 2026, with the same commands and the same tools. pip install -U otinstaller now installs otlite and keeps the otinstaller command working, with a note pointing to the new name. Settings and keys move from ~/.otinstaller to ~/.otlite on the first run; reinstall your tools once.

Do I need Docker?

No. otlite installs each tool into its own Python virtualenv, so it runs anywhere Python 3.10 or newer does. If you would rather run every tool signed and in a locked-down container, use ot from the OTInstaller Registry, which needs Docker or Podman.

Does it work on macOS or Windows?

macOS, yes: it is tested on macOS 14 on Apple silicon, and the one-line installer sets up pipx with Homebrew. Windows is not supported natively; install Ubuntu through WSL2 and run otlite inside it, or use ot, which runs on Windows.

Does it change my system Python?

No. Every tool installs into its own virtualenv under ~/.otlite/, so tools never conflict with each other or with your system packages. Removing a tool removes its environment.

Where are results saved?

Under ./results/<tool>/<target>/ in the folder you run from, as the tool's output plus a .meta.json sidecar and a .envelope.json with the entities found. Set OTLITE_RESULTS_DIR to keep them in one place, and use otlite results to list and filter them.

How are API keys stored?

In one file, ~/.otlite/.env, with permissions 600. otlite keys set asks for the value without echoing it, each tool receives only the keys it declares, and key values never reach logs or saved results. No tool in the catalog requires a key; some return more with one.

How are tools chosen?

A tool is listed when it installs cleanly with pip or git, passes a smoke test, and a person has reviewed it. Each release pins the versions it was tested with, and a nightly check catches tools that break. Phishing, IP grabbers, bombers, brute force, and doxing tools are excluded by policy.

Does otlite send any data?

No usage data. It contacts GitHub and PyPI to install and update tools. Crash reports are opt-in, cover only otlite's own crashes, and exclude targets, arguments, output, keys, and paths. The tools you run make their own requests, so check each tool's page before you point it at a target.

How is it different from SearchIn?

otlite runs free open-source tools on your own machine. SearchIn runs commercial OSINT data providers (breach, people, domain, and image sources) in the browser, priced per lookup. Many investigators use both.

Install your first tool in a minute.

One line installs otlite, then otlite init. The docs walk through typed inputs, API keys, results, and resume. Source and llms.txt are on GitHub.

Quick install

curl -fsSL https://get.otinstaller.com/otlite | sh

Apache-2.0 licensed · contributions welcome