Turning Instagram Into a Newsletter With Ollama

I turned my instagram feed into my newsletter and it fixed all my bad habits

Turning Instagram Into a Newsletter With Ollama
Photo by Markus Winkler / Unsplash

I turned my instagram feed into my newsletter and it fixed all my bad habits



The worst thing I do is opening Instagram. I tell myself I’m just dipping in to see what’s going on, then resurface two hours later, wondering where my time went. I don’t really like the app, but it feels like a community bulletin board, the only way to learn what’s going on in the city around me. 

Recently, I was able to use technology I was curious about, local LLMs, to totally remove that situation from my life. Because all the content stays on my machine, a local LLM lets me generate summaries without sending anyone’s posts to a third-party service or incurring extra monetary or environmental costs.



The Idea

What I wanted is something I could read in one place, without the algorithm, and ideally without needing to even open Instagram. For me, Instagram is mostly a way to see what local businesses and community organizations are up to and to find events I might want to go to, which is perfect for a newsletter format.

What I settled on was a script that loops over a fixed list of Instagram profiles, pulls posts from the last few days, extracts captions, and runs that through a local LLM to generate a short newsletter-style summary. Then, because I couldn’t resist, it also generates a short poem based on the same content in the style of a poet I enjoy.


How It Works in Practice

For such a simple goal, the flow ended up being a little more layered than I first expected. Rate limits added a lot of complexity; to avoid needing to keep making the same requests over and over, the script caches captions locally, and only pulls recent captions from Instagram if there isn’t already a cache from the last two days. 

From there, the script feeds each account’s captions into a local LLM (more details later) to produce a per-account summary that pulls out the main events, dates, and locations. Those summaries are cached too. This intermediate step turned out to be really important! When I tried feeding one large blob of caption text from multiple accounts straight into the newsletter model, it was much more likely to blur sources together and attach one account’s event to another account. Summarizing each account separately first made the final output much cleaner and more faithful to what each account had actually posted.

Once those per-account summaries are ready, the newsletter model uses them to generate the final newsletter. After that, the newsletter text gets passed into the poem model to generate the poem. Subjectively, the poem results were much better when the model got the finished newsletter instead of raw caption text. All of these steps can be configured to use different models, but in practice I personally foundQwen3:8B to be the best for every task.


Running Locally with Ollama

One of the more interesting parts of this project was running everything locally with Ollama. Instead of calling an external API, the script sends the extracted content to a model running on my own machine. 

This makes the whole pipeline self-contained, and avoids any dependency on cloud-based LLM models. However, it also means speed depends heavily on local hardware. I have an M4 MacBook Pro, so I knew I would be able to run something, but I still had to try a few different models before landing on something that worked well.

Between the Qwen and Gemma model-families, I noticed Gemma tended to over-summarize and would often drop useful details like dates or separate events. Even with a much more detailed and constrained prompt, the results didn’t improve much, and what results I did get were brittle. In contrast, all Qwen models were much more reliable, working well witha much simpler prompt and producing more consistent results.

Within the Qwen family, it took some time to find the right model size to use. I started with Qwen3:4B, which was great for quick iteration while I was testing things out: Its speed and responsiveness made it easy to tweak prompts and debug the pipeline. But once things were working, I preferred the output from Qwen3:8B. It preserved more detail and produced more consistent summaries, and on my hardware the extra time felt worth it.

Larger Qwen models had diminishing returns, taking longer to generate output without a meaningful improvement in quality. Gemma 4  exhibits saw similar behavior – it took even longer to run than Qwen and still didn’t preserve detail as well as I wanted.

I ended up landing on Qwen3:8B as a good balance. The project is set up so it’s easy to swap out models if you want to experiment, and I expect the right choice will vary quite a bit depending on the machine you’re running on. One thing I did appreciate is how easy Ollama makes it to try different models locally without much setup.



Caching and Scale

Caching ended up being essential in order to get the speed and reliability necessary to run this script multiple times a week. Instagram will start throttling requests once you send enough requests, and for me that became a real issue once I was watching more than about 16 accounts. Without caching, the script would make too many live requests in a run, which made it much more likely to hit throttling before it finished.

Caching the raw Instagram captions helped reduce repeated fetches, but still meant that the actual summaries were generated on-demand every time. Especially after moving from Qwen3:4B to Qwen3:8B, caching the per-account summaries mattered just as much. Once I added that intermediate summarization step, I did not want to regenerate those summaries every time I built a newsletter: The larger model gave me better results, but it also made repeated processing more expensive in time.

With both layers cached, newsletter creation got much faster and more practical. The script only does the heavier work when there is actually new Instagram data to ingest. That made it possible to keep the more structured pipeline, which improved output quality, without making each run feel sluggish.


Readwise Integration

I also added a small integration with Readwise (my preferred read-later app), which is what connected the dots from the terminal to my daily workflow. Readwise is a good general-purpose  read-it-later tool, but I find it works especially well for getting information through newsletters and other longer-form formats.

Having the newsletter output land in my Inbox makes it much more likely that I’ll come back to it, highlight parts, check my calendar later and add an event I want to go to, or note a community organization I want to follow up on.


A Few Design Choices

I kept the whole thing as simple as possible. It runs as a local script instead of on the cloud, can be scheduled with cron, and outputs plain text instead of a UI. There’s optional image analysis, but I left it off by default since running vision models locally can be slow and in practice most of the useful signal was already in the captions. 


What I Like (and What Could Improve)

What I ended up liking most is how it changes the relationship to the content. It feels more like catching up than scrolling, and having everything distilled into a few paragraphs makes the signal-to-noise ratio much better.

If I wanted to put more time into it I would improve the grouping of topics in the newsletter output, maybe some direction on what types of events and updates to prioritize, and maybe some formatting improvements. But overall, it does a great job at doing what I needed: unlocking the information stuck in the instagram feed without requiring me to open the addictive app.

You can check out the project here: https://github.com/keeratS/insta-newsletter


Example Output

Upcoming Events & Activities

  1. Artemis II Lunar Flyby

    • Date: April 6, 2026
    • Location: (Global)
    • Details: NASA's Artemis II mission will conduct a lunar flyby.
  2. Litquake Poetry & Food Event

    • Date: April 21–22, 2026
    • Location: Book Society, Berkeley
    • Details: Features poet Aimee Nezhukumatathil.
  3. Ada Limón Event

    • Date: April 2026 (specific date pending)
    • Location: (TBD)
    • Details: Discount code "LITQUAKE4" for $4 off tickets.
  4. Hellyer Visitor Center Pop-up

    • Date: April 11, 2026
    • Location: Hellyer Park Visitor Center
    • Details: "Super-Duper Spiders" themed event.
  5. esfuerzo Wellness Festival

    • Date: April 11, 2026
    • Location: Arena Green West, San Jose
    • Details: Free wellness and fitness activities.
  6. Cornell Birds Virtual Event

    • Date: April 9, 2026
    • Location: Virtual
    • Details: Free session on bird songs and identification.
  7. Gamble Garden Open House

    • Date: Daily (open year-round)
    • Location: Gamble Garden
    • Details: Free public access; open for over 35 years.

Announcements & Updates

  1. Library Services

    • Event: "Bohème Out of the Box" opera event at Crane Cove Park (free).
    • Date: April 2026 (specific date pending).
  2. NASA Ames

    • Event: Artemis II lunar flyby on April 6, 2026.
  3. tiat.place

    • Details: Operates as a 501(c)(3) nonprofit art gallery in San Francisco.
    • Event: Time exhibit in April.
  4. USPS Recruitment

    • Details: Active hiring for full-time, part-time, and seasonal roles.
  5. Santa Clara County Parks

    • Announcement: Condolences for Supervisor Rod Diridon, Sr.
  6. Route 66 Stamps

    • Details: Pre-order available for a 100th-anniversary stamp release.

Cultural & Artistic Highlights

  1. Hakone Gardens

    • Event: Night Viewing extended to April 10th; Rainbow Lights Week begins April 10.
  2. V&A Museum

    • Theme: "Easter in Full Bloom" exhibition featuring tulips, jonquils, and historical art.
  3. Computer History Museum

    • Topic: Discussion on hidden software credits and Easter eggs in early programming.
  4. Ada Limón Event

    • Details: Poetry and literary event with ticket discounts.

Local & Community Events

  1. Morning Service

    • Date: April 2026 (specific date pending)
    • Location: Ballard
    • Details: Includes local food vendors.
  2. TDSF Meetup

    • Date: April 11, 2026 at 5pm
    • Location: 151 Powell St.
    • Details: Tech and design-focused meetup.
  3. Bird Quiz

    • Details: Interactive quiz with a photo of a bird from Newfoundland and Labrador.

Key Dates

  • April 6, 2026: Artemis II lunar flyby, Route 66 stamps pre-order, NASA Ames event.
  • April 9, 2026: Cornell Birds virtual event.
  • April 10, 2026: Hakone Gardens Rainbow Lights Week.
  • April 11, 2026: Hellyer Visitor Center pop-up, esfuerzo festival, TDSF meetup.

This summary organizes the posts by category, highlighting events, announcements, and cultural highlights. Let me know if you need further details!

POEM (Emily Dickinson inspired):
A Moonlit Guess—unspools the Sky’s own Thread—
Spiders spin lace where Hellyer’s Pop-up Dances—
Cornell’s Birds hum free, unbound by Time’s strict Frame—
V&A’s Tulips blush beneath the Easter Sun—
Hidden Eggs in Code, where History’s Secrets Swim—
A Bird’s Photo, Newfoundland’s Whisper, waits to be Named.


Generated in 151.59 seconds
Newsletter model used: qwen3:8b
Poem model used: qwen3:8b
Poet inspiration: Emily Dickinson
Accounts checked: 50
Accounts with recent posts: 27