
Social Media Trends Research
Scrape Reddit’s public JSON search to spot trending topics and audience pain before you commit to content or product angles.
Overview
Social Media Trends Research is an agent skill most often used in Idea (also Validate and Grow) that searches Reddit’s public JSON API for trending posts to inform content and positioning.
Install
npx skills add https://github.com/drshailesh88/integrated_content_os --skill social-media-trends-researchWhat is this skill?
- SimpleRedditScraper class against Reddit public .json endpoints—no API keys or OAuth
- search() with query, limit (up to 100), sort (relevance/hot/top/new/comments), and time_filter (hour through all)
- Built-in rate limiting via _make_request with User-Agent header and 10s timeout
- Returns normalized post lists or structured error payloads for agent follow-up
- Up to 100 results per search via limit parameter
- Six time_filter values: hour, day, week, month, year, all
Adoption & trust: 523 installs on skills.sh; 3 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need fresh social conversation data but do not want to manage Reddit API keys or paste threads by hand.
Who is it for?
Solo creators and indie builders running integrated content workflows who want programmatic Reddit trend pulls during research sprints.
Skip if: Teams that need authenticated Reddit APIs, guaranteed SLA scraping, or platforms other than Reddit without extending the script.
When should I use this skill?
You need Reddit conversation signal for trends, content angles, or audience research without API keys.
What do I get? / Deliverables
You get a structured list of Reddit posts for a query and time window that you can feed into ideation, landing copy, or a content calendar.
- List of Reddit post dictionaries from search.json
- Error payload when the request fails
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Trend and conversation mining is canonical shelf on Idea because you use it before building or scaling content—same scraper also feeds Validate and Grow calendars. Research subphase is where indie builders validate what people are actually discussing, not just keyword volume.
Where it fits
Search Reddit for your niche keyword with a week time filter before you pick a product angle.
Pull top-comment threads to see which problems recur before you freeze MVP scope.
Refresh hot/relevance sorted posts to draft timely posts aligned with community mood.
How it compares
Use instead of manual subreddit scrolling when you want repeatable, agent-driven trend snapshots.
Common Questions / FAQ
Who is social-media-trends-research for?
Indie builders and content operators who use agent workflows to research audiences on Reddit before they write, ship, or promote.
When should I use social-media-trends-research?
During Idea research to scan what people say about a problem, during Validate when testing positioning against live threads, and during Grow when planning posts tied to what is hot this week.
Is social-media-trends-research safe to install?
Review the Security Audits panel on this Prism page and treat the skill as untrusted Python that performs outbound HTTP requests until you verify the repo.
SKILL.md
READMESKILL.md - Social Media Trends Research
""" Simple Reddit Scraper - No API Keys Required ============================================= Uses Reddit's public .json API endpoints. No authentication needed. """ import requests import time class SimpleRedditScraper: """Simple Reddit scraper using public .json endpoints.""" def __init__(self): self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } self.base_url = 'https://www.reddit.com' def _make_request(self, url): """Make a request with rate limiting.""" try: response = requests.get(url, headers=self.headers, timeout=10) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: return {'error': str(e)} def search(self, query, limit=25, sort='relevance', time_filter='week'): """ Search Reddit for a query. Args: query: Search term limit: Max results (up to 100) sort: 'relevance', 'hot', 'top', 'new', 'comments' time_filter: 'hour', 'day', 'week', 'month', 'year', 'all' Returns: List of post dictionaries """ url = f"{self.base_url}/search.json?q={query}&limit={limit}&sort={sort}&t={time_filter}" data = self._make_request(url) if 'error' in data: return {'posts': [], 'error': data['error']} posts = [] for child in data.get('data', {}).get('children', []): post = child.get('data', {}) posts.append({ 'title': post.get('title', ''), 'subreddit': post.get('subreddit', ''), 'score': post.get('score', 0), 'num_comments': post.get('num_comments', 0), 'url': f"https://reddit.com{post.get('permalink', '')}", 'created_utc': post.get('created_utc', 0), 'selftext': post.get('selftext', '')[:200] # First 200 chars }) return {'posts': posts} def get_subreddit(self, subreddit, sort='hot', limit=25, time_filter='week'): """ Get posts from a subreddit. Args: subreddit: Subreddit name (without r/) sort: 'hot', 'new', 'top', 'rising' limit: Max results time_filter: For 'top' sort - 'hour', 'day', 'week', 'month', 'year', 'all' Returns: List of post dictionaries """ if sort == 'top': url = f"{self.base_url}/r/{subreddit}/top.json?limit={limit}&t={time_filter}" else: url = f"{self.base_url}/r/{subreddit}/{sort}.json?limit={limit}" data = self._make_request(url) if 'error' in data: return {'posts': [], 'error': data['error']} posts = [] for child in data.get('data', {}).get('children', []): post = child.get('data', {}) posts.append({ 'title': post.get('title', ''), 'subreddit': post.get('subreddit', ''), 'score': post.get('score', 0), 'num_comments': post.get('num_comments', 0), 'url': f"https://reddit.com{post.get('permalink', '')}", 'created_utc': post.get('created_utc', 0), 'selftext': post.get('selftext', '')[:200] }) return {'posts': posts} def get_trending_subreddits(self): """Get popular/trending subreddits.""" url = f"{self.base_url}/subreddits/popular.json?limit=25" data = self._make_request(url) if 'error' in data: return {'subreddits': [], 'error': data['error']} subreddits = [] for child in data.get('data', {}).get('children', []): sub = child.get('data', {}) s