Monitor Reddit for Keywords with n8n: A No‑Code Guide for Busy Teams

Table of Contents

Why bother with Reddit keyword alerts?

Reddit is an early‑warning system for what your users will care about next. Topics that start trending in r/SaaS, r/startups, or niche subs often appear on LinkedIn or tech blogs weeks later. Tracking them gives you:

  • Customer support gold mine: recurrent pain points show where onboarding or documentation is broken.
  • Product‑market signals: reactions to competitors’ launches reveal what your roadmap may be missing.
  • Authentic language for copywriting: phrases real users use beat any keyword‑stuffed blog brainstorm.

But manually refreshing ten subreddits every morning? Hard pass.

Meet n8n, your no‑code Reddit keyword tracker

n8n (“nodemation”) is an open‑source no‑code automation platform. Think Zapier power, but you self‑host it for €5/month on a tiny VPS and you can peek at every line inside if you ever need to.

Key advantages for non‑developers:

Drag‑and‑drop blocksPre‑built integrationsSelf‑host & own your data
Connect blocks visually, no terminal neededHTTP, Slack, Gmail, Google Sheets, 400+ moreStay GDPR‑safe and avoid API ceilings

With n8n, a basic reddit keyword monitor takes 5 nodes:

  1. Schedule Trigger – e.g. every hour.
  2. HTTP Request – pull /r/SaaS+startups+…/new.json?limit=60.
  3. Code (optional) – clean & scan text for your phrases.
  4. If / Filter – keep only matches.
  5. Slack / Email – push an alert to the right channel.

All in a friendly UI, not a single npm install in sight.

What you get out of the box

BenefitDetails
Real‑time market radarBe the first to answer a prospect’s question, before competitors even see it.
Content ideationEach alert is a seed for a blog, case study, or FAQ update.
Product feedback loopSurface recurring complaints about onboarding, performance, or pricing.
Low cost, low riskn8n + a €5 VPS beats $299/mo SaaS trackers.

Step‑by‑step: building your first Reddit keyword monitor

Below you’ll find step‑by‑step instructions, concise explanations, and the workflow JSON (full version is linked at the end of this post).

Scheduling

Drag a Schedule Trigger and set it to every 1 hour. That’s frequent enough to catch new threads before they cool down, but light on API calls.

Pro tip: If you need minute‑level latency, Reddit’s free API rate limits you. Self‑hosting means you can parallelize multiple workflows, but heavy scale is where custom code wins. More on that later.

Fetching fresh content

Add an HTTP Request node.

URL:
https://www.reddit.com/r/SaaS+startups+indiehackers+webdev/new.json?limit=60
Headers:
User‑Agent: n8n‑bot/1.0 (contact: [email protected])

Keyword matching (the part most tutorials skip)

Attach a Code node with this snippet:

const keywords = [
  //Add the phrases you care about below
  "keyword one",
  "keyword two",
  "another phrase",
];
function escape(s){return s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}
function find(text){
  return keywords.filter(k=>new RegExp(`(^|\\W)${escape(k)}(\\W|$)`,`i`).test(text));
}
return $input.first().json.data.children.map(p=>{
  const d=p.data;
  const matches=[...new Set([...find(d.title),...find(d.selftext)])];
  return {...d, matches, haveKeyword: matches.length};
});

Where do we get $input.first().json.data?
When the HTTP Request node runs, it outputs a single item containing Reddit’s raw JSON. In the Code node, $input.first() grabs that first (and only) item, .json accesses the parsed body, and .data is the root object Reddit returns (it contains the children array of posts).

How to verify: In n8n, open the HTTP Request node → click Execution data on the right panel → expand JSON → you’ll see data > children > [0] > data > title. That’s the path we traverse in the snippet.

Why regex instead of simple includes()?
includes() blindly searches for a substring, fine for single words, but risky for phrases or anything that can hide inside another word. Our regex adds three crucial safeguards:

  1. Whole‑word boundaries ((^|\W)(\W|$)) ensure user feedback doesn’t trigger on superuser feedback or feedbackuser.
  2. Case‑insensitivity (i flag) matches MVP and mvp alike, without extra .toLowerCase() gymnastics.
  3. Escaped special characters keep keywords like C++ or Node.js from breaking the pattern.

The payoff? Fewer false positives, no missed multi word phrases, and a leaner Slack channel —so your team actually trusts every alert.

Deduplication

Why deduplication matters
Reddit posts and comments rarely change their id. If you alert on the same ID twice, your Slack channel turns into noisy spam and teammates start ignoring pings. We fix that by writing every processed ID to a tiny lookup table and checking it on the next run.

Implementation (2‑minute version):

  1. If node – keep only new matches
    In the Code output each item already has haveKeyword. Add a second condition: ID is not yet in the database. The fastest way is to query the storage table for that ID and pass the item only when the result is empty.
  2. Storage node — pick your flavour
    MySQL: set the node to Upsert into a table n8n_reddit with columns id (PK), sent (0/1), is_comment (0/1), permalink.
    Google Sheets: enable “Insert new rows only if unique” and use the id column for de‑dupe.
  3. Upsert instead of Insert
    Upsert means insert if it doesn’t exist, otherwise update. That makes the workflow idempotent (re‑running the same execution won’t create duplicates).
  4. Filter on the next execution
    Before alerting, run a quick select. SELECT id FROM n8n_reddit WHERE id = {{ $json.id }} AND sent = 1 If a row is returned, skip the Slack step.

Tip: Keep the table lightweight. Purge records older than 30–60 days with a nightly cron to save storage and maintain fast look‑ups.

Creating the MySQL table (one‑time)

Before the workflow can upsert IDs you need a lookup table. Run the SQL below in your MySQL client (phpMyAdmin, MySQL Workbench, or the mysql CLI):

CREATE TABLE n8n_reddit (
    n8n_reddit_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    id VARCHAR(45) NOT NULL,
    sent TINYINT NOT NULL DEFAULT 0,
    is_comment TINYINT NOT NULL,
    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    permalink VARCHAR(255) DEFAULT NULL
);

Once the table exists, create a MySQL credential in n8n and point both upsert nodes to the n8n_reddit table. No further schema tweaks are needed unless you want extra columns (e.g., keyword hit counts).

Notification

Finally, a Slack node sends a rich message:

In the post "{{ $('Aggregate').item.json.data[0].title }}" from subreddit "{{ $('Aggregate').item.json.data[0].subreddit }}", keyword(s) were detected!

🔗 Link: {{ $('Aggregate').item.json.data[0].permalink }}

Matched Terms: {{ $('Aggregate').item.json.data[0].matched_terms.join(', ') }}

Post Content:
{{ $('Aggregate').item.json.data[0].selftext }}

Template explainer:

  • $(‘Aggregate’).item.json.data[0] is the first match that came through the Aggregate node.
  • title, subreddit, and permalink are fields Reddit returns, so the alert message stays readable even before someone clicks the link.
  • matched_terms.join(‘, ‘) lists every keyword that triggered the alert.
  • Feel free to swap selftext for a two‑line summary if you don’t want long blobs in Slack. Or swap Slack for e‑mail, Discord, or a webhook into your CRM.

Or swap Slack for e‑mail, Discord, or a webhook into your CRM.

When no‑code hits the ceiling

n8n covers 80 % of use cases, but there are scenarios where custom code is the smarter investment:

  1. High volume. Tens of thousands of API calls per hour will blow past Reddit limits. Custom back‑off logic and proxy rotation help.
  2. Advanced NLP. Sentiment, entity extraction, multi‑language support are easier in Node.js (with libraries like natural or compromise) than inside a tiny Code node.
  3. Multi‑tenant dashboards. If you need to expose alerts to your clients, a bespoke app with granular auth is cleaner.
  4. Enterprise compliance. Stringent InfoSec, SOC‑2, or on‑prem mandates may require a fully audited, role‑based architecture beyond what n8n ships out‑of‑the‑box.

Not sure where you sit? Book a 15‑min call and we’ll tell you if n8n is enough or if custom saves money long‑term.

Beyond alerts: n8n integrations that shine together

  • Google Sheets → auto‑append each hit for historical keyword research.
  • OpenAI / Claude → summarise long threads into a two‑sentence digest.
  • HubSpot → create a new lead when a post mentions your competitor + pain keyword.
  • Looker Studio → visualise trendlines of how often “pricing page” pops up per month.

Full workflow JSON

Expand the accordion below to grab a ready‑to‑use workflow JSON.

How to import in n8n:

  1. Download & Import from file – click Download JSON, then in n8n choose …→ Import From File and select the download.
  2. Copy JSON URL & Import from URL – copy the raw file URL (e.g., from GitHub Gist), then pick … → Import From URL and paste the link.

Either way, save the workflow, set your schedule, and you’re live in under a minute:

{
    "nodes": [
        {
            "parameters": {
                "rule": {
                    "interval": [
...

Ready to monitor Reddit without code?

n8n gets you from idea to keyword alert before your coffee goes cold. And if you ever need more than a no‑code stack can offer, Zingley’s engineering team is a message away.

Frequently asked questions

Does this break Reddit’s Terms of Service?

You’re reading public JSON endpoints and respecting rate limits completely allowed. We still recommend a descriptive User‑Agent header.

Can I track comments as well?

Absolutely, this logic is already baked into the workflow template. The Code node calls Reddit’s comments/{id}.json endpoint for every matching post, walks through all replies recursively, and ensures each comment ID is alerted on only once.

What about sentiment?

Add the built‑in Sentiment Analysis node, set a threshold (e.g., score < ‑0.25), and get pinged only on negative mentions.

Will this work if Reddit changes its API?

Since the workflow runs on your own n8n instance, you can update endpoints or tweak request parameters yourself usually in a matter of minutes without waiting for a third‑party vendor to ship a fix.

How do I avoid hitting Reddit’s rate limits?

Keep the Schedule Trigger reasonable (e.g., every hour), query only the subreddits you actually need, and respect Reddit’s 60 requests/minute guideline with a descriptive User‑Agent. For bursty workloads, stagger multiple workflows or add simple back‑off logic. If you consistently need thousands of calls per minute, consider moving the fetch logic into a custom backend where you can implement advanced caching and proxy rotation.

Key takeaways

  • Reddit keyword monitor = competitive intel + content ideas + product feedback in real time.
  • n8n delivers it with drag‑and‑drop simplicity and open‑source freedom.
  • Custom code becomes worthwhile when you need scale, AI‑powered insights, or client‑facing dashboards, and that’s where Zingley has your back.

Table of Contents