Product Reviews
Surface high-value sales signals from G2 reviews including vendor pain points, switching intent, and quantified business impact from decision-makers.
Product Reviews surface what real users are saying about software vendors on G2 — complaints, switching intent, quantified business impact, and decision-maker frustrations that signal active displacement opportunities.
We analyze G2 reviews across 2M+ companies, scanning for 9 signal types that matter for sales intelligence. Our model extracts switching intent phrases ("we're evaluating alternatives"), quantified impact ("cost us $50K in lost pipeline"), and decision-maker complaints (filtering for VP/Director/C-level titles). Multiple reviews mentioning the same issue get aggregated into a single signal with supporting quotes from each reviewer.
Each signal includes structured evidence — reviewer quotes, titles, star ratings, and review URLs — so you can validate the intelligence and use it directly in outreach.
Reviewers are anonymous — like Reddit, you get unfiltered sentiment without individual identity. We're working to de-anonymize where possible.
See real delivered data → Sample Files
Subtypes represent the specific pattern detected across product reviews — from competitive displacement to feature gaps to pricing concerns.
Available Subtypes (9)
| Subtype Enum | Description |
|---|---|
ActiveChurn | Explicit statements about leaving or having left the product |
CompetitorMentions | Mentions of switching to or evaluating competitors |
CustomerSupportComplaints | Slow response, unresolved tickets, poor service quality |
IntegrationProblems | Broken APIs, sync failures, compatibility issues |
MissingFeatures | Critical features users need but product lacks |
PricingConcerns | Too expensive, hidden fees, poor ROI, price hikes |
RecurringProductIssues | Same bug or problem mentioned in 2+ reviews (systemic) |
ReliabilityIssues | Downtime, crashes, data loss, instability |
UsabilityIssues | Hard to use, steep learning curve, bad UX |
Categories group subtypes into higher-level themes — a common way to filter signals by sales motion or use case.
Signal Categories
| Category | Description |
|---|---|
feedback | User experience and feature feedback |
risk | Churn risk and reliability concerns |
financial | Pricing and ROI concerns |
technology | Integration and technical issues |
competitive | Competitor comparisons and switching |
Example Signal
What a single entry looks like in a delivered signal file:
{
"signal_id": "1cb8bd74-e7c9-4c41-b7aa-9c6f19f72e5d",
"batch_id": "2026-03-01-00-00-00",
"signal_type": "g2-product-review",
"signal_subtype": "CompetitorMentions",
"detected_at": "2026-02-28T09:22:47.312Z",
"association": "company",
"company": {
"name": "6sense",
"domain": "6sense.com", // match on domain
"linkedin_url": "linkedin.com/company/6sense", // or match on LinkedIn URL
"industries": ["Software Development", "Marketing Technology"],
"employee_count_low": 1001,
"employee_count_high": 2000
},
"contact": [],
"data": {
"headline": "Director of Demand Gen Switching from 6sense to Demandbase, Cites 70% of Intent Data Unactionable",
"summary": "Multiple mid-market marketing leaders report 6sense intent data quality has degraded since their last funding round. Director of Demand Gen at a 500-person SaaS company actively migrating...",
"product_name": "6sense Revenue AI",
"source_page_url": "https://www.g2.com/products/6sense-revenue-ai/reviews",
"relevance": 92, // 0-100; 90+ = decision-maker + switching intent
"switching_intent": {
"detected": true,
"urgency": "immediate",
"signal_phrase": "We started our Demandbase POC last month and are not renewing 6sense"
},
"quantified_impact": {
"has_numbers": true,
"metrics": [
"70% of intent signals unactionable",
"$120K annual contract",
"3 months to get onboarding support"
]
},
"decision_maker_complaint": {
"is_decision_maker": true,
"title": "Director of Demand Generation"
},
"competitors_mentioned": [
"Demandbase",
"Bombora",
"ZoomInfo"
],
"evidence": [
{
"quote": "70% of the intent signals 6sense surfaces are unactionable — accounts that have zero fit or timing. We started our Demandbase POC last month and are not renewing...",
"reviewer_name": "Michael T.",
"reviewer_title": "Director of Demand Generation @Mid-Market SaaS (400-600)",
"review_date": "2026-02-18",
"review_url": "https://www.g2.com/products/6sense-revenue-ai/reviews/6sense-review-9851432",
"star_rating": 2.0
},
{
"quote": "Took 3 months to get proper onboarding support after signing a $120K contract. By then half our team had lost confidence in the platform...",
"reviewer_name": "Sarah P.",
"reviewer_title": "VP Marketing @Series C Startup",
"review_date": "2026-02-10",
"review_url": "https://www.g2.com/products/6sense-revenue-ai/reviews/6sense-review-9847891",
"star_rating": 1.0
}
]
}
}Field Reference
Standard envelope and entity fields are shared across all signals — see Schema and Resolution. The fields below are specific to this signal:
Signal-Specific Fields
The data object contains everything unique to this signal type — the intelligence extracted from aggregated G2 reviews.
| Field | Type | Description |
|---|---|---|
headline | string | 12–20 word headline summarizing WHO + PROBLEM + IMPACT. Designed for notifications and list views. Always includes the reviewer's seniority level and the core complaint |
summary | string | 2–4 sentence summary explaining who complained, what the problem is, and what impact it's having. Written for a salesperson to quickly assess whether this signal creates a displacement opportunity |
product_name | string | Name of the reviewed product (e.g., "6sense Revenue AI", "ZoomInfo SalesOS"). Useful for filtering by specific competitor products |
source_page_url | string (URL) | URL of the G2 review page. Useful for manual verification or linking in outreach |
relevance | integer (0–100) | Relevance score where 90+ = exceptional (decision-maker + switching intent), 80–89 = high value, 70–79 = solid signal, 60–69 = moderate. Useful for prioritization |
competitors_mentioned | array[string] | Competitors mentioned in the reviews — companies the reviewer is switching to, evaluating, or comparing against. The core intelligence for competitive displacement motions |
Switching Intent
The switching_intent nested object captures whether reviewers are actively moving away from the product.
| Field | Type | Description |
|---|---|---|
switching_intent.detected | boolean | Whether switching intent was detected in any of the aggregated reviews |
switching_intent.urgency | string | Urgency level: immediate (actively in evaluation/migration), considering (evaluating but no timeline), or none. Useful for prioritizing outreach timing |
switching_intent.signal_phrase | string | Exact phrase from a review indicating switching intent. Useful for quoting in personalized outreach or validating the signal |
Quantified Impact
The quantified_impact nested object captures specific numbers mentioned in reviews.
| Field | Type | Description |
|---|---|---|
quantified_impact.has_numbers | boolean | Whether any quantified metrics were extracted from the reviews |
quantified_impact.metrics | array[string] | Extracted metrics as natural language strings (e.g., "$120K annual contract", "70% of signals unactionable"). Useful for building ROI-focused outreach |
Decision Maker Complaint
The decision_maker_complaint nested object identifies whether the complaint comes from someone with purchasing authority.
| Field | Type | Description |
|---|---|---|
decision_maker_complaint.is_decision_maker | boolean | Whether the complaint is from a decision-maker (C-level, VP, Director, Owner, Founder). Signals with true are significantly more actionable for sales |
decision_maker_complaint.title | string | Reviewer's job title. Useful for understanding who within the org is experiencing the problem |
Evidence Array
The evidence array contains individual review quotes that support the signal.
| Field | Type | Description |
|---|---|---|
evidence[].quote | string | Direct quote from the review (max 500 chars). The specific language the reviewer used — useful for personalized outreach or fact-checking |
evidence[].reviewer_name | string | Reviewer first name and last initial, or "Anonymous" |
evidence[].reviewer_title | string | Reviewer's self-reported job title on G2. May include company size context |
evidence[].review_date | string (date) | Date the review was posted. Useful for recency filtering |
evidence[].review_url | string (URL) | Direct link to the specific review on G2. Useful for verification |
evidence[].star_rating | float | Star rating given by this reviewer (1.0–5.0). Lower ratings correlate with stronger displacement signals |
Timing & Delivery
detected_atis when we processed the review batch. Useevidence[].review_datefor when individual reviews were posted.- One signal per subtype per product per 30-day window. The same product can have multiple signal subtypes active simultaneously (e.g., both
PricingConcernsandActiveChurn), but each subtype fires only once per cycle. - Each delivery arrives in a timestamped folder. Treat all signals in a new folder as recent — no need to diff against prior deliveries.
Coverage
- Refresh: Monthly
- Coverage: 2,000,000+ companies
- Best for: Competitive displacement, churn prevention, market intelligence, ABM triggers for companies losing customers to you
Updated 9 days ago
