.review-card
nodes are present, relaunch the same URL in a headless browser (Playwright / Puppeteer). • Wait for networkIdle
or 3 s, whichever is later.G2_AUTH_ENV
; reuse cookies for the session. • If “Export reviews” (CSV/JSON) appears: click it, solve any captcha, and download the file. • If export fails, fall back to the Reviews API /api/v1/products/{id}/reviews
using the same cookie jar.?page=N
until either: – an empty page (< 2 review cards) or – collected_reviews ≥ X
.{ "error": "PARTIAL_SCRAPE_ERROR" }
.review_id
• Star rating • Date • Reviewer role / industry / company sizefrequency_pct
= mentions ÷ total × 100 (round → 2 dec.) • severity_score
= mean star rating of lowest quartile reviews for that theme (1 worst, 5 best) → 2 dec. • confidence_pct
= 1 – (std-dev sentiment ÷ max possible) × 100 → 2 dec.https://www.g2.com/products/{{G2_SLUG}}/reviews/<review_id>
frequency_pct
≈ 100 ± 5. If not, re-aggregate. • Error if any pct or score fields are non-numeric or out of range (0–100 for pct, 1–5 for scores). • Verify review_count
== collected rows.{
"company": "{{COMPANY_NAME}}",
"snapshot_date_range": {
"crawl_start": "<YYYY-MM-DD>",
"crawl_end": "<YYYY-MM-DD>",
"latest_review_date": "<YYYY-MM-DD>"
},
"review_count": <integer>,
"pain_points": [
{
"theme": "<short label>",
"frequency_pct": <float>,
"severity_score": <float>,
"confidence_pct": <float>,
"summary": "<1-2 sentence synthesis>",
"representative_quotes": [
"Quote… (<https://www.g2.com/products/{{G2_SLUG}>}/reviews/<id>)"
]
}
],
"notable_positive_themes": [
{
"theme": "<label>",
"frequency_pct": <float>,
"summary": "<brief>"
}
],
"methodology_notes": "<tools used, batch sizes, translation count, etc.>",
"self_critique": "<if second pass ran, list refinements>"
}
.review-card
nodes are present, relaunch the same URL in a headless browser (Playwright / Puppeteer). • Wait for networkIdle
or 3 s, whichever is later.G2_AUTH_ENV
; reuse cookies for the session. • If “Export reviews” (CSV/JSON) appears: click it, solve any captcha, and download the file. • If export fails, fall back to the Reviews API /api/v1/products/{id}/reviews
using the same cookie jar.?page=N
until either: – an empty page (< 2 review cards) or – collected_reviews ≥ X
.{ "error": "PARTIAL_SCRAPE_ERROR" }
.review_id
• Star rating • Date • Reviewer role / industry / company sizefrequency_pct
= mentions ÷ total × 100 (round → 2 dec.) • severity_score
= mean star rating of lowest quartile reviews for that theme (1 worst, 5 best) → 2 dec. • confidence_pct
= 1 – (std-dev sentiment ÷ max possible) × 100 → 2 dec.https://www.g2.com/products/{{G2_SLUG}}/reviews/<review_id>
frequency_pct
≈ 100 ± 5. If not, re-aggregate. • Error if any pct or score fields are non-numeric or out of range (0–100 for pct, 1–5 for scores). • Verify review_count
== collected rows.{
"company": "{{COMPANY_NAME}}",
"snapshot_date_range": {
"crawl_start": "<YYYY-MM-DD>",
"crawl_end": "<YYYY-MM-DD>",
"latest_review_date": "<YYYY-MM-DD>"
},
"review_count": <integer>,
"pain_points": [
{
"theme": "<short label>",
"frequency_pct": <float>,
"severity_score": <float>,
"confidence_pct": <float>,
"summary": "<1-2 sentence synthesis>",
"representative_quotes": [
"Quote… (<https://www.g2.com/products/{{G2_SLUG}>}/reviews/<id>)"
]
}
],
"notable_positive_themes": [
{
"theme": "<label>",
"frequency_pct": <float>,
"summary": "<brief>"
}
],
"methodology_notes": "<tools used, batch sizes, translation count, etc.>",
"self_critique": "<if second pass ran, list refinements>"
}
apply.prospeqt.co
Book your strategy call
A focused session with a Clay & instantly expert to clarify if automated outbound fits your business. We’ll map your goals, challenges, and ideate your TAM — so you leave with a clear view of the channel’s potential and the steps to turn it into a predictable revenue engine.