HN Research Skill - Hacker News Intelligence
Core Purpose
Use Algolia HN API to research what Hacker News is discussing, trending, or thinking about any topic. Get both stories AND comments for full sentiment analysis.
API Endpoints
Search by relevance (popularity):
https://hn.algolia.com/api/v1/search?query=TOPIC&tags=TAG&hitsPerPage=N
Search by date (recency):
https://hn.algolia.com/api/v1/search_by_date?query=TOPIC&tags=TAG&hitsPerPage=N
Common Filters
Tags
- •
story- Stories only - •
comment- Comments only (for sentiment) - •
show_hn- Show HN posts - •
ask_hn- Ask HN posts - •
front_page- Front page stories - •Combine with comma:
story,front_page
Numeric Filters
# Posts from last 7 days numericFilters=created_at_i>$(date -v-7d +%s) # Posts from last 30 days numericFilters=created_at_i>$(date -v-30d +%s) # Posts with 100+ points numericFilters=points>100 # Combine filters (AND) numericFilters=created_at_i>TIMESTAMP,points>100
Pagination
- •
hitsPerPage=N- Results per page (max 1000) - •Use
page=Nfor pagination
Research Patterns
Pattern 1: What's Trending Now?
Front page (all topics):
curl -s "https://hn.algolia.com/api/v1/search?tags=front_page&hitsPerPage=30" | \
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"' | \
sort -rn
Recent hot posts (last 7 days, 50+ points):
curl -s "https://hn.algolia.com/api/v1/search_by_date?tags=story&hitsPerPage=100" | \
jq -r '.hits[] | select(.points > 50) | "\(.points) pts | \(.created_at) | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"' | \
head -30
Pattern 2: Topic Research
What's HN saying about X? (popular):
TOPIC="rust programming"
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&hitsPerPage=20" | \
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"'
Recent discussions about X:
TOPIC="claude code"
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$TOPIC&tags=story&hitsPerPage=30" | \
jq -r '.hits[0:15] | .[] | "\(.points) pts | \(.created_at) | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"'
Pattern 3: Sentiment Analysis (Comments)
What are people saying about X?:
TOPIC="cursor IDE" curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=comment&hitsPerPage=30" | \ jq -r '.hits[] | select(.points > 3) | "[\(.points) pts] \(.author): \(.comment_text[0:200])..."'
Top comments on a story:
STORY_ID="46420670" curl -s "https://hn.algolia.com/api/v1/search?tags=comment,story_$STORY_ID&hitsPerPage=20" | \ jq -r '.hits[] | "[\(.points) pts] \(.author):\n\(.comment_text)\n---"'
Pattern 4: Show HN / Ask HN
Recent Show HN posts:
curl -s "https://hn.algolia.com/api/v1/search_by_date?tags=show_hn&hitsPerPage=30" | \
jq -r '.hits[0:20] | .[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"'
Popular Ask HN (last month):
curl -s "https://hn.algolia.com/api/v1/search?tags=ask_hn&hitsPerPage=30" | \ jq -r '.hits[] | select(.points > 20) | "\(.points) pts | \(.title) | https://news.ycombinator.com/item?id=\(.objectID)"'
Pattern 5: Multi-Topic Research
Compare interest in multiple topics:
for topic in "rust" "go" "zig" "elixir"; do
echo "=== $topic ==="
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$topic&tags=story&hitsPerPage=10" | \
jq -r '.hits[0:5] | .[] | select(.points > 30) | "\(.points) pts | \(.title)"'
echo
done
Pattern 6: User Research
Find posts by user:
USER="patio11" curl -s "https://hn.algolia.com/api/v1/search?tags=author_$USER&hitsPerPage=20" | \ jq -r '.hits[] | "\(.points) pts | \(.title // .comment_text[0:100])"'
Response Format
{
"hits": [
{
"objectID": "46420670",
"title": "Post title",
"url": "https://example.com",
"author": "username",
"points": 250,
"num_comments": 42,
"created_at": "2025-12-29T13:22:59Z",
"created_at_i": 1735481579,
"story_text": null, // for Ask HN
"comment_text": null // for comments
}
],
"nbHits": 1000,
"page": 0,
"nbPages": 50
}
Useful Filters
Date Helpers
# Last 24 hours date -v-24H +%s # Last 7 days date -v-7d +%s # Last 30 days date -v-30d +%s # Last year date -v-1y +%s
JQ Helpers
Top posts only:
jq -r '.hits[] | select(.points > 100) | ...'
Sort by points:
jq -r '.hits | sort_by(.points) | reverse | .[] | ...'
Filter by date:
jq -r '.hits[] | select(.created_at_i > 1735000000) | ...'
Extract domains:
jq -r '.hits[] | .url | select(. != null) | sub("https?://([^/]+).*"; "\\1")'
Complete Research Workflow
1. Topic Discovery (What's hot?)
# Front page snapshot
curl -s "https://hn.algolia.com/api/v1/search?tags=front_page&hitsPerPage=30" | \
jq -r '.hits[] | "\(.points)|\(.title)|\(.url // ("HN:" + .objectID))"' | \
sort -rn | column -t -s'|'
2. Deep Dive (Specific topic)
TOPIC="your_topic"
# Stories
echo "=== Stories ==="
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&hitsPerPage=20" | \
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + .objectID))"'
# Recent discussion
echo -e "\n=== Recent ==="
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$TOPIC&tags=story&hitsPerPage=20" | \
jq -r '.hits[0:10] | .[] | "\(.points) pts | \(.created_at) | \(.title)"'
3. Sentiment Check (Comments)
TOPIC="your_topic" curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=comment&hitsPerPage=50" | \ jq -r '.hits[] | select(.points > 2) | "[\(.points)pts] \(.author): \(.comment_text)"' | \ head -20
4. Trend Analysis (Over time)
TOPIC="AI coding"
for period in "24H" "7d" "30d"; do
echo "=== Last $period ==="
TIMESTAMP=$(date -v-$period +%s)
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&numericFilters=created_at_i>$TIMESTAMP&hitsPerPage=100" | \
jq -r '.nbHits'
done
When to Use This Skill
Use HN research when you want to:
- •Discover trends - What's HN talking about lately?
- •Gauge sentiment - What does HN think about X?
- •Find alternatives - "X vs Y" discussions
- •Learn from discussions - Comment threads on specific topics
- •Track topics over time - Is interest growing/fading?
- •Find quality content - High-scoring posts on topic
- •Research before building - Has this been done? What went wrong?
Output Formatting
Clean list:
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + .objectID))"'
With date:
jq -r '.hits[] | "\(.points) pts | \(.created_at) | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + .objectID))"'
Markdown links:
jq -r '.hits[] | "- **[\(.title)](\(.url // ("https://news.ycombinator.com/item?id=" + .objectID)))** (\(.points) pts)"'
CSV export:
jq -r '.hits[] | [.points, .title, .url, .created_at] | @csv'
Pro Tips
- •Combine searches - Run multiple queries for comprehensive view
- •Check comments - Stories show what's posted, comments show what people think
- •Filter aggressively - HN has noise, use
points > Nliberally - •Time matters - Recent search vs popular search give different insights
- •Domain analysis - See which sites HN favors for topic
- •Author stalking - Find experts by tracking their HN activity
Common Queries
"What does HN think about X?"
# Stories + top comments TOPIC="cursor IDE" echo "=== Stories ===" && \ curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&hitsPerPage=10" | \ jq -r '.hits[] | "\(.points) pts | \(.title)"' echo -e "\n=== Sentiment ===" && \ curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=comment&hitsPerPage=30" | \ jq -r '.hits[] | select(.points > 5) | "[\(.points)] \(.comment_text[0:150])..."' | head -10
"What's trending in X?"
TOPIC="rust" curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$TOPIC&tags=story&hitsPerPage=30" | \ jq -r '.hits[0:15] | .[] | select(.points > 20) | "\(.points) pts | \(.created_at) | \(.title)"'
"Show me good Show HN projects"
curl -s "https://hn.algolia.com/api/v1/search?tags=show_hn&hitsPerPage=50" | \ jq -r '.hits[] | select(.points > 100) | "\(.points) pts | \(.title) | \(.url)"'
Error Handling
API returns 400:
- •Check
numericFilterssyntax (no parentheses in bash!) - •Use direct timestamps instead of
$(date ...)inline
Empty results:
- •Try broader query terms
- •Lower
points >threshold - •Increase
hitsPerPage - •Check spelling
jq parse errors:
- •Ensure proper quoting in jq filters
- •Test jq expression separately first
Example: Complete Tech Stack Research
#!/bin/bash
# Research multiple technologies, compare HN interest
TOPICS=("rust" "go" "elixir" "zig")
echo "=== HN Tech Stack Comparison (Last 30 days) ==="
for topic in "${TOPICS[@]}"; do
echo -e "\n## $topic"
# Story count
COUNT=$(curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$topic&tags=story&hitsPerPage=100" | jq '.nbHits')
echo "Stories: $COUNT"
# Top posts
echo "Top posts:"
curl -s "https://hn.algolia.com/api/v1/search?query=$topic&tags=story&hitsPerPage=5" | \
jq -r '.hits[0:3] | .[] | " • \(.points) pts - \(.title)"'
done
This skill makes you HN-literate. Use it before building, to validate ideas, find prior art, gauge community reception, or just stay informed.