Reddit Usage Tips

How to activate Reddit signals for your end users.

Reddit signals surface real conversations about companies: pricing complaints, customers who switch away, outages, buying intent, and company events. You get them from the Signal API as signal_type: "reddit-company", with one new week of signals each week.

This guide shows how to turn that data into features your end users will use. It covers three activation patterns that work for sales intelligence, ABM, and prospecting products. For every field, see Reddit Mentions (Company).


Who This Is For

This guide is for product and engineering teams that build on top of signal data. The patterns below work whether you build:

  • A signal feed or alert system
  • Account prioritization or scoring
  • Prospecting workflows
  • Competitive intelligence dashboards

How Filtering Works

Filtering happens in two steps:

  1. In the API request. Send signal_types: ["reddit-company"] and, if you want, signal_subtypes (any of the 15 Reddit subtypes) and a detected_after date.
  2. In your code. Filter on data fields such as stage, category, prominence, sentiment, and other_companies. These are not API filters.
POST /v1/companies/search
{
  "signal_types": ["reddit-company"],
  "signal_subtypes": ["customerFeedback"],
  "detected_after": "2026-09-01"
}

Activation Pattern 1: Surface Companies with Pricing Pain

The Use Case

Your end user sells a solution for pricing, packaging, or monetization. They want to find companies whose customers complain in public about price. That is a strong sign that the company may be open to change.

How It Works

API filter: signal_subtypes: ["customerFeedback"]

Then keep records where:

  • data.category = "pricing"
  • data.sentiment = "negative"
  • data.prominence = "core" (the thread is about this, not a passing mention)

To find the vendor's own price change (the fact, not the reaction), use pricingChange instead.

What the Signal Looks Like

A delivered record, shortened:

{
  "signal_id": "f6f62498-1fe8-5754-ab1a-2c95ba549631",
  "signal_type": "reddit-company",
  "signal_subtype": "customerFeedback",
  "detected_at": "2026-09-16T04:26:41.000Z",
  "company": { "name": "Grist", "domain": "getgrist.com" },
  "data": {
    "signal_category": "feedback",
    "summary": "Users expressed frustration and loss of trust in Grist after it moved SSO to a paid tier for its Community Edition, with one commenter describing it as a typical 'open source bait & switch' tactic.",
    "entity_role": "vendor",
    "stage": "none",
    "category": "pricing",
    "sentiment": "negative",
    "prominence": "core",
    "evidence": [
      "[post] Another good one goes for the SSO tax. …",
      "[comment u/Automatic_Regret7455] It looked really interesting, but it gave me that typical \"open source\" bait & switch vibe …"
    ],
    "other_companies": [
      { "name": "Airtable", "role": "alternative", "domain": "airtable.com" },
      { "name": "NocoDB", "role": "alternative", "domain": "nocodb.com" },
      { "name": "Baserow", "role": "alternative", "domain": "baserow.io" }
    ],
    "subreddit": "selfhosted",
    "source_url": "https://www.reddit.com/r/selfhosted/comments/1whmynd/grist_removed_sso_from_community_edition/",
    "post_date": "2026-09-16T04:26:41.000Z",
    "virality": "very_high"
  }
}

Key Fields for Your UI

FieldHow to Use It
data.summaryShow as the headline. It is ready for end users
data.evidenceShow as proof. Each quote is verbatim and starts with its source in brackets, for example [post] or [comment u/…]
data.source_urlLink to the thread so the user can read it
data.other_companiesShow who else is in the conversation (competitors, alternatives)
data.viralityRank by attention: very_low to very_high, relative to that week
data.post_dateShow when the thread happened. detected_at holds the same time

What Your User Does With This

Your end user sees that Grist users are upset about a new paid tier. They can reach out with context: "Saw the pushback on the SSO change. We help teams roll out packaging changes without losing trust."

The signal gives them the reason to reach out, not just a name on a list.


Activation Pattern 2: Alert When a Competitor's Customer Leaves

The Use Case

Your end user wants to know when a customer of a competitor is about to leave or has left. It is even better when their own product is named as an alternative. Someone is already in-market, and your user's product is in the consideration set.

How It Works

API filter: signal_subtypes: ["customerFeedback"]

Then keep records where:

  • data.stage is considering, switching, or switched
  • optionally, data.other_companies contains your user's company with role alternative or switching_to

company is the vendor the customer leaves. other_companies names where they may go.

What the Signal Looks Like

{
  "signal_id": "32527213-9414-57fe-a65b-19fa8f946ce5",
  "signal_type": "reddit-company",
  "signal_subtype": "customerFeedback",
  "detected_at": "2026-09-16T06:22:46.000Z",
  "company": { "name": "ownCloud", "domain": "owncloud.com" },
  "data": {
    "summary": "A user on r/selfhosted announced they are moving away from ownCloud and is seeking advice on a replacement.",
    "entity_role": "vendor",
    "stage": "switching",
    "category": "general",
    "sentiment": "negative",
    "prominence": "core",
    "evidence": [
      "[post] Moving on from owncloud",
      "[comment u/Busy_Picture1189] Leaving Owncloud after years of fighting sync tools is a familiar arc."
    ],
    "other_companies": [
      { "name": "Nextcloud", "role": "alternative", "domain": "nextcloud.com" },
      { "name": "Syncthing", "role": "alternative", "domain": "syncthing.net" },
      { "name": "Pydio", "role": "alternative", "domain": "pydio.com" }
    ],
    "source_url": "https://www.reddit.com/r/selfhosted/comments/1whp48v/moving_on_from_owncloud/",
    "post_date": "2026-09-16T06:22:46.000Z"
  }
}

Why This Signal Is Valuable

For Nextcloud, this record is a warm lead. The user is not cold-calling. They answer a conversation where someone already named them.

What Your User Does With This

Your end user sees their product named as a replacement for ownCloud. They can join with context: "Saw you are moving off ownCloud. Happy to help with the migration if you look at us."


Activation Pattern 3: React to Company Events

The Use Case

Your end user wants a timely reason to reach out: an outage, a price change, a product sunset, a breach, layoffs, or a funding round.

How It Works

API filter: signal_subtypes with the events you care about, for example ["serviceOutage", "pricingChange", "productChange", "cybersecurityIncident"].

Then keep records where:

  • data.stage is not speculative (keep only claims that someone states as fact), or data.stage = "confirmed" for the strictest view

For events, company is the company the event happened to (data.entity_role = "subject"). The category field gives the detail, for example outage, degradation, or data_loss on serviceOutage.


Implementation Notes

Matching Signals to Accounts

Every delivered signal has company.domain. Match it against your user's CRM or account list:

Signal: company.domain = "owncloud.com"
   ↓
Your system: Match to Account where website = "owncloud.com"

This lets you enrich existing accounts, or surface net-new companies your users do not track yet.

Building Filters

Common filter dimensions your users will want:

FilterFieldWhere
Signal kindsignal_subtype: customerFeedback, buyingIntent, serviceOutage, and 12 moreAPI
Date windowdetected_at (the Reddit post time, same as data.post_date)API
Strength of evidencedata.stage: funnel values or the event ladder (speculativeconfirmed)Your code
Topic of feedbackdata.category: pricing, reliability, security, support, and moreYour code
Main topic or asidedata.prominence: core or asideYour code
Competitor nameddata.other_companies[].name and .roleYour code
Communitydata.subreddit (one subreddit per record)Your code
Attentiondata.virality, data.total_upvotesYour code

Suggested UX Patterns

  1. Signal feed: a list of signals that match the user's filters, newest data.post_date first
  2. Account enrichment: show signals on account detail pages
  3. Alerts: notify users when a core signal with strong stage matches their criteria
  4. Prioritization score: weight accounts higher when they have recent, core, high-virality signals

Broader Coverage Patterns

The patterns above use narrow filters. They surface high-intent but low-volume signals. For broader coverage, try these:

By Subtype

PatternFilterBest For
All pricing paincustomerFeedback + data.category = "pricing"Pricing and packaging solutions
Active buyingbuyingIntentJoin the conversation to sway a buying decision, or to sway someone away from a competitor
Product frustrationcustomerFeedback + data.sentiment = "negative"Competitive displacement. Add data.topics to target specific pain
Support issuescustomerFeedback + data.category = "support"Customer success tools
Customers leavingcustomerFeedback + data.stage in considering, switching, switchedWin-back and displacement campaigns
New tool adoptiontechAdoptionUpsell and integration plays on companies that just adopted a tool

By Field Combinations

Topic-based targeting: use data.topics (up to 5 lowercase tags) to filter by theme across subtypes:

  • topics contains 'pricing': any pricing discussion
  • topics contains 'security': security concerns across subtypes
  • topics contains 'migration': companies that consider a platform change

Competitor-based targeting: use data.other_companies to find discussions that name specific vendors:

  • Surface all signals where a target competitor appears, whatever the subtype
  • The role (competitor, alternative, switching_to, replaced, and more) tells you which side of the deal each company is on

Subreddit-based targeting: use data.subreddit to focus on communities that fit your user's ICP:

  • devops, sysadmin, msp for infrastructure and IT services
  • b2bmarketing, SaaS for GTM tools
  • startups, smallbusiness for SMB-focused products

Migrating from the Old Reddit Format

If you built on the old Reddit format, these are all the data field changes:

Changedata fields
Renamed (2)source_urls (array) → source_url (string); subreddits (array) → subreddit (string)
Removed (12)audience_type, buying_stage, competitors_mentioned, confidence_score, evidence_urls, moderation_score, objection_type, post_count, recency_score, salience_score, topics_tags, urgency
Kept (11)evidence, post_author, post_date, post_flair, post_text, sentiment, summary, topics, total_comments, total_upvotes, upvote_ratio
Added (31)awards, category, comments, comments_included, comments_total, content_warning, details, entity_role, event_date, event_date_text, image_read_by_model, image_url, link_url, mention_count, mention_surge, nsfw, other_companies, people, post_author_id, post_author_url, post_id, post_kind, post_title, products_mentioned, prominence, related_post_urls, signal_category, stage, subreddit_url, timing, virality

Every V3 row carries all 44 keys. A key with no value is null ([] for arrays). details has a value only on leadershipChange.

The old churnRisk is now customerFeedback with data.stage considering, switching or switched (Pattern 2 above). For the other old subtype names (for example pricingConcern), see the changelog post.


We want to make our Reddit data more actionable. Have feedback or questions? Email us at [email protected].


Did this page help you?