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.
Delivery is weekly. A signal ships once - the ID is stable, and a record re-ships only when its evidence gets stronger.
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. Watch stage for churn: switching/switched means the account 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. Often ships speculative - community predictions, labeled as predictions |
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}. Resolved people also ship as reddit-contact records |
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 |
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
Verbatim production record, annotated:
{
"signal_id": "913d28a9-8194-5e66-a6fc-f750a3d09442", // deterministic: same signal = same ID, every delivery
"batch_id": "2026-09-20-16-25-11", // when we generated it (UTC, audit truth)
"signal_type": "reddit-company",
"signal_subtype": "customerFeedback",
"signal_name": "Reddit Mention",
"detected_at": "2026-09-20T19:04:57.108Z", // delivery-timeline date (week-ending for weekly files)
"association": "company",
"company": { // use domain or LinkedIn url to match. Shown for both contact & company signals.
"name": "Grammarly",
"domain": "grammarly.com", // resolved live; null = we abstained rather than guessed
"linkedin_url": "https://www.linkedin.com/company/grammarly",
"industries": ["Software Development"],
"employee_count_low": 1001,
"employee_count_high": 5000,
"description": "Grammarly is an AI writing assistant used by teams and enterprises."
},
"contact": null, // always null on company records
"data": {
"signal_category": "feedback", // coarse group: feedback | intent | adoption | event
"summary": "A company reports that after deciding not to renew its subscription, Grammarly sent unsolicited emails and in-app popups to all licensed users, prompting the company's leadership to immediately remove the software and expedite a switch to Microsoft Copilot.",
"entity_role": "vendor", // vendor | buyer | subject
"stage": "switched", // subtype-scoped; here: the customer already moved
"category": "general", // subtype-scoped; null where the subtype has none
"sentiment": "negative", // toward the company
"prominence": "core", // core = the thread is about this; aside = passing mention
"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": ["cancellation", "customer retention", "vendor management", "sales tactics"],
"products_mentioned": [],
"evidence": [ // verbatim quotes; prefix = where each came from
"[post] We let them know we weren't going to renew and they sent these unsolicited emails and popups in their app to all of the users who had licenses.",
"[post] They didn't give us a heads up - just started carpet bombing everyone. They even listed the direct email for the guy on my team who handles licensing."
],
"other_companies": [ // everyone else in the conversation, with their role
{ "name": "Microsoft", "role": "switching_to", "domain": "microsoft.com" }
],
"source_url": "https://www.reddit.com/r/sysadmin/comments/1wjdpgx/psa_grammarly_will_send_unhinged_messages_to_all/",
"post_id": "1wjdpgx",
"post_title": "PSA: Grammarly will send unhinged messages to all your users if you try to cancel",
"post_text": "…full thread body, up to 5,000 chars - the same context the extractor read…",
"post_kind": "multi_media", // text | image | link | multi_media | hosted:video
"link_url": null,
"image_url": null,
"image_read_by_model": false, // true when the extractor read the image pixels
"subreddit": "sysadmin",
"subreddit_url": "https://www.reddit.com/r/sysadmin/",
"post_date": "2026-09-18T02:26:01.000Z", // when the thread was posted (the real conversation time)
"post_flair": ["General Discussion"],
"post_author": "brothertax", // handle only - we never resolve Reddit users
"post_author_url": "https://www.reddit.com/user/brothertax/",
"post_author_id": "t2_4g10w",
"total_upvotes": 4207,
"total_comments": 348,
"upvote_ratio": 0.98,
"awards": 0,
"virality": "very_high", // engagement percentile vs the week's corpus
"mention_count": 1, // distinct threads naming this company this run
"mention_surge": false, // true at mention_count >= 3
"related_post_urls": [],
"comments": [ // up to 20 top comments, for verification context
{
"author": "bunnythistle",
"author_url": "https://www.reddit.com/user/bunnythistle/",
"score": 2064,
"depth": 0,
"posted_at": "2026-09-18T02:33:58.000Z",
"url": "https://www.reddit.com/r/sysadmin/comments/1wjdpgx/comment/pahvl9b/",
"excerpt": "That sounds like a great way to get their domain on our email block list. …"
}
],
"comments_total": 348,
"comments_included": 20,
"nsfw": false, // Reddit's own over-18 flag
"content_warning": null // "profanity_in_quotes" = check before quoting in outreach
},
"_qa": { // quality metadata - machine-measured, filterable
"validation_issues": [],
"resolution": "resolved",
"margin": null,
"triage_interest": 0.9
}
}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 |
batch_id | string | ✓ | Generation batch timestamp, YYYY-MM-DD-HH-MM-SS UTC. This is when Autobound produced the record - the audit trail. It can differ from detected_at on backfilled weeks |
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 date this signal belongs to on YOUR timeline. For weekly files it is the week-ending date. It is not the thread date - use data.post_date for that |
association | string | ✓ | Always "company" |
company | object | ✓ | The company this signal is about (below) |
contact | null | ✓ | Always null on company records; person records ship as reddit-contact |
Company Object
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | The company name after resolution. Falls back to the name exactly as the thread used it when resolution abstained |
domain | string | null | ✓ | Primary domain from Autobound's live resolution engine (web search + AI verification of each candidate). null means the resolver abstained rather than guessed - about 1 in 10 records; the signal still ships name-only. Use domain as your join key to CRM/enrichment when present |
Data Object
| 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). null on subtypes that define no categories |
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). Omitted when none fits |
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"). Present on most dated signals; 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 | Only on leadershipChange: { person_name, title, direction: "joins" | "leaves" } |
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–3 verbatim quotes supporting the signal, each prefixed with its source: [post], [comment u/<name>], or [image]. 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, image, link, multi_media, hosted:video. 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. Use this for recency, not 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 (low → 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 - the company is a topic across communities (common during outages and pricing changes) |
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 |
Quality Metadata (_qa)
_qa)Machine-measured quality facts. Filter on these instead of trusting a single score.
| Field | Type | Description |
|---|---|---|
validation_issues | array | Non-blocking QA notes recorded at extraction time (empty on clean records) |
resolution | string | Company resolution outcome: resolved/candidate (domain returned and accepted), unresolved/abstained (no confident match - domain is null), not_attempted |
margin | number | null | The resolver's decision margin, when it reports one |
triage_interest | number | 0–1 actionability score from triage. Higher = more concrete and seller-actionable. A cheap precision dial: >= 0.7 keeps the sharpest third |
vet | object | null | Present on risky signals (events, asides): an independent automated second review. Contains per-check booleans (entity in source, subtype fit, stage fit, prominence fit, summary faithful), a verdict of ok or flag, and a short reason. flag means our reviewer disagrees with something - shipped anyway, labeled, so you can decide |
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), with historical weeks backfilled. 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.
Legacy docs: the previous Reddit page described the earlier company-seeded Reddit product and is retained (hidden) for reference.
Updated about 2 hours ago

