Daily voice-of-customer review digest with Linear triage
Every weekday at 8am ET, sweep G2, Trustpilot, and Capterra for new reviews of your product, post a tagged Slack digest, and open a Linear ticket for anything 3 stars or lower.
Build me an agent workflow that monitors public review sites for my product (and any competitors I list) and triages new reviews each morning.
Trigger: cron, every weekday at 8am America/New_York.
Inputs I will configure when I install it: a list of review URLs grouped by site and brand (mine vs competitor), the spreadsheet ID and tab name of my review log, the Slack channel for the digest (default #voice-of-customer), and the Linear team that should own low-star reviews.
Step 1. Read the existing review log from Google Sheets using Get Values on the 'seen reviews' tab so the agent has the set of review IDs we have already processed. Treat this as the dedupe set for the rest of the run.
Step 2. For each URL in my watch list, use TinyFish Run Automation to have a web agent visit the page and return every visible review on the first results page as structured data. For each review capture: site (g2 / trustpilot / capterra / other), brand (mine or the competitor name), a stable review ID (the site's review URL or hash), rating, title, body, reviewer handle or display name, and posted date. Use the synchronous Run Automation for short runs and the async variant if any single site is slow.
Step 3. Drop any review whose ID already appears in the dedupe set from step 1. Only genuinely new reviews continue. If zero new reviews remain across all sites, end the run without posting to Slack or creating any Linear issues.
Step 4. For each remaining new review, classify sentiment (positive, neutral, negative) and pick a single top theme from this list: pricing, onboarding, performance, reliability, support, feature gap, UX, integrations, value. Also flag churn_risk = true if the review explicitly mentions cancelling, switching, or asking for a refund. Suggest an owning team for each review (CX, Product, Engineering, Growth) based on the theme.
Step 5. Append one row per new review to the Google Sheet using Append Values, with columns: timestamp, site, brand, review_id, rating, title, body, reviewer, posted_date, sentiment, theme, churn_risk, suggested_team, review_url.
Step 6. Post one consolidated Slack digest to the configured channel using Send a Message. Structure it as: a one-line headline with the total count and a star breakdown, then a 'Needs attention' section that lists all 1 to 3 star reviews and anything flagged churn_risk at the top with the quote, rating, source link, and the Linear ticket link from step 7. Below that, group the remaining new reviews by site, then by brand (mine first, competitors after), each entry a one-line summary with rating, theme, and a link. Keep the formatting clean and scannable.
Step 7. For every new review that is 3 stars or lower OR has churn_risk = true, use Linear Create Issue on the configured team. Title: 'Review: <rating>★ <site> — <short title or first 8 words of body>'. Description: include the full review body as a quote block, the reviewer, posted date, sentiment, theme, churn_risk flag, the source URL, and the suggested owning team. Set priority to High when rating <= 2 or churn_risk is true, Medium otherwise. Return the issue URL so step 6 can link to it inline.
Behavior rules. If a site fails to load, skip that site for the run and note it in the digest under a small 'Could not check' footer, but still process the sites that did work. Never re-post a review across runs (dedupe must be honored). Never post an empty digest. Keep the Slack message under Slack's block limits by truncating long review bodies to about 280 characters with a 'read full review' link.
Output: one Slack message, one Google Sheet row per new review, and one Linear issue per low-star or churn-risk review, each run.
Additional information
What does this prompt do?
- Watches your product's review pages on G2, Trustpilot, and Capterra (plus any competitor pages you list) using a single web agent, so you do not need a separate scraper per site.
- Posts one tidy Slack digest to your voice-of-customer channel each morning, grouped by site, with 1 to 3 star reviews pinned to the top.
- Tags each new review with sentiment and a theme like pricing, onboarding, performance, or support, and logs it in a Google Sheet so you can chart trends over time.
- Opens a Linear issue for every low-rated or churn-risk review, complete with the quote, source link, and a suggested owning team, so CX or product can triage it the same morning.
- Stays quiet on days with no new reviews instead of spamming your channel with empty digests.
What do I need to use this?
- A TinyFish account so a web agent can read public review pages on your behalf.
- A Google account with a sheet you want to use as the running review log.
- A Slack workspace with a channel for the digest, like #voice-of-customer.
- A Linear workspace with a team that should receive low-star reviews for triage.
- The list of review URLs you want monitored: your own product pages, and any competitor pages you care about.
How can I customize it?
- Change the schedule. Run it daily, weekday-only, twice a day, or once a week, whatever matches how fast you want to react.
- Add or remove sites. Start with G2, Trustpilot, and Capterra, then layer in the App Store, Play Store, Yelp, Reddit threads, or anywhere your customers actually post.
- Adjust the alert threshold. Default is 3 stars or lower triggers a Linear issue. Tighten it to 2 stars, or widen it to include any review the agent flags as churn risk.
- Route by theme. Send pricing reviews to your growth team, performance reviews to engineering, and onboarding reviews to CX by mapping each theme to a different Linear team.
- Swap the digest destination. Post to a Slack DM, a different channel per region, or skip Slack entirely and rely on Linear plus the spreadsheet.
Frequently asked questions
Do I need separate scrapers for G2, Trustpilot, and Capterra?
How does it avoid posting the same review twice?
What happens on a quiet day with no new reviews?
Can I monitor competitor reviews too?
Will every low-star review really open a Linear issue?
Can I change which Linear team gets the issues?
Stop missing the review that explains your churn.
Connect TinyFish, Google Sheets, Slack, and Linear once, and Geni runs this every weekday morning so the bad reviews land in a ticket before anyone asks about them.