Blog

How to share OSINT results: one link that lasts 24 hours

· OTInstaller

Share what sherlock, holehe or any OSINT tool found as one link that expires after a day, with ot share and otlite share. Worked examples inside.

To share OSINT results, save the run and give its id to ot share, as in ot share 3f9a1c2e; with otlite, give otlite share the result file. It uploads the saved run and prints a link on otinstaller.com that anyone you send it to can open for 24 hours, and then the registry deletes it. The page shows the inputs, every account, email, domain or address the tool found, and its raw output. It never says who shared it, and your case names, command lines and file paths stay on your machine. It works for every tool on the registry, from sherlock to holehe, because every run is saved in the same shape.

Until now the choices were a screenshot, which cuts the result off at the edge of the window and can’t be searched, a copy of the results folder, which carries your paths and case names with it, or pasting the terminal into a chat. A link fixes all three: the other person sees the whole result, laid out the same way for every tool, and it is gone the next day.

Share a run in two commands

Every run ot makes is saved under results/, and ot runs lists them, newest first, with the id each one has:

ot runs
RUN       STARTED           TOOL                           TARGET    STATUS    ENTITIES  CASE
77b0e1d4  2026-10-27 15:47  osintverse-community/holehe    jane_doe  complete  1         acme
3f9a1c2e  2026-10-27 15:45  osintverse-community/sherlock  jane_doe  complete  3         acme

Give one of those ids to ot share. It says what will go up and asks before anything leaves your machine:

ot share 3f9a1c2e
Share 1 run (sherlock) on jane_doe for 24 hours?
  - Anyone with the link can see the inputs and everything the tools found, until it expires in 24 hours.
  - File paths, the case name and the command line stay on this machine.
  - It is not linked to any account; `ot shares rm` on this machine deletes it early.
Share? [y/N] y
Shared 1 run: https://otinstaller.com/r/m9A1n2bwQwZ68om4xXDY1g
The link works until 28 Oct 10:09 (in 24 h). Delete it sooner with `ot shares rm m9A1n2bwQwZ68om4xXDY1g`.

Send the link however you like: a chat message, a ticket, an email. ot share also takes the path of a saved result file, and several ids at once (ot share 3f9a1c2e 77b0e1d4), which puts them on one page.

Most searches run more than one tool. A username can go through sherlock and maigret, the email address it leads to through holehe, and the domain behind that through the domain tools. Keep those runs together with --case, and share the case:

ot run osintverse-community/sherlock u:jane_doe --case acme
ot run osintverse-community/holehe e:jane_doe@example.com --case acme
ot share --case acme
Share 2 runs (sherlock, holehe) on jane_doe, jane_doe@example.com for 24 hours?

Every run saved under results/cases/acme/ goes on the same page, oldest first. ot auto takes --case too, and a playbook keeps its runs in a case of its own (playbook-<name>), so one link can hold an entire username investigation or email investigation. One share takes up to 50 runs and 5 MB.

What the person you send it to sees

The link opens a page like this one, made from two test runs against the example username jane_doe:

A shared result page with two runs on the example username jane_doe: sherlock’s three accounts and holehe’s one, each with its input, how it ended, when it ran and how long it took

For every run there is the tool and its version (linked to its page on the registry), the inputs, whether it completed, its exit code, when it ran and for how long, and a table of what it found: each entity’s type, value and the site it came from. Web addresses are links. Below the table, the tool’s raw output opens on a click, and Download JSON gives the whole share as data for a script or another tool. The page says when the link stops working, and it reminds the reader that a match is not proof of who owns an account.

What goes up, and what stays on your machine

Each run goes up as its result envelope, the same JSON shape ot run prints, described in Results. ot share --dry-run prints exactly what would be uploaded and sends nothing. This is the start of it for the case above:

ot share --case acme --dry-run
{
  "share": 1,
  "source": "ot",
  "runs": [
    {
      "envelope": 1,
      "tool": "osintverse-community/sherlock@0.15.0",
      "runtime": "docker",
      "input": {
        "username": "jane_doe"
      },
      "started_at": "2026-10-27T10:15:00Z",
      "ended_at": "2026-10-27T10:15:42Z",
      "duration_ms": 42100,
      "exit_code": 0,
      "status": "complete",
      "entities": [
        {
          "type": "account",
          "value": "https://github.com/jane_doe",
          "source": "github.com"
        },

What goes up for each run:

  • the tool and its version, and how it ran (Docker, pipx or otlite)
  • the inputs you gave it
  • when it started and ended, its exit code and how it ended
  • every entity it found, with its source and any details the tool added
  • its warnings
  • its raw output, unless that is over 1 MB (then the entities still go, and a warning says the raw output was left out)

What stays on your machine:

  • the run id and the case name
  • the command line, with any flags you passed
  • the paths of your result files, which usually include your user name
  • anything the tool wrote to stderr
  • your API keys: ot passes them to a tool without ever writing them into a saved run

ot leaves these out of the upload, and the registry drops them again if they ever arrive. The format is published as a JSON Schema, share-v1.

A shared result is meant for the people you give the link to, so the page keeps out of everyone else’s way:

  • The link is the only key. Its id is 22 random characters, so it can’t be guessed or counted through.
  • It isn’t indexed. The page tells search engines not to index it, and robots.txt keeps crawlers off every shared result.
  • It isn’t cached. Neither the registry’s edge cache nor your browser keeps a copy, so a deleted link stops working at once.
  • No referrer leaves it. When the reader clicks one of the accounts in the results, that site is not told where they came from.
  • The site’s page counts never see the id. Analytics records /r/:id, never the link itself.
  • It says nothing about who shared it. No name, account or machine appears on the page or in the JSON.

The results themselves are whatever the tools found, so they often contain personal data. Share them only with people who should see them. The acceptable use policy covers shared links, and every page has a Report this link button that reaches the team.

Exactly 24 hours from when it was made. The page says when it stops working, and after that the link answers that it has expired. The registry deletes the results within a quarter of an hour of that. Nothing extends a link; to share the same runs again, run ot share again and send the new link. The privacy policy says what the registry keeps and for how long.

ot shares lists the links you made that still work:

ot shares
ID                      EXPIRES  TOOLS             URL
JAwWL7ISyNs75vkCqfFkZQ  in 24 h  sherlock, holehe  https://otinstaller.com/r/JAwWL7ISyNs75vkCqfFkZQ

ot shares rm deletes one, by its id or the whole link:

ot shares rm JAwWL7ISyNs75vkCqfFkZQ
Deleted JAwWL7ISyNs75vkCqfFkZQ; the link no longer works.

That works on the machine you shared from without an account: ot keeps each link’s delete token in its data folder, readable only by you. When ot is signed in (ot login), a share is also linked to your account, which nobody else can see. Then ot shares lists it on any machine you are signed in on, and Settings → Shared results lists it on the website, with a button that deletes it. Add --anonymous to leave your account out of a share.

Share from a script or a CI job

Without a terminal there is nobody to answer the question, so ot share stops and says what to pass:

ot share 3f9a1c2e
error: sharing results puts them on the web, so it asks first, and there is no terminal to ask in; pass --yes

With --yes it shares straight away, and --json prints the answer as data, delete token included, so a script can post the link and delete it later:

ot share --case acme --yes --json
{
  "id": "JAwWL7ISyNs75vkCqfFkZQ",
  "url": "https://otinstaller.com/r/JAwWL7ISyNs75vkCqfFkZQ",
  "created_at": 1793459471969,
  "expires_at": 1793545871969,
  "delete_token": "…",
  "owned": false,
  "runs": 2,
  "tools": [
    "osintverse-community/sherlock@0.15.0",
    "osintverse-community/holehe@1.61.0"
  ]
}

Keep the delete token out of logs. One address can make 20 shares an hour without an account, and a signed-in account 60. The CLI reference lists every flag.

Share results from otlite

otlite, the edition that runs on Linux and macOS without Docker, has the same command. It takes a result file (the .txt output, its .meta.json or its .envelope.json), a case, or a tool and target for that tool’s newest run:

otlite share results/sherlock/jane_doe/20261027-101500_sherlock_jane_doe_ab12cd34.txt
otlite share --case acme
otlite share --tool sherlock --target jane_doe
otlite shares
otlite shares rm <id>

It asks before uploading, and --yes, --dry-run and --json work as they do in ot. otlite has no accounts, so its links are always anonymous, and otlite shares rm deletes one early from the machine that made it. The output text goes up as the raw output, up to 1 MB. See the otlite docs.

Let an AI agent share results

ot mcp gives AI agents a share_runs tool, so an agent working through a case with you can hand you a link to what it found. Whatever your agent policy lets an agent do without asking, sharing always asks you first, with the same question ot share asks. The agent gets the link, never the delete token, and every share it makes is written to the local audit log (ot mcp audit). MCP tools has its arguments.

The commands at a glance

Command What it does
ot share 3f9a1c2e Share one saved run, after asking
ot share 3f9a1c2e 77b0e1d4 Share several runs on one page
ot share --case acme Share every run in a case
ot share 3f9a1c2e --dry-run Print what would be uploaded, upload nothing
ot share 3f9a1c2e --yes --json Share without asking, and print the answer as JSON
ot share 3f9a1c2e --anonymous Leave your account out, even when signed in
ot shares · ot shares rm <id> List your links that still work · delete one
otlite share --case acme · otlite shares rm <id> The same with otlite

ot share needs ot 0.19.0 or later and otlite share needs otlite 1.5.0 or later: ot self-update updates ot, and otlite check-updates gives the command that updates otlite. New to both? Getting started installs ot in a minute, and the posts on username search tools and email OSINT tools have runs worth sharing. Sharing a result in the docs is the short reference.

More posts · Changelog · This post as Markdown

Esc

Try

↑ ↓ to move↵ to open