app-store-review-arbitrage
This file documents the complaint scoring formula used in Step 4 of SKILL.md. The formula is applied by the LLM during clustering — not by the fetch script. The script provides raw normalized reviews; the LLM applies this formula to score and rank them.
Complaint Weight Formula (v1 — 2-axis)
Severity axis: (4 - rating)
A 1-star review is 3× more signal than a 3-star review. This reflects the real-world distribution: 1-star reviews describe acute failures, 3-star reviews describe friction or missing features.
Recency axis: recency_factor
How to compute
days_old: (today's date) − (review date) in days. Use the date field from the normalized schema (YYYY-MM-DD).
Maximum per-review weight
3 × 1.0 = 3.0 — a 1-star review posted within the last 90 days.
Cluster Score
cluster_score descending. The top cluster is the strongest ad copy opportunity.
Score Tiers
Gate 3 rule: If Gate 2 (minimum 3 reviews per cluster) leaves fewer than 3 clusters at High tier or above, include Medium-tier clusters and prepend the low-confidence flag to the brief header.
Worked Example
Setup: A productivity app with 40 low-star reviews split into three complaint themes. Cluster A — “Crashes when exporting to PDF”- 18 reviews: 12 at 1★ (< 90 days), 6 at 2★ (< 90 days)
- Weight: (12 × 3×1.0) + (6 × 2×1.0) = 36 + 12 = 48 → High tier
- 14 reviews: 8 at 1★ (< 90 days), 4 at 1★ (91–365 days), 2 at 2★ (> 365 days)
- Weight: (8×3×1.0) + (4×3×0.7) + (2×2×0.4) = 24 + 8.4 + 1.6 = 34 → High tier
- 6 reviews: 5 at 1★ (< 90 days), 1 at 2★ (< 90 days)
- Weight: (5×3×1.0) + (1×2×1.0) = 15 + 2 = 17 → High tier
- 2 reviews: 2 at 3★ (< 90 days)
- Weight: (2×1×1.0) = 2 → Noise (discard)
v2 Upgrade Path (3-axis formula)
WhenthumbsUpCount data becomes available from App Store sources, upgrade to:
ln= natural logarithm (Python:math.log)helpful_votes=thumbsUpCount(Google Play) or equivalent when available- A review with 0 helpful votes: vote factor = 1.0 (no change)
- A review with 9 helpful votes: vote factor = 1 + ln(10) ≈ 3.30
Implementation Note
The LLM must:- Compute
complaint_weightfor each low-star review individually - Assign each review to exactly one cluster
- Sum weights within each cluster to get
cluster_score - Rank clusters by
cluster_scoredescending - Apply tier classification per the table above
- Write cluster scores into
/tmp/asr-clusters.json
rating and date fields in the normalized schema, which are the only inputs to this formula.
