Tutorial

How to Build a Local Event Aggregator (2026)

Daily cron: Scavio site-search across venue domains + Reddit + normalize to typed JSON + render public list.

An r/AnnArbor post hit 110 upvotes by aggregating events from many scattered sources. This walks the Scavio recipe for a single-city events aggregator.

Prerequisites

  • Scavio API key
  • Python or Node
  • A curated 5-15 venue source list per city
  • Static or simple Next.js front-end

Walkthrough

Step 1: Curate the venue source list

5-15 domains per city.

Text
// domains = ['theark.org', 'thelivery.com', 'umich.edu/events', ...]

Step 2: Per venue: Scavio site-search

Returns organic_results with title + URL + snippet.

Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
for d in domains:
    r = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'query': f'site:{d} events 2026'}).json()

Step 3: Reddit signal per city

Surfaces community events the venue calendars miss.

Python
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'query': 'reddit r/AnnArbor this weekend events 2026'}).json()

Step 4: Normalize to typed JSON

{title, datetime, venue, url, category}.

Text
# Per result: regex date + venue inference + category guess. Use LLM as fallback for ambiguous cases.

Step 5: Deduplicate by URL + title fuzzy match

Many events appear on multiple venue feeds.

Text
# Use rapidfuzz or LLM judge for the 5-10% fuzzy overlaps.

Step 6: Daily cron

Runs at 6 AM local; updates static JSON.

Text
# crontab: 0 6 * * * /usr/bin/python /app/aggregate.py

Step 7: Render as a clean public feed

No login.

JavaScript
// pages/[city].tsx → fetch /data/events-${city}.json → render list grouped by date

Python Example

Python
# Per-month: $30 Scavio + ~$5 hosting = under $40/mo for one city.

JavaScript Example

JavaScript
// Same shape in Next.js + fetch.

Expected Output

JSON
Daily-updated events feed at /CityName route. Mid-size city: ~600-1,000 normalized events/mo.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Scavio API key. Python or Node. A curated 5-15 venue source list per city. Static or simple Next.js front-end. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Daily cron: Scavio site-search across venue domains + Reddit + normalize to typed JSON + render public list.