A step-by-step system that syncs your Instagram saved posts into Notion and uses Claude Code to turn them into content ideas on a schedule — automatically.
This guide is reviewed for clarity, service accuracy, and AI-search readability. The next quarterly content review is tracked internally before unsupported metrics or client proof are added.
The problem with saving posts
Every post you save on Instagram starts as inspiration and ends as clutter. The save happens in a second. Finding it again — or doing anything useful with it — almost never happens. The folder fills up, the ideas sit untouched, and the original reason you saved it fades.
This guide fixes that by building a pipeline that runs on a schedule: it syncs your Instagram saves into a Notion database, then uses Claude Code to transform them into content ideas in your voice, with platform breakdowns. Once it's set up, the only thing you do is run one slash command each week.
What you're building
A three-part system: a Python sync daemon that pulls your Instagram saves into Notion, a launchd schedule that keeps it current automatically, and a Claude Code slash command (/instagram-sync) that turns new saves into ideas on demand.
- Two Notion databases — one for raw saves, one for generated ideas linked back to the source
- A sync.py script Claude Code generates for you — no manual coding required
- A launchd plist that runs the sync on a schedule without any manual intervention
- A /instagram-sync slash command that runs the ideation cycle inside Claude Code
Complete setup checklist
Use this as your single reference through the build. Check each item before moving to the next.
bashONE-TIME SETUP [ ] Two Notion databases created with correct properties - Instagram Saves: Status, URL, Caption, Author, Saved Date - Content Ideas: linked to saves, Pillar, Platform Breakdown, Idea Text [ ] Notion integration connected to both databases [ ] Instagram session cookies captured from Chrome DevTools - Open instagram.com → DevTools → Application → Cookies - Copy: sessionid, csrftoken, ds_user_id [ ] Claude Code generated sync.py, config.example.json, requirements.txt, .gitignore - Prompt: "Build me a Python sync daemon called sync.py that calls the Instagram API using session cookies and writes new saves to a Notion database. Also generate config.example.json, requirements.txt, .gitignore." [ ] Python venv created and dependencies installed [ ] config.json filled in with real cookies, Notion token, and database IDs [ ] First manual sync successful — rows appear in Instagram Saves with Status = New [ ] launchd plist installed and loaded — sync runs automatically [ ] Slash command created at .claude/commands/instagram-sync.md [ ] Database IDs and content pillar placeholders updated in the slash command file EVERY WEEK [ ] Open Claude Code in your project folder [ ] Run /instagram-sync ideate [ ] Review ideas in Content Ideas database, approve what fits your week WHEN SYNC STARTS FAILING [ ] Run /instagram-sync refresh session [ ] Open Chrome → instagram.com → DevTools → Application → Cookies [ ] Copy fresh: sessionid, csrftoken, ds_user_id [ ] Update config.json with the new values [ ] Run .venv/bin/python3 sync.py to confirm the fix NOTE: state.json prevents duplicate Notion pages — back it up occasionally. If deleted, the next sync re-creates every previous save as a new row.
How the slash command works
The /instagram-sync slash command lives at .claude/commands/instagram-sync.md. It controls the ideation cycle — reads saves with Status = New from Notion, maps each one to your content pillars, and generates ideas in your voice with platform breakdowns.
This is where the system gets your voice. The slash command file contains your content pillar definitions and the collection-to-pillar mapping logic. Spend 10 minutes customizing this before your first run — it's what separates generic ideas from ones that actually match how you create.
- Run
/instagram-sync ideateto process all new saves and generate ideas - Run
/instagram-sync refresh sessionwhen the sync starts failing (stale cookies) - The command file is the only thing you edit as your content strategy evolves
Tips for getting more out of it
- Save with intention — create Instagram collections for your content pillars before you start; organized saves become organized ideas
- Process weekly not daily — batching reduces cognitive load and your ideas will be sharper when you review a full week at once
- Tune the pillar mapping in your slash command file — this is the highest-leverage customization in the system
- Expand to other platforms — the same pattern works for X bookmarks, YouTube watch-later, and TikTok saves using the same daemon with different API endpoints
Frequently Asked Questions
Do I need to know how to code to build this? No. Claude Code generates sync.py, config.example.json, requirements.txt, and .gitignore for you. You provide the prompt and fill in config.json with your real credentials. The checklist above walks through each step without assuming any technical background.
What do I do when the sync stops pulling new saves? Instagram session cookies expire. When sync.py starts failing, open Chrome, go to instagram.com, open DevTools → Application → Cookies, copy fresh values for sessionid, csrftoken, and ds_user_id, update config.json, then run sync.py manually to confirm the fix.
Can this work for TikTok or YouTube saves too? Yes. The architecture is platform-agnostic — only the API endpoint in sync.py changes. The same Claude Code prompt that generated the Instagram version can generate versions for X bookmarks or YouTube watch-later with minor adjustments.
