The Zero-Cost Newsletter Autopilot

Setup time: 45 minutes | Weekly value: 5+ hours of content curation automated, always-fresh issues

Turn Substack's leaderboard into your daily newsletter—without lifting a finger.

The Architecture:

Trigger: Schedule (Daily 8:00 AM)
    ↓
Action 1: Apify — Scrape Substack Leaderboard (Top 5 newsletters)
    ↓
Action 2: Code Node — Append /feed to URLs
    ↓
Action 3: RSS Feed Read — Pull latest posts from top newsletters
    ↓
Action 4: Claude 3.5 Sonnet — Curate & summarize with hot takes
    ↓
Action 5: Notion — Create database entries (your public archive)
    ↓
Action 6: Google Sheets — Read subscriber list
    ↓
Action 7: Gmail — Batch send (40 per batch)
    ↓
Outcome: Daily newsletter sent, archive updated, zero manual work

Step 1: Schedule Trigger (The Clock)

Configure n8n to run every day at 8:00 AM.

{
  "node": "Schedule Trigger",
  "settings": {
    "rule": "0 8 * * *",
    "timezone": "Australia/Sydney"
  }
}

Signal: Your workflow runs before your audience wakes up.

Step 2: Apify (The Radar)

Configure a Substack scraper actor to grab the top performers.

{
  "actorId": "pepe~substack-leaderboard-scraper",
  "input": {
    "category": "technology",
    "maxItems": 5
  }
}

Signal: You're not guessing which newsletters are winning—you're scraping the actual leaderboard.

Step 3: Code Node (The URL Builder)

Append /feed to each newsletter URL for RSS access.

const newsletterUrls = $input.all().map(item => ({
  feedUrl: item.json.url + '/feed'
}));
return newsletterUrls;

Step 4: Claude 3.5 Sonnet (The Curator)

Pass the trending posts to Claude with editorial instructions.

{
  "system": "You are the editor of a cult newsletter. I will give you the text of 5 trending articles. 1. Select the top 3 most interesting ones. 2. For each, write a 'Hot Take' (1 sentence, punchy, contrarian) and a 'Summary' (2 sentences). 3. Assign a 'Must Read' score (1-10). 4. Output strictly in JSON format: [{title, url, hot_take, summary, score}]."
}

Signal: Claude filters noise into signal—you send only the best, with editorial voice baked in.

Step 5: Notion (The Self-Building Archive)

Map Claude's JSON output to your Notion database: Title → Name, URL → URL, Hot Take → column, Score → column.

Make the page public. This is your landing page—new subscribers see your archive instantly.

Step 6: Gmail Batching (The Sender)

{
  "batchSize": 40,
  "bcc": "{{ $json.subscriberEmails }}",
  "subject": "Daily Insight: {{ $json.topStory.title }}",
  "body": "<h3>Today's Top 3 Reads</h3>..."
}

Signal: Batching at 40 keeps Gmail happy and your sender reputation clean.

Expansion Ideas:

  • Add Slack/Discord notifications for your team

  • Pipe top stories into a Twitter/X thread draft

  • Score patterns over time to identify trending topics

  • A/B test subject lines with two Gmail sends

Cost breakdown: n8n (free self-hosted or ~$20/mo cloud), Apify (free tier covers 30+ runs), Gmail/Notion/Sheets (free). Total: $0–$20/month for a fully automated content operation.

Comments

Avatar

or to participate