Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
Install the "app-store-review-arbitrage" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/app-store-review-arbitrage into .claude/skills/app-store-review-arbitrage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "app-store-review-arbitrage", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "app-store-review-arbitrage" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/app-store-review-arbitrage into .agents/skills/app-store-review-arbitrage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "app-store-review-arbitrage", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "app-store-review-arbitrage" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/app-store-review-arbitrage into .cursor/skills/app-store-review-arbitrage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "app-store-review-arbitrage", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "app-store-review-arbitrage" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/app-store-review-arbitrage into .gemini/skills/app-store-review-arbitrage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "app-store-review-arbitrage", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "app-store-review-arbitrage" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/app-store-review-arbitrage into .github/skills/app-store-review-arbitrage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "app-store-review-arbitrage", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "app-store-review-arbitrage" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/app-store-review-arbitrage into .opencode/skills/app-store-review-arbitrage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "app-store-review-arbitrage", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
app-store-review-arbitrage
GitHub stars
674
Token cost
~2.8k tokens
SKILL.md length
1,310 words
Files
11 (incl. scripts, references)
Skills in repo
61
Repo updated
First seen
Licence
MIT
At a glance
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
Works in 7 steps: Parse Input and Detect Platform → Collect Reviews & Metadata → Complaint Clustering → …
Tasks that involve App store release
SKILL.md covers Critical Rules (read before…, Step 1 — Parse Input and…, Step 2 — Collect Reviews &… and Step 3 — Complaint Clustering, plus 4 more sections
Runs Python scripts from its folder; calls pip and python3
What it does
App Store Review Arbitrage is an agent skill from Varnan-Tech/opendirectory. Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts and reference files (for example `README.md`, `evals/README.md` and `evals/evals.json`). Compatibility notes: ["claude-code","gemini-cli","github-copilot"]
It sits in Mobile, covering App store release. The repository describes itself as: AI Agent Skills built for Founders who hate Marketing. The licence is MIT.
When your agent uses it
Tasks that involve App store release
Example prompts
“Use the app-store-review-arbitrage skill to fetch low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and…”
Read from SKILL.md and the folder at commit 62e437a. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pip
python3
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Compatibility
["claude-code","gemini-cli","github-copilot"]
From compatibility in the SKILL.md frontmatter.
Context cost
App Store Review Arbitrage loads about 2.8k tokens when it runs, and up to ~7.1k if it reads all its reference files. Until then it costs about 47 tokens; SKILL.md has 1,310 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~47
When it runs· the whole SKILL.md, loaded when a task matches
~2.8k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~7.1k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
Download SKILL.mdSave it as .claude/skills/app-store-review-arbitrage/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
app-store-review-arbitrage
description
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
compatibility
["claude-code","gemini-cli","github-copilot"]
version
1.0.0
app-store-review-arbitrage
Convert a competitor's App Store or Google Play URL into a one-session GTM brief: ranked complaint clusters, a broken promise map, landing page headlines, and ad copy directions — all sourced from verbatim reviews.
Critical Rules (read before Step 1)
These rules apply throughout all steps. Violating any of them fails Self-QA (Step 6).
Every quote must be verbatim. No paraphrase, no grammar correction, no cleaning. Exact reviewer words only.
No fabricated statistics. Do not write "40% faster" or "2× more reliable" unless a reviewer explicitly used similar language. The Self-QA step checks for uncited percentages.
Cluster names must use reviewer language. Study the anti-pattern table in Step 3.
Every headline and ad copy direction must cite its source cluster. Format: [cluster: "cluster-name"].
Section 2 is always present in the output — even when degraded. Never skip or omit it.
No banned words in any generated copy: powerful, robust, seamless, innovative, game-changing, streamline, leverage, revolutionize, transform.
Step 1 — Parse Input and Detect Platform
Accept a natural language prompt containing one app URL. Extract the URL.
Platform detection:
apps.apple.com → App Store
play.google.com/store/apps/details?id= → Google Play
Any other URL → stop and respond: "Please provide a direct App Store or Google Play URL. I can't analyse review data from other sources."
ID extraction (do this before calling the script):
Platform
What to extract
How
App Store
Numeric app_id
Digits after /id in the URL
App Store
country
2-letter code after apps.apple.com/ (e.g., us, gb)
Google Play
package_name
Value of id= query parameter
Persist the extracted values — you will need them for the output filename in Step 7.
If product_context was provided in the user's prompt (what their own product does), store it — used to personalise copy in Step 5.
(Note: Replace {tmpdir} with your operating system's temp directory, e.g., /tmp on macOS/Linux or C:\Temp on Windows).
This fetches both the store description metadata and the reviews.
App Store: iTunes API — free, no auth. App Store reviews are fetched via Apple's public iTunes RSS feed. Some apps return 0 reviews due to Apple's API limitations — in that case the skill continues with available data and logs a warning. Google Play is the primary supported path.
Google Play:google-play-scraper package — free, no auth
If the script fails, read the error from stderr. Common causes:
Package not installed: run pip install google-play-scraper
App not found: verify the URL is a current, live listing
Google Play API error: run pip install --upgrade google-play-scraper and retry
The script will print collection progress to stderr. Wait for it to complete. After completion, read {tmpdir}/asr-raw.json and display the collection summary to the user:
✓ Collected [N] reviews ([N] low-star 1–3★) from [platform]
Date range: [oldest] to [newest]
Package: [iTunes API | google-play-scraper]
Check the exit code:
Exit 0 → collection succeeded, check metadata.store_description. If null: note this — Section 2 will use the degraded state. Proceed to Step 3.
Exit 1 → error (read stderr message, surface it to user, stop)
Gate 1 — Low signal stop: If the script exits with code 2, read the gate_message from {tmpdir}/asr-raw.json and surface it to the user verbatim. Do not proceed to Step 3. Do not produce a partial brief.
Step 3 — Complaint Clustering
Load low_star_reviews from {tmpdir}/asr-raw.json.
Cluster all low-star reviews into 4–6 named complaint themes. Apply this formula to score each review:
complaint_weight = (4 - rating) × recency_factor
recency_factor:
review age ≤ 90 days → 1.0
review age 91–365 days → 0.7
review age > 365 days → 0.4
review age = (today's date) − (review date field) in days.
cluster_score = sum of complaint_weight for all reviews in the cluster.
Cluster naming — critical rule:
You will want to write abstract names. Resist. Use the exact verb and noun from reviews.
❌ Abstracted (wrong)
✅ Reviewer language (correct)
"Stability issues"
"Crashes when exporting to PDF"
"Sync problems"
"Data lost after sync between phone and desktop"
"Monetisation friction"
"Paywall appears after 3 days, not 14 as promised"
"Performance degradation"
"App freezes every time I search"
"Onboarding issues"
"Can't figure out how to invite a teammate"
Rules:
Each review belongs to exactly one cluster (assign to its dominant theme)
Discard any cluster with fewer than 3 reviews — log it as noise
Select 3–4 verbatim quotes per cluster: lowest star rating first, then most recent
Gate 2 — Minimum cluster size: After discarding sub-3-review clusters, check how many clusters remain.
Gate 3 — Low-confidence flag: If fewer than 3 clusters remain:
Do NOT stop. Continue to output.
Prepend this to the brief header immediately after the app metadata:
⚠ LOW CONFIDENCE: Only [N] complaint cluster(s) met the minimum evidence threshold (≥ 3 supporting reviews). Output reflects limited data. Consider a competitor with more reviews, or broaden the rating filter.
Include Medium-tier clusters in the output (score ≥ 5)
Tier classification (for the leaderboard table in Section 1):
Critical: score ≥ 60
High: score 15–59
Medium: score 5–14 (include only when Gate 3 applies)
This is the step that differentiates this skill from every existing tool. It must run as a distinct, named step.
Load:
metadata.store_description from {tmpdir}/asr-raw.json
All clusters from {tmpdir}/asr-clusters.json
If store_description is null: Set store_description_available: false. Write {tmpdir}/asr-promises.json with empty broken_promises array and detection_note as specified below. Proceed to Step 5.
If store description is available:
Extract claims. A claim is any specific, testable assertion about app behavior. See references/broken-promise.md for the full definition and examples. Exclude vague superlatives, team descriptions, and press quotes.
Cross-reference. For each claim, check all cluster names and verbatim quotes. A contradiction exists when the cluster directly documents failure of the promised behavior (minimum 3 reviews).
Produce broken promise records — one per confirmed contradiction:
json
{
"claim_text": "verbatim excerpt from store description",
"complaint_cluster": "exact cluster name",
"gap_label": "Claims X; users report Y",
"evidence_count": 18
}
No description: store_description_available: false, detection_note: "Store description unavailable (fetched YYYY-MM-DD, returned empty). Broken promise comparison cannot be performed."
No contradictions: no_contradictions_found: true, detection_note: "No broken promises detected. Store description does not appear to overclaim relative to complaint clusters."
See references/broken-promise.md for anti-patterns (what NOT to flag).
Step 5 — Generate Copy
Using clusters from Step 3 and broken promises from Step 4, generate Sections 3–5 of the brief.
Copy rules (apply to all three sections):
Every headline and direction must cite its source cluster: [cluster: "cluster-name"]
No fabricated statistics — no percentages or numbers unless a reviewer used them
If product_context was provided: make "Say this" directions specific to that product's features. If not: write as positioning templates the user fills in.
Use reviewer language in headlines — derive from or quote actual review text
Section 3 — Landing Page H1 Bank (3–5 headlines):
Each: "[headline text]" [cluster: "cluster-name"]
≤ 8 words where possible
Address the frustrated user directly
Section 4 — Ad Copy Directions (exactly 3 pairs):
Cluster: [cluster name]
Not that: "[what the competitor claims or a generic weak alternative]"
Say this: "[counter-claim grounded in complaint evidence]"
Evidence: [N] reviewers reported [verbatim complaint summary]
Section 5 — Anti-Claim Warnings:
One warning per broken promise from Step 4
If Section 2 is degraded: single note (see references/brief-format.md for exact wording)
Step 6 — Self-QA
Before saving, verify the generated brief against these checks. If any check fails, fix the specific item and re-verify — do not save a failing brief.
Check
Rule
Verbatim quotes present
Every cluster has ≥ 2 verbatim quotes
No banned words
None of the 9 banned words appear in Sections 3–5
No uncited percentages
Any % in output must trace to a reviewer's actual words
All copy cited
Every headline and "Say this" has a [cluster: "name"] citation
Cluster count ≥ 1
At least one cluster survived Gates 2/3
Section 2 present
Section 2 appears in the output (in any state)
Quote ratings ≤ 3
All verbatim quotes came from 1–3★ reviews
Note on cluster count: The minimum for a passing brief is 1 cluster (not 3). The Gate 3 low-confidence flag handles cases where < 3 clusters survive — that is a warning, not a failure. Self-QA fails only if 0 clusters exist.
Step 7 — Save Output
Assemble the full brief per the format in references/brief-format.md.
Save to:
docs/review-briefs/[app-id]-[YYYY-MM-DD].md
Create the docs/review-briefs/ directory if it does not exist.
Print the full brief to the user.
Clean up temp files: {tmpdir}/asr-raw.json, {tmpdir}/asr-clusters.json, {tmpdir}/asr-promises.json.
App Store Review Arbitrage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
App Store Review Arbitrage compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
App Store Review Arbitrage this skillVarnan-Tech/opendirectory
Generate high-converting App Store screenshots by analyzing your app's codebase, discovering core benefits, and creating ASO-optimized screenshot images using Nano Banana Pro.
Set territory-specific pricing for subscriptions and in-app purchases using current asc setup, pricing summary, price import, and price schedule commands.
Maintain a Docusaurus product manual whose prose, navigation, localized page trees, screenshots, coverage metadata, and release build must stay aligned with the application.
Given a product description, category keywords, or competitor names (any combination), searches Reddit, Hacker News, GitHub Issues, G2, and Google Trends for the real pains your market experiences…
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities. App Store Review Arbitrage is an agent skill from Varnan-Tech/opendirectory. Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
When should I use App Store Review Arbitrage?
App Store Review Arbitrage fits situations like: tasks that involve App store release.
How do I install App Store Review Arbitrage in Claude Code?
Run `npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a claude-code`. Or copy the skill folder (skills/app-store-review-arbitrage in Varnan-Tech/opendirectory) into .claude/skills/app-store-review-arbitrage in your project. Claude Code loads it when a task matches its description.
How do I install App Store Review Arbitrage in Codex?
Run `npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a codex`. Or copy the skill folder (skills/app-store-review-arbitrage in Varnan-Tech/opendirectory) into .agents/skills/app-store-review-arbitrage in your project. Codex loads it when a task matches its description.
Can I use App Store Review Arbitrage in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/app-store-review-arbitrage, .gemini/skills/app-store-review-arbitrage, .github/skills/app-store-review-arbitrage and .opencode/skills/app-store-review-arbitrage in your project.
What does App Store Review Arbitrage need to run?
Going by SKILL.md and its folder, App Store Review Arbitrage needs Python for the scripts in its folder and the command-line tools its instructions call (pip and python3). Our summary lists: Python 3. Compatibility (from SKILL.md): ["claude-code","gemini-cli","github-copilot"].
Does App Store Review Arbitrage access the network?
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Is App Store Review Arbitrage safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
What licence does App Store Review Arbitrage use?
App Store Review Arbitrage is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does App Store Review Arbitrage use?
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.3k tokens, read only when the agent opens those files.
What are the alternatives to App Store Review Arbitrage?
Skills that share tags, products or a category with App Store Review Arbitrage: Aso Appstore Screenshots (adamlyttleapps/claude-skill-aso-appstore-screenshots, 1.8k stars), Asc Ppp Pricing (rorkai/app-store-connect-cli-skills, 1.1k stars), Maintain Docusaurus Manual (matthiasn/lotti, 1.2k stars) and Workbuddy Skin Studio (cdredfox/workbuddy-skin-studio, 198 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains App Store Review Arbitrage?
Varnan-Tech (a GitHub organization) maintains it in Varnan-Tech/opendirectory, which has 674 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on August 16, 2026.
Source: Varnan-Tech/opendirectory on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.