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.
Table of contents
Summary
| Dimension | insto | Osintgram |
|---|---|---|
| Default backend | HikerAPI (no IG login) | logged-in IG session |
| HikerAPI backend | yes (default) | yes (since PR #2586, Aug 2025) |
| Optional login backend | aiograpi (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) |
| REPL | prompt-toolkit, slash-popup completion, live /watch | basic shell |
| One-shot / scriptable | ✅ stdin/stdout pipes | ⚠️ shell only |
| Sync / async | async (Python ≥ 3.11) | sync |
| Type-safe / strict mypy | ✅ ~93% coverage | ❌ |
| Years in market | 2025– | 2020– (longer history) |
| Community / forks | small but growing | large, 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 syncinstagrapi.
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
/watchnotifications 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.
Related projects
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).