Open-source, self-hostable tool that bulk-imports your existing Instagram saved posts, enriches each one (caption + reel transcript + AI summary), auto-categorizes them with embeddings + an LLM, and lets you link saves into an Ideas mind-map.
Bring your own keys. Runs locally. Your data stays yours.
Instagram Collections require manual upkeep nobody does retroactively. If you've saved thousands of posts over the years, there's no way to organize them after the fact. InstaSort fixes the migration problem: take everything you've already saved and make it searchable and organized.
There is no Instagram API for saved posts. InstaSort uses two compliant paths:
- Bulk import (onboarding): Upload Meta's official Export Your Information archive. We parse
saved_posts.jsonfor your saved permalinks — no scraping, no password. - Ongoing capture: Paste a link in the app, or use the browser extension, to add new saves over time.
Saved-post exports contain only URLs, so InstaSort re-fetches each public post to enrich it (caption, thumbnail, and — for reels — an audio transcript). Private or deleted posts keep metadata-only.
apps/web Next.js + TS + Tailwind + shadcn/ui (UI, API routes)
services/worker FastAPI + RQ (enrichment, embeddings, transcription, clustering)
infra/db Postgres + pgvector schema & migrations
packages/shared shared types / contracts
Postgres + pgvector for storage and vector search. Redis for the enrichment job queue. LLM, embedding, and transcription providers are pluggable (Claude / OpenAI / Ollama / local).
cp .env.example .env # add your keys, pick a tier
docker compose upThen open http://localhost:3000 and upload your export.
| Tier | What it does | Cost |
|---|---|---|
cheap |
Caption + Open Graph metadata only | ~free |
medium |
Adds local Whisper transcription for reels | local CPU/GPU |
Set ENRICHMENT_TIER in .env.
Early WIP. See docs/roadmap.md for phases.
MIT — see LICENSE.