// comparison

insto vs Osintgram: Instagram OSINT CLIs Compared (2026)

Osintgram has been the de-facto Instagram OSINT CLI since 2020 — the historic standard. insto is the newer alternative we build, focused on analytics that Osintgram doesn't have: geo OSINT, network intersections, posting-cadence forensics, and snapshot/watch/diff. Here's the honest head-to-head, including where Osintgram wins.

TL;DR

insto is the right pick if you want unique analytics commands (/where, /intersect, /timeline, /fans), snapshot/diff over time, Maltego export, and a no-login HikerAPI default. Osintgram is the right pick if you want the well-known community tool with the largest existing ecosystem of tutorials and forks. Important nuance: as of PR #2586 (merged August 2025) Osintgram can also run on HikerAPI — so the "no IG login" advantage is no longer unique to insto.

Summary

DimensioninstoOsintgram
Default backendHikerAPI (no IG login)logged-in IG session
HikerAPI backendyes (default)yes (since PR #2586, Aug 2025)
Optional login backendaiograpi (async)instagrapi sync
Geo OSINT — /where, /place, /placeposts✅ unique
Network ops — /intersect, /mutuals✅ unique
Posting cadence — /timeline✅ unique
Superfan ranking — /fans✅ unique❌ partial
Snapshot / watch / diff (sqlite)
Maltego CSV export❌ (write your own script)
REPLprompt-toolkit, slash-popup completion, live /watchbasic shell
One-shot / scriptable stdin/stdout pipes⚠️ shell only
Sync / asyncasync (Python ≥ 3.11)sync
Type-safe / strict mypy✅ ~93% coverage
Years in market2025–2020– (longer history)
Community / forkssmall but growinglarge, many tutorials

Killer features insto has that Osintgram doesn't

This is the part of the comparison that actually matters. The standard OSINT commands (followers, following, posts, captions, comments, hashtags-used, tagged-in) are in both tools. The five capabilities below are unique to insto as of April 2026:

1. Geo OSINT — /where, /place, /placeposts

Build a heatmap of where a target shoots their content. /where @target aggregates location tags across their feed and surfaces clusters. /place <location_id> reverses the question — list the recent posts shot at that location. /placeposts is the same with media metadata. There is no Osintgram equivalent.

2. Network intersections — /intersect, /mutuals

Two targets, one question: who do they both follow? /intersect @a @b returns the set intersection of their following lists; /mutuals @a @b returns mutuals. For investigations into shared social graphs, this collapses what would otherwise be hours of manual diffing into one command.

3. Posting cadence — /timeline

When does the target post? /timeline @target bins posting timestamps by hour-of-day and day-of-week. Useful for behavior analysis and timezone inference. Osintgram doesn't compute this.

4. Superfan ranking — /fans

Who interacts most with the target? /fans @target ranks accounts by how often they appear in likes and comments across recent posts — the target's "superfans". Osintgram has a partial equivalent (raw lists), but not the ranking aggregation.

5. Snapshot / watch / diff (sqlite-backed)

Persisted in ~/.insto/store.db:

insto snapshot @target           # save a profile + followers state
insto watch @target --interval 1h  # poll on a schedule
insto diff @target               # what changed since last snapshot

Track unfollows over time, new follower spikes, bio changes, profile-pic swaps. There is no Osintgram equivalent — you'd build it yourself with cron + scripts.

Backends — and an important nuance

For a long time the cleanest insto-vs-Osintgram distinction was "insto runs on HikerAPI, Osintgram needs an Instagram login". That's no longer accurate. Osintgram merged PR #2586 in August 2025 (we contributed it) — Osintgram now reads HIKERAPI_TOKEN and runs through HikerAPI without an Instagram login.

So the honest story today:

  • insto's HikerAPI backend is the default. No IG session is ever in scope; you don't accidentally route through your account.
  • Osintgram's HikerAPI backend is opt-in. The default path is still username/password and most existing tutorials/forks use the login flow. Some users will set HIKERAPI_TOKEN; many won't.
  • Both tools also support a logged-in backend. insto uses async aiograpi as an optional extra (pipx install 'insto[aiograpi]'). Osintgram uses sync instagrapi.

The HikerAPI default still matters operationally — investigators using insto out-of-the-box don't need to think about account hygiene. With Osintgram, you need to know about and configure the HikerAPI backend explicitly.

REPL UX

insto's REPL is built on prompt-toolkit:

  • Slash-popup completion (visually similar to Claude Code's slash menu).
  • Bottom toolbar showing active target, backend, and live HikerAPI quota balance.
  • Live /watch notifications when a watched target's state changes.
  • Tab-completion across commands and recently-seen usernames.

Osintgram's REPL is a simpler shell loop — works fine, but no completion, no live quota, no watch notifications.

insto also has a true one-shot mode that Osintgram lacks:

insto @target -c info
insto @target -c followers --limit 1000 --json -   # write to stdout, pipe to jq
insto @target -c dossier --output @target.zip
insto - -c batch <targets.txt                       # batch from stdin

Engineering stack

insto is Python ≥ 3.11, async-first, strict mypy, ~93% test coverage, ruff-clean. Backends, the facade, and every command are async def. Schema mismatches surface as typed SchemaDrift(endpoint, missing_field) exceptions instead of silent KeyErrors deep in mappers.

Osintgram is sync Python, no type checking, smaller test footprint. The historical advantage is its longer track record.

Maltego CSV export

Add --maltego to any flat-row insto command:

insto @target -c followers --limit 1000 --maltego --csv -  > followers.csv
# Maltego: Import → CSV File → Person entity

/dossier ships a Maltego-ready CSV by default in its output bundle. Osintgram has no native Maltego export; you transform followers.txt yourself.

When to choose Osintgram

  • You want the historically dominant tool with the most tutorials and forks.
  • You're following an existing playbook or training that assumes Osintgram.
  • The standard command surface (info, followers, captions, comments, locations, tagged) is enough.
  • You don't need geo-OSINT analytics, network intersections, timeline, fans ranking, or snapshot/watch/diff.

When to choose insto

  • You need the unique analytics commands: /where, /intersect, /timeline, /fans.
  • You want snapshot/watch/diff to track changes over time.
  • You want Maltego CSV export to drop straight into the graph view.
  • You want HikerAPI on the default path — no IG account ever in scope.
  • You want async, type-safe Python with proper test coverage and a modern REPL UX.

aiograpi (the async Instagram private API library that powers insto's optional logged-in backend), Social-Media-OSINT-Tools-Collection, awesome-osint.

For related tooling, see insta-dl vs instaloader (downloads, not OSINT) and instagrapi vs instaloader (libraries).

Try the subzeroid stack.

HikerAPI, Lamatok, and Datalikers each include 100 free requests. No credit card required.