Tutorial

How to Build a Reddit-Powered Content Pipeline

Mine Reddit for content ideas, pain points, and real quotes to fuel authentic content. Python pipeline at $0.005/search.

Reddit reveals what your audience struggles with in their own words. Instead of guessing topics, mine discussions for pain points, FAQs, and product comparisons. This tutorial builds a pipeline that searches Reddit for topic signals, classifies discussions by content angle, and outputs content briefs with user language. Each search costs $0.005.

Prerequisites

  • Python 3.8+
  • requests library
  • A Scavio API key from scavio.dev
  • Content topics

Walkthrough

Step 1: Search Reddit for topic signals

Query with different intent suffixes.

Python
import os, requests, json
from collections import Counter

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

def mine(topic):
    results = []
    for suffix in ['help', 'recommendation', 'vs', 'alternative', 'problem']:
        data = requests.post('https://api.scavio.dev/api/v1/search',
            headers=H, json={'query': f'{topic} {suffix}', 'platform': 'reddit', 'country_code': 'us'}).json()
        for r in data.get('organic_results', [])[:5]:
            results.append({'title': r['title'], 'snippet': r.get('snippet', ''), 'url': r['link']})
    print(f'{topic}: {len(results)} discussions (${5 * 0.005:.3f})')
    return results

Step 2: Classify content angles

Sort discussions into comparisons, how-tos, pain points, and recommendations.

Python
def classify(title):
    t = title.lower()
    if ' vs ' in t or 'alternative' in t: return 'comparison'
    if t.startswith('how') or 'tutorial' in t: return 'how_to'
    if any(w in t for w in ['problem', 'issue', 'help', 'stuck']): return 'pain_point'
    if any(w in t for w in ['recommend', 'best', 'looking for']): return 'recommendation'
    return 'discussion'

def analyze(discussions):
    angles = Counter()
    categorized = {}
    for d in discussions:
        cat = classify(d['title'])
        angles[cat] += 1
        categorized.setdefault(cat, []).append(d)
    for cat, count in angles.most_common():
        print(f'  {cat}: {count}')
        for d in categorized[cat][:2]: print(f'    - {d["title"][:60]}')
    return categorized

Step 3: Generate content briefs

Transform classified discussions into briefs.

Python
def briefs(categorized, max=10):
    out = []
    for cat, discussions in categorized.items():
        for d in discussions[:max // 5]:
            out.append({'type': cat, 'title': d['title'].rstrip('?').strip(),
                'source': d['url'], 'user_language': d['snippet'][:150]})
    print(f'\n{len(out)} content briefs:')
    for b in out: print(f'  [{b["type"]:14}] {b["title"][:55]}')
    return out

Step 4: Run full pipeline

Mine, classify, and generate briefs.

Python
def run(topics):
    all_d = []
    for t in topics: all_d.extend(mine(t))
    categorized = analyze(all_d)
    b = briefs(categorized)
    with open('briefs.json', 'w') as f: json.dump(b, f, indent=2)
    print(f'Saved to briefs.json')

run(['serp api', 'tiktok analytics'])

Python Example

Python
import os, requests
from collections import Counter
API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

def mine(topic):
    results = []
    for s in ['help', 'recommendation', 'vs']:
        data = requests.post('https://api.scavio.dev/api/v1/search',
            headers=H, json={'query': f'{topic} {s}', 'platform': 'reddit', 'country_code': 'us'}).json()
        results.extend(data.get('organic_results', [])[:5])
    angles = Counter()
    for r in results:
        t = r['title'].lower()
        if ' vs ' in t: angles['comparison'] += 1
        elif 'help' in t: angles['pain_point'] += 1
        else: angles['other'] += 1
    print(f'{topic}: {len(results)} discussions, {dict(angles)}')

mine('serp api')

JavaScript Example

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
async function mine(topic) {
  const results = [];
  for (const s of ['help', 'recommendation', 'vs']) {
    const data = await fetch('https://api.scavio.dev/api/v1/search', {
      method: 'POST', headers: H,
      body: JSON.stringify({ query: `${topic} ${s}`, platform: 'reddit', country_code: 'us' })
    }).then(r => r.json());
    results.push(...(data.organic_results || []).slice(0, 5));
  }
  console.log(`${topic}: ${results.length} discussions`);
  results.slice(0, 3).forEach(r => console.log(`  ${r.title.slice(0, 55)}`));
}
mine('serp api').catch(console.error);

Expected Output

JSON
serp api: 22 discussions ($0.025)
tiktok analytics: 18 discussions ($0.025)
  recommendation: 12
    - Best SERP API for small startups in 2026
  comparison: 9
    - Scavio vs SerpAPI vs DataForSEO
  pain_point: 7
    - SERP API inconsistent results help

10 content briefs:
  [recommendation ] Best SERP API for small startups
  [comparison     ] Scavio vs SerpAPI vs DataForSEO
Saved to briefs.json

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.

Python 3.8+. requests library. A Scavio API key from scavio.dev. Content topics. A Scavio API key gives you 250 free credits per month.

Yes. The free tier includes 250 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

Mine Reddit for content ideas, pain points, and real quotes to fuel authentic content. Python pipeline at $0.005/search.