Tracking Tech Sentiment in Real-Time with VADER and Python
What does the developer community feel about your product? Not what they say in reviews — what do they actually feel when they mention it on Hacker News or Reddit?
I built a Sentiment Analyzer that fetches posts from HN and Reddit, runs VADER sentiment analysis, and outputs structured scores. Here's how it works.
What It Does
The tool pulls posts from two sources:
- Hacker News: Top or new stories via the official Firebase API
- Reddit: Any subreddit, sorted by hot, new, top, or rising
Each post gets analysed with VADER (Valence Aware Dictionary and sEntiment Reasoner) — a rule-based model tuned for social media text. No GPU required, no API keys, no latency.
What You Get
Each analysed post includes:
{
"source": "hackernews",
"title": "Shadcn/UI now defaults to Base UI instead of Radix",
"sentiment": "neutral",
"sentimentScores": {
"positive": 0.0,
"neutral": 1.0,
"negative": 0.0,
"compound": 0.0
},
"keywords": ["shadcn", "ui", "defaults", "base", "radix"],
"score": 43,
"commentsCount": 3
}
The compound score ranges from -1 (very negative) to +1 (very positive). Anything below -0.05 is classified negative, above 0.05 is positive, and in between is neutral.
Why VADER Instead of an LLM?
Three reasons:
- Speed: VADER processes 10,000+ posts per second. An LLM call takes 1-2 seconds per post.
- Cost: VADER is free and runs locally. LLM sentiment analysis costs per token.
- Consistency: Rule-based models give identical results every time. LLMs can be inconsistent across runs.
For high-volume monitoring tasks — like tracking every HN post mentioning your product — VADER is the right tool.
Real-World Use Cases
Brand Monitoring
Set the analyzer to fetch posts from r/yourproduct and HN search for your brand name. Get daily sentiment reports. Catch negative sentiment before it escalates.
Trend Detection
Track sentiment around technologies like "AI agents", "Rust", or "WebAssembly" across both platforms. Spot which technologies are gaining positive momentum.
Content Curation
Filter for only positive or negative posts. Share positive community feedback in your newsletter. Investigate negative feedback before it becomes a crisis.
How to Use It
Apify Store
The actor is deployed on Apify — configure your sources and run:
{
"sources": "both",
"subreddit": "technology,programming",
"maxPosts": 100,
"sentimentFilter": "negative"
}
Self-Host
Clone the GitHub repo:
pip install httpx nltk
python main.py
The Technical Stack
- httpx: Async HTTP client for concurrent fetching from HN Firebase API and Reddit JSON endpoints
- NLTK VADER: Pre-downloaded lexicon, runs offline, zero external dependencies
- asyncio: Semaphore-limited concurrency (10 concurrent requests) for speed without rate-limit issues
- Keyword extraction: Custom stop-word filter with frequency counting for top-N keywords per post
Part of a Larger Toolkit
This is actor #6 in my content extraction suite:
- RSS Feed Aggregator — full article extraction
- llms.txt Generator — AI-readable website summaries
- RO Business Scraper — Romanian business directory
- Sitemap Content Extractor — bulk page extraction
- Product Hunt Scraper — launch tracking
- HN/Reddit Sentiment Analyzer — this tool
Found this useful? Star the repo and follow along as I build more tools.
More from me
- Romania's company registry, now callable from Claude and Cursor (MCP + REST)
- Romania's company registry has no free API — so I built one (4.2M firms, MCP + REST)
- Building a Romanian Business Registry API: 4.2M Companies as Queryable JSON
- Building a SEC EDGAR Filings Scraper: 10-K Risk Factors and 13F Holdings as Clean JSON
- Building a Price & Competitor Monitor That Diffs Shopify and AliExpress Prices
- Building a Vertical Corpus Builder: Clean JSONL Datasets for LLM Fine-Tuning
- Building a Change & Alert Engine That Webhooks Any Diff on Any URL
- Building a Romania Mall Store Directory: Every Store in 29 Malls, One Schema
- Scraping Romanian Public Contracts: A Native-Language Tender & Awarded Deals Scraper
- Building a 12-City US Building Permits Scraper With Python
- Building an EU Safety Gate (RAPEX) Product Recall Scraper With Python
- How I Built a Water Utility Risk Intelligence Tool With Python and MCP
- Building an Aviation Hub API: Airports, Airlines, Live Flights & Weather From Six Keyless Sources
- I Stopped Scraping Business Directories and Built an MCP Server on Official Registry Data
- I Built a Canada Product Recalls & Safety Alerts Scraper That Reads Open Government Data
- I Built a Telegram Members Scraper That Reads Public Chat Stats Without Login
- Building a WHOIS & DNS Lookup Tool: Domain Intelligence in One...
- Building an AI Web Crawler That Outputs LLM-Ready Content Chunks
- Building a Real-Time Press Release Monitor with Python and RSS...
- Building a Universal Property Listing Scraper with Python and ...
- How I Built a Product Hunt Scraper That Tracks Launches in Rea...
- 5 APIs Every Developer Needs for Content Processing (RSS, Extraction, Sitemaps, AI)
- How to Extract Clean Content From Any Website Sitemap (For SEO...
- Scraping 187,000 Romanian Businesses: Building a B2B Lead Gene...
- Make Any Website AI-Readable: Generating llms.txt Files with
- I Built an RSS Aggregator That Extracts Full Article Content (...
Top comments (0)