Reddit Mentions (Company)
Overview
Reddit Mentions (Company) turn candid Reddit threads into structured sales signals. When a business complains about a renewal, evaluates a replacement, or reports an outage, you get a signal with the company resolved to its domain and the exact quotes that prove it.
We monitor 500+ hand-vetted business communities and 150+ standing searches. Every community passed a live AI screen before inclusion (1,300+ candidates tested, 59% rejected). Each signal carries one of 15 subtypes, verbatim evidence, and two honesty labels: stage says how strong the evidence is; prominence says whether the thread was about this or mentioned it in passing.
New signals arrive weekly. A signal ships once - the ID is stable, and a record re-ships only when its evidence gets stronger.
This is the only Reddit format the Signal API serves (signal_type: "reddit-company"). See Using the Signal API below.
Available Subtypes
The signal_subtype field takes one of 15 values. Expand for the full list with each subtype's stage and category vocabularies.
All 15 subtypes - roles, stages, and categories
| Subtype | Role | Stage values | Category values | Description |
|---|---|---|---|---|
customerFeedback | vendor | none considering switching switched | pricing reliability security support integration implementation features usability general | Any customer voice about a vendor's product - praise, pain, pricing anger, intent to leave, or a completed switch. The broadest subtype. Churn (the old churnRisk) is customerFeedback with data.stage considering, switching or switched. switched means the account already moved |
buyingIntent | vendor or buyer | researching evaluating deciding | free text - the software category ("CRM", "observability") | An active evaluation or purchase. Buyer-side records need a company named specifically enough to resolve, so most records are vendor-side |
techAdoption | buyer | switched | free text - the tool category adopted | A named company reports using or rolling out named tools |
serviceOutage | subject | event ladder¹ | outage degradation data_loss | The product is down or degraded NOW. Post-hoc reliability complaints are customerFeedback/reliability |
pricingChange | subject | event ladder¹ | price license packaging terms | The vendor changed price, licensing, packaging, or terms - the fact of the change; the angry reaction is customerFeedback |
productChange | subject | event ladder¹ | discontinued feature_removed breaking_change redesign policy_change | Sunset/EOL, removed feature, breaking release, redesign, or policy change |
accountRestriction | subject | event ladder¹ | suspension closure funds_hold quota_denied access_denied listing_removed reviews_removed ad_disapproved | A platform suspended, closed, held funds from, or denied access to a customer |
financialDistress | subject | event ladder¹ | unpaid_vendors missed_payroll runway fire_sale shutdown_talk other | Unpaid vendors, missed payroll, runway rumors, insolvency. Most records are reported or confirmed. Community predictions ship as speculative (about 4% so far) |
cybersecurityIncident | subject | event ladder¹ | breach ransomware vulnerability_disclosed active_exploitation supply_chain | A breach, or a critical vulnerability in the company's own product. The entity is always the victim or the vulnerable-product maker |
layoffs | subject | event ladder¹ | layoffs hiring_freeze attrition | Layoffs/RIF, hiring freeze, or mass attrition |
leadershipChange | subject | event ladder¹ | - | A named executive joins or leaves. Carries data.details {person_name, title, direction} |
acquisitionAnnounced | subject | event ladder¹ | acquirer target merger (this company's side) | An acquisition or merger; the counterparty appears in data.other_companies |
fundingEvent | subject | event ladder¹ | seed series_a series_b later_stage debt grant unspecified | A funding round raised by this company. category can be null when the thread gives no round type |
hiringSignal | subject | event ladder¹ | - | The company hires at scale. One person's job offer does not qualify |
productLaunch | subject | event ladder¹ | - | The company launches a product |
¹ Event ladder - every event subtype uses the same stage scale, weakest to strongest evidence: speculative (the author predicts it; never stated as fact) → rumored (someone claims it is happening, unverified) → reported (secondhand claim it occurred) → confirmed (first-hand account or official notice/link). Filter stage != "speculative" for facts only; keep predictions as early intent.
Schema
A production record from the week ending 2026-09-20, as the Signal API returns it, annotated. Long text fields are shortened here.
{
"signal_id": "dd9c1e08-55de-5867-a320-cfb9bcaf8877", // deterministic: same signal = same ID, every delivery
"signal_type": "reddit-company",
"signal_subtype": "customerFeedback",
"signal_name": "Reddit Mention",
"detected_at": "2026-09-15T09:53:13.000Z", // the Reddit post time (= data.post_date); detected_after/detected_before filter on it
"association": "company",
"company": { // use domain or LinkedIn url to match
"name": "Microsoft",
"domain": "microsoft.com", // resolved live; every delivered record has a domain
"linkedin_url": "linkedin.com/company/microsoft", // "" when unknown
"industries": ["Software Development"], // [] when unknown
"employee_count_low": 0, // 0 when unknown; filled from Autobound firmographics when matched
"employee_count_high": 0,
"description": "Microsoft Corporation is a multinational conglomerate that develops and sells a wide range of technology products. …"
},
"contact": null, // API responses only: always null on company records
"data": {
"signal_category": "feedback", // coarse group: feedback | intent | adoption | event
"summary": "Agoda replaced its 72-shard Microsoft SQL Server price cache with DragonflyDB, indicating SQL Server was not suitable for their high-performance caching requirements.",
"entity_role": "vendor", // vendor | buyer | subject
"stage": "switched", // subtype-scoped; here: the customer already moved
"category": "features", // subtype-scoped; null where the subtype has none
"sentiment": "negative", // toward the company
"prominence": "core", // core = the thread is about this; aside = passing mention
"details": null, // leadershipChange only: { person_name, title, direction }
"timing": "completed", // ongoing_state | in_progress | completed | planned
"event_date": "2026-09", // best-estimate month; null = no date derivable (never invented)
"event_date_text": null, // the raw phrase from the thread, when one exists
"people": [], // real named people only - never Reddit usernames
"topics": ["caching", "database", "customer loss", "performance"],
"products_mentioned": ["SQL Server"],
"evidence": [ // verbatim quotes; prefix = where each came from
"[post] Agoda Replaces 72-Shard SQL Server Price Cache with DragonflyDB",
"[comment u/HRApprovedUsername] They switched from a db to in memory cache and got an improvement? Sounds obvious"
],
"other_companies": [ // everyone else in the conversation, with their role
{ "name": "DragonflyDB", "role": "switching_to", "domain": null }
],
"source_url": "https://www.reddit.com/r/softwarearchitecture/comments/1wgvwi0/agoda_replaces_72shard_sql_server_price_cache/",
"post_id": "1wgvwi0",
"post_title": "Agoda Replaces 72-Shard SQL Server Price Cache with DragonflyDB",
"post_text": "…full thread body, up to 5,000 chars - the same context the extractor read…",
"post_kind": "link", // text | link | image | multi_media | crosspost | gallery | video | gif | poll
"link_url": "https://www.infoq.com/news/2026/09/agoda-price-cache-dragonflydb/",
"image_url": null,
"image_read_by_model": false, // true when the extractor read the image pixels
"subreddit": "softwarearchitecture",
"subreddit_url": "https://www.reddit.com/r/softwarearchitecture/",
"post_date": "2026-09-15T09:53:13.000Z", // when the thread was posted (the real conversation time)
"post_flair": ["Article/Video"],
"post_author": "rgancarz", // handle only - we never resolve Reddit users
"post_author_url": "https://www.reddit.com/user/rgancarz/",
"post_author_id": "t2_qvzmu",
"nsfw": false, // Reddit's own over-18 flag
"content_warning": null, // "profanity_in_quotes" = check before quoting in outreach
"total_upvotes": 54,
"total_comments": 2,
"upvote_ratio": 0.98,
"awards": 0,
"virality": "medium", // engagement percentile vs the week's corpus
"mention_count": 261, // distinct threads naming this company this run
"mention_surge": true, // true at mention_count >= 3
"related_post_urls": [ // up to 10 other threads naming the same company
"https://www.reddit.com/r/sysadmin/comments/1whxib9/microsoft_down/",
"…"
],
"comments": [ // up to 20 top comments, for verification context
{
"author": "HRApprovedUsername",
"author_url": "https://www.reddit.com/user/HRApprovedUsername/",
"score": 5,
"depth": 0,
"posted_at": "2026-09-17T01:43:24.000Z",
"url": "https://www.reddit.com/r/softwarearchitecture/comments/1wgvwi0/comment/paaaieh/",
"excerpt": "They switched from a db to in memory cache and got an improvement? Sounds obvious"
}
],
"comments_total": 2,
"comments_included": 1
}
}Field Reference
Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
signal_id | string (UUID) | ✓ | Deterministic ID derived from (post, company, subtype). The same signal carries the same ID in every delivery. Re-runs and backfills are upsert-safe: treat signal_id as your primary key |
signal_type | string | ✓ | Always "reddit-company" |
signal_subtype | string | ✓ | One of the 15 subtypes above. Drives which stage and category values are possible |
signal_name | string | ✓ | Always "Reddit Mention" |
detected_at | string (ISO 8601) | ✓ | The Reddit post time: the same instant as data.post_date (for example 2026-09-15T09:53:13.000Z). detected_after and detected_before filter on it |
association | string | ✓ | Always "company" |
company | object | ✓ | The company this signal is about (below) |
contact | null | Always null in Signal API responses. Bucket files omit the key |
batch_id (the generation batch timestamp) is in the V3 bucket files only. Signal API responses do not include it.
Company Object
This is the company object that the Signal API returns. An unknown linkedin_url is "", unknown industries is [], and unknown employee counts are 0. They are never null.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | The company name after resolution. Every delivered record is resolved (see domain), so no record carries only the raw thread name |
domain | string | ✓ | Primary domain from Autobound's live resolution engine (web search + AI verification of each candidate). Every delivered record has a domain: when the resolver abstains, the signal is held back, not shipped name-only. Use domain as your join key to CRM/enrichment |
linkedin_url | string | ✓ | LinkedIn company page. "" when unknown |
industries | array | ✓ | Industry labels. [] when unknown |
employee_count_low, employee_count_high | number | ✓ | Employee range from Autobound firmographics when it has a match. Both are 0 when unknown |
description | string | null | ✓ | Short company description. null when unknown |
revenue | string | null | Annual-revenue bucket from Autobound firmographics. Present only when Autobound has a firmographics match for the company (null when that match has no revenue) |
Data Object
Signal API responses carry all 44 data keys on every row. A key with no value is null ([] for arrays), so treat each type below as nullable.
| Field | Type | Description |
|---|---|---|
signal_category | string | Coarse grouping for quick routing: feedback, intent, adoption, or event. Redundant with subtype but cheaper to filter on |
summary | string | One sentence, company first, with the concrete specifics (numbers, dates, names) pulled into words. Predictions read as predictions; passing mentions read as asides - the summary never upgrades weak evidence |
entity_role | string | The company's side of the story. vendor = its product is being discussed; buyer = it is doing the evaluating/adopting; subject = the event happened to it |
stage | string | null | How far along, or how solid. Funnel subtypes use funnel values (considering → switched); event subtypes use the evidence ladder (speculative → confirmed). See the subtype accordion for each vocabulary. This is your main precision filter |
category | string | null | The subtype's finer classification (e.g. pricing vs reliability inside customerFeedback). Always null on subtypes that define no categories (hiringSignal, productLaunch, leadershipChange). Can also be null on other subtypes when no category fits (about 40 of 13,089 rows so far: mostly customerFeedback, productChange, fundingEvent) |
sentiment | string | positive, neutral, negative, or mixed - the thread's tone toward THIS company, not the thread's overall mood |
prominence | string | core = the thread is about this signal, or the author reports it first-hand. aside = a passing mention: a commenter's recommendation, an old event recalled, background context. Roughly a third of signals are asides - they are real information, labeled so you can weight them |
timing | string | null | When the described thing happens relative to the post: ongoing_state (a standing situation), in_progress (happening now), completed (already happened - even years ago), planned (announced for the future). The key is always present. It is null when none fits (about 4% of rows) |
event_date | string | null | Best-estimate month, YYYY-MM or YYYY. Relative phrases ("yesterday", "last week") are anchored to the post date. null when no date is derivable - we never invent one. Pair with timing: completed + an old event_date = history, not news |
event_date_text | string | null | The raw temporal phrase from the thread ("effective October 1", "the last 3 or 4 months", "upcoming"). It does not depend on event_date: a vague phrase can ship with event_date null, and a dated signal can have no phrase. About 24% of records carry it (3,126 of 13,089 so far). Useful for display |
people | array | Real named humans relevant to this signal: { name, title, employer, role } with role actor (the person the signal is about) or mentioned. Reddit usernames never appear here |
details | object | null | Present on every row. It has a value only on leadershipChange: { person_name, title, direction }. It is null on the other 14 subtypes. direction is "joins", "leaves", or null when the thread does not say (2 of 16 records so far) |
topics | array | Up to 5 short lowercase tags (pricing, migration, ai) for faceting |
products_mentioned | array | The company's own product lines named in the thread ("M365", "Lambda") |
evidence | array | 1–5 verbatim quotes supporting the signal, each prefixed with its source in square brackets. Most quotes start with [post] or [comment u/<name>]. Other prefixes: [image] (text read from the image), [title] (the post title), [body] (the post body), and [link] or [link_url] (the linked URL). Parse the prefix as "text in the first [...]", not as a fixed list. This is the checkability guarantee - every claim is one click from its evidence via source_url |
other_companies | array | Every other company in the conversation with its relationship to this one: competitor, alternative, incumbent, switching_to, adopted, replaced, acquirer, target, partner - each with its resolved domain when available. A churn signal's switching_to entry tells you who won the deal |
source_url | string | Canonical thread permalink. Append .json for Reddit's public JSON of the full thread |
post_id, post_title, post_text | string | Thread identity, title, and body (up to 5,000 chars - the same text our extractor read, shipped for verification) |
post_kind | string | What kind of post: text, link, image, multi_media, crosspost, gallery, video, gif, or poll. Image posts may carry the content in pixels - see image_read_by_model |
link_url, image_url | string | null | The external link or image for non-text posts |
image_read_by_model | boolean | true when the extractor read the attached image (screenshots of outage banners, pricing emails, etc.) |
subreddit, subreddit_url | string | The source community |
post_date | string (ISO 8601) | When the thread was posted - the conversation's real timestamp. The Signal API copies it into detected_at |
post_flair | array | The thread's flair labels, when set |
post_author, post_author_url, post_author_id | string | The poster's handle, profile URL, and stable t2_ ID. Provenance only - we never resolve Reddit users to real identities |
total_upvotes, total_comments, upvote_ratio, awards | number | Thread engagement at collection time. High engagement = the market is watching this conversation |
virality | string | Engagement percentile bucket relative to that week's whole corpus: very_low, low, medium, somewhat_high, high, very_high - "viral" always means viral for that week |
mention_count | number | How many distinct threads named this company in the same run |
mention_surge | boolean | true at mention_count ≥ 3. Large vendors trip it most weeks (57% of all records so far: 7,424 of 13,089), so treat it as a weak hint and use mention_count for ranking |
related_post_urls | array | Up to 10 other threads mentioning the same company that run |
comments | array | Up to 20 top comments (author, score, depth, timestamp, permalink, 400-char excerpt) - the discussion context, shipped so you can verify tone and claims without leaving the record |
comments_total, comments_included | number | The thread's full comment count vs how many ship here |
nsfw | boolean | Reddit's own over-18 flag for the thread. Effectively always false in our vetted business communities |
content_warning | string | null | "profanity_in_quotes" when the summary or evidence text contains profanity. Check this before piping quotes verbatim into outreach copy |
Coverage
- Communities: 500+ hand-vetted business subreddits across IT & infrastructure, security, data/AI, software engineering, e-commerce & retail, marketing, sales & CS, finance & accounting, HR & legal, healthcare, construction & trades, manufacturing, energy, logistics - plus dedicated regional coverage (UK & Ireland, DACH, France & Benelux, Nordics, Iberia & LATAM, India, Australia & NZ, Canada, SEA & Japan/Korea, MEA). Per-community yield is re-measured every run; communities that stop producing get pruned.
- Standing searches: 150+ probe-verified queries catch signals outside the curated communities.
- Cadence: weekly (week ending Sunday). History starts with the week ending 2026-09-06. Deduplication is guaranteed: a signal ships once, under a stable ID, and re-ships only when its evidence strengthens (a rumor upgrading to
confirmed). - Quality machinery: automated review of every risky signal at production time, tripwire gates on every run, and independent AI audits that grade weekly batches field-by-field before delivery.
Using the Signal API
- Type:
signal_types: ["reddit-company"]. - Subtypes: pass any of the 15 names above in
signal_subtypes, together withsignal_types: ["reddit-company"]. Old Reddit subtype names are retired and return 0 Reddit rows.- A retired name gets a
warnings[]entry that names its V3 replacement only when no requested signal type uses that name. - With no
signal_types, company search and enrich treat all company types as requested,reddit-companyincluded. So a retired Reddit-only name (for examplechurnRisk,pricingConcernoruseCase) gets the warning. painPointandcompetitorMentionare alsoearnings-transcriptssubtypes. These two never get the warning whenearnings-transcriptsis in the requested set, explicitly or implicitly (nosignal_types). They still return 0 Reddit rows.- The changelog post has the full old-to-new mapping.
- A retired name gets a
- Dates:
detected_atis the Reddit post time (data.post_date).detected_afteranddetected_beforefilter on it. - Refresh: one new week of signals each week. Typical volume is 3,000-5,000 signals about 1,300-1,900 companies per week.
- Filtering on
data:stage,category,prominence, andsentimentare not API filters. Filter on them in your code after you fetch. - Monitoring pool: Reddit is discovery-only. We scan communities, not a company list.
reddit-companymonitoring-pool entries are free, do not add coverage, and return the warningsignal_type_not_monitorable.
Changes from the Old Reddit Format
All data field changes from the old Reddit format (v0-v2) to V3:
| 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.
Legacy docs: the previous Reddit page describes the legacy
reddit-company-v2bucket feed. It is kept (hidden) for bucket readers. The Signal API does not serve that format.
Updated 18 days ago

