SaaS Churn Signal 📉 (competitor win-back intel)
Pricing
from $35.00 / 1,000 competitor signals
SaaS Churn Signal 📉 (competitor win-back intel)
Find where a competitor's customers are unhappy and what that competitor now charges. Negative-review themes (price, support, reliability, missing features, migration) from Capterra, the App Store and Google Play, joined to live pricing-page changes, one signal row per competitor.
Pricing
from $35.00 / 1,000 competitor signals
Rating
0.0
(0)
Developer
Tagada Data
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
SaaS Churn Signal
Find where a competitor's customers are unhappy, and what that competitor now charges. Point this actor at a competitor and it pulls their recent reviews from Capterra, the Apple App Store and Google Play, sorts the negative ones into the five reasons customers actually leave a SaaS product (price, support, reliability, missing features, migration), and joins that to their live pricing plans and any price change since your last run. You get one signal row per competitor: the churn themes ranked, sample quotes, review volume and its trend, the current plans and the last price move. It is a win-back and displacement brief, not a review dump.
No LLM, no API key, no browser. The classification is a transparent keyword heuristic, so it costs nothing per review and gives the same answer every time.
Who uses this
- Competitive intelligence and product marketing teams building displacement battlecards: which pain points to lead with, and whether the rival just raised prices.
- Sales teams running win-back and competitive deals who want the specific complaint themes and quotes to use against an incumbent.
- Founders and product managers watching where a rival's customers are frustrated, and how the rival is repricing in response.
What you get
One signal row per competitor, plus the underlying review and pricing
rows behind it, all in the same dataset (tell them apart by recordType).
signal row
| Field | Description |
|---|---|
competitor | The competitor this signal is about |
reviewVolume / reviewsInWindow | Reviews pulled, and how many fall in the trend window |
negativeReviews / negativeShare | Count and share of negative (1-2 star) reviews |
averageRating / averageRatingNegative | Mean rating over all, and over the negative tail |
volumeTrend | recent vs prior window counts, direction (up/down/flat) and pctChange |
topChurnThemes | Ranked themes, each with negativeReviews, share and up to three sample quotes |
churnThemeCounts | Raw count per theme (price, support, reliability, missing-feature, migration) |
currentPlans | The competitor's current plan names and prices |
lastPriceChange | The most recent structured pricing change, or null if none since last run |
sourcesOk / sourcesFailed / partial / status | Exactly which sources answered, and a plain-language status line |
review row
Each underlying review with source, rating, negative, its matched
churnThemes and primaryTheme, the date, text and a link back.
pricing row
The pricing snapshot: plans (name, price, period, per-user, features),
priceTokens, parseStatus, whether it is the isBaseline capture, and
priceChanges versus the previous run.
How the churn themes work
Each negative review's text is scanned for the language customers use when they are about to leave:
- price — expensive, overpriced, price increase, billing, value for money
- support — unresponsive support, no reply, slow response, poor service
- reliability — bugs, crashes, downtime, slow, sync errors, data loss
- missing-feature — lacks, no option to, limited, cannot, wish it had
- migration — switching, cancelling, exporting data, looking at alternatives
A review can match several themes, and one that matches none is counted under
other. A review counts as negative at 1-2 stars. The themes, volume and trend
on the signal row are always computed from every review pulled, even when you
choose to only keep the negative ones in the output.
Input examples
Watch one competitor across every source (the prefill):
{"competitors": [{"name": "Slack","capterraUrl": "https://www.capterra.com/p/135003/Slack/reviews/","appStoreId": "618783545","playAppId": "com.Slack","pricingUrl": "https://slack.com/pricing"}]}
Compare several competitors, reviews only, over a 90-day trend window:
{"competitors": [{ "name": "Asana", "capterraUrl": "https://www.capterra.com/p/136446/Asana/reviews/", "pricingUrl": "https://asana.com/pricing" },{ "name": "Monday.com", "playAppId": "com.monday.monday", "pricingUrl": "https://monday.com/pricing" }],"reviewsPerSource": 100,"negativeOnly": true,"sinceDays": 90}
You do not need all four handles. Supply the sources you have, and each one you supply is pulled and joined.
Tracking price changes over time
The pricing side remembers each pricing page's last state between runs. The
first time it sees a page it records a baseline; every run after that reports
what changed (a price moved, a plan appeared or disappeared, a feature was added
to a tier) on the pricing row and as lastPriceChange on the signal. Schedule
the actor and you get a running churn-and-pricing feed on your competitors.
Pricing
Pay per event, platform usage included, no subscription. Higher Apify plans get automatic discounts. The valued unit is the joined signal per competitor; the underlying rows are billed cheaply.
| Event | Price | When |
|---|---|---|
| Run started | $0.001 | Flat, once per run |
| Competitor signal | $0.05 | Per competitor summary produced (the joined judgement) |
| Review scraped | $2.00 per 1,000 | Per underlying review row kept |
| Pricing snapshot | $0.01 | Per pricing page captured this run |
A source that is blocked or empty is never billed; the signal row says which sources answered.
FAQ
Does it use AI to read the reviews? No. Themes come from a transparent
keyword heuristic, which is why it is free per review and deterministic. It is
deliberately simple: a review can be tagged with several themes, and a genuinely
off-topic complaint may land under other.
What counts as a negative review? One to two stars. The signal's themes are drawn from those, while volume, trend and average rating use every review pulled.
Do I need an API key or a login? No. Every source is read from its own public endpoint.
How far back does it read? As far as "Max reviews per source" allows, newest first. The trend window is a separate setting and only controls the recency comparison on the signal row.
A source returned nothing, did the run fail? No. If a source is blocked or has no reviews, the signal row still ships with an explicit status saying which source did not answer, so a partial answer never looks like a complete one.
Can I feed it a list from another scraper? Yes. Competitor entries are matched by common field names (company, name, packageName, pricing and so on), so piping another dataset in usually works without reshaping it.
Competitor churn analysis, SaaS win-back intelligence, negative review themes, Capterra reviews, App Store reviews, Google Play reviews, competitor pricing changes, displacement battlecards, churn risk signals, competitive intelligence, customer complaint analysis, review sentiment by theme.
