← The Tickd Guide

Tutorials & Guides

How to Build a Local RSS Feed Curator with Gemini Flash and Python

Tired of sorting through hundreds of daily RSS articles? Build a local, automated curation script that uses Gemini Flash to filter and summarize only what matters to you.

Updated 9/1/2026

For anyone trying to keep up with developers, researchers, or industry shifts, RSS feeds remain an unbeatable source of raw information. But they suffer from a massive signal-to-noise problem. If you subscribe to dozens of tech blogs and release channels, your feed reader quickly becomes an overwhelming graveyard of unread posts.

We do not need another complex web app to solve this. Instead, we can build a lightweight, local Python script that fetches our feeds, filters out the fluff, and uses /platforms/gemini to write a highly tailored morning digest of the things we actually care about.

We will use Gemini 1.5 Flash because it is incredibly fast, features an enormous context window, and is highly cost-effective for daily batch processing. Here is how to build your own personal feed curator.

The Architecture

Our local curation engine follows a simple three-step pipeline: 1. Fetch: Read our favorite feeds using the Python feedparser library. 2. Filter & Evaluate: Pass the titles and summaries to Gemini Flash with a specific curation rubric. 3. Compile: Output a clean, beautifully formatted Markdown file containing categorized summaries and direct links.

This keeps our tool running locally on our machine, entirely under our control, without paying for expensive SaaS curation platforms.

Setting Up the Project

First, let us create a new directory for our project, set up a virtual environment, and install our dependencies. We will need the google-genai library, feedparser to read the RSS XML feeds, and python-dotenv to manage our API keys.

`bash mkdir rss-curator cd rss-curator python3 -m venv venv source venv/bin/activate pip install google-genai feedparser python-dotenv `

Next, save your Gemini API key in a .env file in the root directory:

`env GEMINI_API_KEY=your_actual_api_key_here `

Designing the Curation Rubric

To make this curation genuinely useful, we need to instruct the model on what makes a story relevant to us. A generic "summarise this feed" prompt will leave you with a boring wall of text. We need to define a curation rubric.

For this tutorial, let us assume we are building a digest focused on system programming, AI engineering, and local-first software. We will instruct the model to ignore generic marketing fluff, routine company announcements, and listicles, while highlighting architectural breakdowns, new open-source libraries, and deep-dive tutorials.

Check out our /prompts directory for more ideas on structuring evaluative prompts, but we will write a highly specific one directly into our script.

The Python Script

Create a file named curate.py and write the following code. This script parses your feeds, bundles them into a structured prompt, and asks Gemini Flash to build our daily briefing.

`python import os import feedparser from dotenv import load_dotenv from google import genai

Load environment variables load_dotenv()

Configure Gemini client client = genai.Client()

A list of technical feeds to watch FEED_URLS = [ "https://simonwillison.net/atom/entries/", "https://hnrss.org/best", "https://localfirst.fm/feed.xml" ]

def fetch_feed_items(urls): compiled_items = [] for url in urls: print(f"Fetching: {url}") feed = feedparser.parse(url) # We only take the top 10 recent items from each feed to keep things fresh for entry in feed.entries[:10]: compiled_items.append({ "title": entry.get("title", "No Title"), "link": entry.get("link", ""), "summary": entry.get("summary", "No summary available.")[:300] # Truncate to save tokens }) return compiled_items

def curate_news(items): # Format the feed items as a text block for the prompt feed_data = "" for i, item in enumerate(items): feed_data += f"ID: {i}\nTitle: {item['title']}\nLink: {item['link']}\nSummary: {item['summary']}\n---\n"

system_instruction = ( "You are an expert technical editor curating a daily newsletter for a senior software engineer. " "Your job is to tick the boxes of high technical depth, actual utility, and architecture analysis. " "Ignore speculative AI news, generic product launches, company funding updates, and opinion pieces. " "Group selected stories into three clean categories: 'AI & LLM Tools', 'System Architecture & Performance', and 'Interesting Utilities'. " "For each curated story, write a concise 2-sentence summary explaining WHY it matters, and append the direct markdown link. " "If none of the stories fit a category, omit the category. Keep the final output short, punchy, and professional." )

prompt = f"Here are today's raw feed items:\n\n{feed_data}\n\nPlease generate the daily briefing in Markdown format."

print("Analyzing feeds with Gemini Flash...") response = client.models.generate_content( model='gemini-1.5-flash', contents=prompt, config={ "system_instruction": system_instruction, "temperature": 0.2, # Lower temperature for analytical selectivity } ) return response.text

if __name__ == "__main__": # Ensure the API key exists if not os.getenv("GEMINI_API_KEY"): print("Error: GEMINI_API_KEY environment variable not set.") exit(1)

Run the pipeline raw_items = fetch_feed_items(FEED_URLS) print(f"Found {len(raw_items)} potential articles.") digest = curate_news(raw_items) # Save the output to a local markdown file output_file = "daily_digest.md" with open(output_file, "w", encoding="utf-8") as f: f.write(digest) print(f"\nSuccess! Your curated daily digest has been saved to: {output_file}") ```

Customizing and Automating the Digest

You can easily run this script every morning by setting up a simple cron job on your system. To automate this on macOS or Linux, run crontab -e and add a line to execute the script at 8:00 AM every day:

`bash 0 8 * /path/to/rss-curator/venv/bin/python /path/to/rss-curator/curate.py `

If you want to read more about how Gemini parses complex technical data across massive chunks of text, take a look at our /glossary entry on token windows and long-context processing.

Should you run into any API authentication or rate limit errors while scaling up the number of RSS feeds, head over to the Google Gemini developer documentation at https://googlegemini-support.com to find guides on standard quota adjustments.

Now, instead of wasting twenty minutes scrolling through endless link aggregators, you can sit down with your coffee and read a single, highly tailored text file designed just for you. Happy hacking!

geminipythonautomationrsstutorials

Keep going

Build something with the prompt generator, decode the jargon in the glossary, or compare the tools on our platform deep-dives.