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:
- In the API request. Send
signal_types: ["reddit-company"]and, if you want,signal_subtypes(any of the 15 Reddit subtypes) and adetected_afterdate. - In your code. Filter on
datafields such asstage,category,prominence,sentiment, andother_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
| Field | How to Use It |
|---|---|
data.summary | Show as the headline. It is ready for end users |
data.evidence | Show as proof. Each quote is verbatim and starts with its source in brackets, for example [post] or [comment u/…] |
data.source_url | Link to the thread so the user can read it |
data.other_companies | Show who else is in the conversation (competitors, alternatives) |
data.virality | Rank by attention: very_low to very_high, relative to that week |
data.post_date | Show 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.stageisconsidering,switching, orswitched- optionally,
data.other_companiescontains your user's company with rolealternativeorswitching_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.stageis notspeculative(keep only claims that someone states as fact), ordata.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:
| Filter | Field | Where |
|---|---|---|
| Signal kind | signal_subtype: customerFeedback, buyingIntent, serviceOutage, and 12 more | API |
| Date window | detected_at (the Reddit post time, same as data.post_date) | API |
| Strength of evidence | data.stage: funnel values or the event ladder (speculative → confirmed) | Your code |
| Topic of feedback | data.category: pricing, reliability, security, support, and more | Your code |
| Main topic or aside | data.prominence: core or aside | Your code |
| Competitor named | data.other_companies[].name and .role | Your code |
| Community | data.subreddit (one subreddit per record) | Your code |
| Attention | data.virality, data.total_upvotes | Your code |
Suggested UX Patterns
- Signal feed: a list of signals that match the user's filters, newest
data.post_datefirst - Account enrichment: show signals on account detail pages
- Alerts: notify users when a
coresignal with strongstagematches their criteria - 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
| Pattern | Filter | Best For |
|---|---|---|
| All pricing pain | customerFeedback + data.category = "pricing" | Pricing and packaging solutions |
| Active buying | buyingIntent | Join the conversation to sway a buying decision, or to sway someone away from a competitor |
| Product frustration | customerFeedback + data.sentiment = "negative" | Competitive displacement. Add data.topics to target specific pain |
| Support issues | customerFeedback + data.category = "support" | Customer success tools |
| Customers leaving | customerFeedback + data.stage in considering, switching, switched | Win-back and displacement campaigns |
| New tool adoption | techAdoption | Upsell 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 discussiontopics contains 'security': security concerns across subtypestopics 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,mspfor infrastructure and IT servicesb2bmarketing,SaaSfor GTM toolsstartups,smallbusinessfor SMB-focused products
Migrating from the Old Reddit Format
If you built on the old Reddit format, these are all the data field changes:
| Change | data 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].
Updated about 9 hours ago

