For this mix, I’d separate collection from analysis: use the appropriate actor or API per source, then normalize every item to source, canonical URL, author, timestamp, text, and engagement before sending it to a classifier. Dedupe on canonical URL plus a normalized-text hash, then label sentiment, topic, and intent with a cheap model and reserve a stronger model for low-confidence rows. In n8n, keep raw JSON in object storage and write only normalized rows to Postgres or Supabase, with a cursor per source so retries do not re-scrape everything. Treat X and forum rate limits as a design constraint—back off on 429s instead of increasing concurrency.