app-store-reviews
npx skills add https://github.com/onatcipli/skills --skill app-store-reviews
Agent 安装分布
Skill 文档
App Store Reviews
Analyze App Store reviews, generate intelligent replies, and extract competitive insights using Apple’s public and private APIs.
Workflow 0 â App Setup & Onboarding
Before generating replies, run the onboarding process to create an app-specific configuration file. This ensures replies match your brand voice consistently.
Quick Start
- Ask the user: “Would you like to set up reply preferences for your app?”
- If yes, proceed with onboarding
- If a config file already exists, ask if they want to update it
Onboarding Steps
-
Fetch existing responses (if available):
GET /v1/apps/{appId}/customerReviews?include=response&limit=100 -
Auto-detect patterns from existing replies:
- Greeting style (“Hi {name},” vs “Hello!”)
- Sign-off (“â The Team” vs none)
- Tone (formal vs casual)
- Emoji usage
- Support email/URLs
- Common phrases
-
Present findings to user:
"I analyzed {n} existing replies and detected these patterns: - Tone: {detected_tone} - Sign-off: {detected_signoff} - Emoji usage: {detected_emoji} Would you like to use these as defaults?" -
Conduct interview with smart defaults:
- App identity (name, description, support email)
- Brand voice (tone, emoji, sign-off)
- Reply policies (escalation, restricted topics)
- Language support
See onboarding-interview.md for full question list.
-
Generate config file:
- Create
{app-name}-review-config.md - Save to user’s preferred location
- Confirm file location
- Create
Output
The onboarding process generates a markdown configuration file following the template in app-config-template.md.
Re-running Setup
Users can update their configuration at any time:
- Update specific settings
- Start fresh with new configuration
- Keep existing and continue
API Access Tiers
ReviewCat works with two tiers of Apple endpoints:
| Tier | Auth | Scope | Reference |
|---|---|---|---|
| Public | None | Any app (read-only reviews, search, lookup) | See apple-endpoints.md §1 |
| Private | JWT (App Store Connect) | Your own apps (full CRUD on reviews + responses) | See apple-endpoints.md §2 |
Choose the tier based on the task:
- Own app â prefer Private API (more data, filtering, responses, summarizations)
- Competitor app â must use Public API (RSS feed, iTunes Search)
- Quick lookup / no auth available â Public API
Workflow 1 â Fetch & Analyze Own App Reviews
- Generate a JWT token (see apple-endpoints.md §2.1)
- Fetch reviews:
GET /v1/apps/{appId}/customerReviews- Use
sort=-createdDatefor newest first - Use
filter[rating]=1,2to focus on negative reviews - Use
filter[territory]=USAfor a specific country - Set
limit=200and paginate vialinks.next
- Use
- For version-specific reviews, first list versions with
GET /v1/apps/{appId}/appStoreVersions, then queryGET /v1/appStoreVersions/{versionId}/customerReviews - Run analysis on collected reviews (see Workflow 5)
Workflow 2 â Fetch Competitor Reviews
- Search for competitor:
GET https://itunes.apple.com/search?term={name}&media=software - Extract
trackIdfrom results - Fetch reviews via RSS:
GET https://itunes.apple.com/{country}/rss/customerreviews/page={1-10}/id={trackId}/sortby=mostrecent/json - Loop pages 1â10 (max 500 reviews per country)
- For multi-country analysis, iterate over country codes:
us,gb,de,fr,jp,au,ca,br,kr,cn - Parse entries from
feed.entry[]â fields:im:rating.label,title.label,content.label,author.name.label,im:version.label
Workflow 3 â Generate Replies to Reviews
Generate context-aware, professional developer responses to customer reviews.
Pre-requisite: App Configuration
Before generating replies, check if an app configuration file exists:
- If config exists: Load settings from
{app-name}-review-config.md - If no config: Prompt user to run Workflow 0 first, or proceed with default settings
When a config file is available, apply these settings:
- Brand voice: Tone, emoji usage, sign-off style
- Preferred phrases: Use configured phrases where appropriate
- Avoided phrases: Never use words/phrases marked as restricted
- Policies: Follow escalation rules and restricted topics
- Language: Match supported language preferences
Reply Strategy
| Rating | Tone | Strategy |
|---|---|---|
| 1â2 stars | Empathetic, solution-focused | Acknowledge frustration, offer fix/workaround, invite follow-up |
| 3 stars | Grateful, improvement-oriented | Thank for feedback, highlight upcoming improvements |
| 4â5 stars | Warm, brief | Thank the user, reinforce positive experience |
Instructions
- Load app config (if available) from
{app-name}-review-config.md - Read the review’s rating, title, body, and territory
- Identify the core issue or sentiment
- Check if topic is restricted (redirect to support if so)
- Select reply strategy based on rating + config policies
- Draft response following:
- App config settings (tone, phrases, emoji, sign-off)
- Patterns in reply-templates.md
- Validate reply against config constraints:
- No restricted topics mentioned
- No avoided phrases used
- Correct sign-off applied
- Length within config preference
- Post via
POST /v1/customerReviewResponses(private API only)
Constraints
- Max response length: 5,970 characters (Apple’s limit)
- Do NOT include personal information, legal promises, or pricing details
- Always be professional â never argue or be defensive
- Reference specific issues the user raised to show the reply is not generic
- For non-English reviews, respond in the same language as the review
- Follow all policies defined in app config file
Workflow 4 â Competitor Comparison
Build a competitive analysis comparing your app with competitors.
- Fetch your app’s reviews (Workflow 1) and competitor reviews (Workflow 2)
- For each app, compute:
- Average rating (overall + per version)
- Rating distribution (count per star)
- Sentiment score â ratio of positive (4â5) to negative (1â2) reviews
- Review velocity â reviews per week/month
- Run theme extraction on each app’s reviews (see Workflow 5)
- Identify:
- Your strengths â themes praised in your reviews but criticized in competitors
- Your gaps â themes praised in competitors but criticized in your reviews
- Common pain points â negative themes shared across all apps
- Feature requests â features users ask for across all apps
- Output a structured comparison report (see analysis-prompts.md §competitor-report)
Workflow 5 â Analyze Reviews
Perform deep analysis on a set of collected reviews. See analysis-prompts.md for detailed prompt patterns.
Theme Extraction
Categorize every review into one or more themes:
- Bug report â crashes, errors, broken features
- Feature request â missing functionality users want
- UX complaint â confusing UI, poor navigation, design issues
- Performance â slow, battery drain, storage usage
- Pricing â subscription cost, value perception, payment issues
- Praise â positive feedback on specific features
- Support â customer service experience
For each theme, track: count, average rating, representative quotes, trend direction.
Sentiment Analysis
Classify each review as: positive, neutral, negative, mixed.
Use the following signals:
- Rating (primary signal): 1â2 = negative, 3 = neutral/mixed, 4â5 = positive
- Body text sentiment (secondary signal): override rating when text clearly contradicts it (e.g., 5-star review that says “app is terrible but I accidentally tapped 5 stars”)
Actionable Insights
From the analyzed reviews, extract:
- Top 5 issues â most mentioned negative themes, sorted by frequency
- Top 5 praised features â most mentioned positive themes
- Trending issues â themes increasing in frequency over recent reviews
- Quick wins â issues that appear fixable and are frequently mentioned
- Feature demand â requested features ranked by mention count
Workflow 6 â Executive Summary Report
Generate a concise report for stakeholders.
Report Structure
## Review Summary â {App Name} â {Date Range}
### Key Metrics
- Total reviews: {n}
- Average rating: {x.x}/5
- Rating distribution: â
5: {n} | â
4: {n} | â
3: {n} | â
2: {n} | â
1: {n}
- Sentiment: {x}% positive, {x}% neutral, {x}% negative
### Top Issues
1. {Issue} â {count} mentions â "{representative quote}"
2. ...
### Top Praise
1. {Feature} â {count} mentions â "{representative quote}"
2. ...
### Trending
- â Increasing: {themes getting worse}
- â Decreasing: {themes improving}
### Recommendations
1. {Actionable recommendation based on data}
2. ...
Workflow 7 â Rating Trend Monitoring
Track how ratings change over time.
- Fetch reviews with
sort=createdDateto get chronological order - Group reviews by time period (day/week/month)
- Compute per-period: average rating, review count, sentiment ratio
- Identify inflection points â sudden drops/spikes in rating
- Correlate with app version releases (use
im:versionfrom RSS or version endpoint from private API) - Flag anomalies: rating drop > 0.5 stars, negative review spike > 2x average
Pagination Reference
Private API (App Store Connect)
Cursor-based. Follow links.next URL until absent:
url = f"https://api.appstoreconnect.apple.com/v1/apps/{app_id}/customerReviews?limit=200&sort=-createdDate"
all_reviews = []
while url:
resp = requests.get(url, headers={"Authorization": f"Bearer {token}"})
data = resp.json()
all_reviews.extend(data["data"])
url = data.get("links", {}).get("next")
Public API (RSS Feed)
Page-based. Iterate pages 1â10:
for page in range(1, 11):
url = f"https://itunes.apple.com/{country}/rss/customerreviews/page={page}/id={app_id}/sortby=mostrecent/json"
resp = requests.get(url)
entries = resp.json().get("feed", {}).get("entry", [])
if not entries:
break
all_reviews.extend(entries)
Rate Limits
| Endpoint | Limit | Backoff Strategy |
|---|---|---|
| App Store Connect API | Undocumented â use moderate pace | Exponential backoff on 429/503 |
| iTunes Search / Lookup | ~20 req/min | Wait 3s between calls |
| RSS Feed | Undocumented â can get 403 | Wait 5s between country iterations |
Quick Reference â Endpoint Cheat Sheet
| Task | Method | Endpoint | Auth |
|---|---|---|---|
| Search apps | GET | itunes.apple.com/search?term=...&media=software |
Public |
| Lookup app | GET | itunes.apple.com/lookup?id=... |
Public |
| Public reviews | GET | itunes.apple.com/{cc}/rss/customerreviews/page={p}/id={id}/sortby=mostrecent/json |
Public |
| List reviews | GET | /v1/apps/{id}/customerReviews |
JWT |
| Version reviews | GET | /v1/appStoreVersions/{id}/customerReviews |
JWT |
| Single review | GET | /v1/customerReviews/{id} |
JWT |
| Get response | GET | /v1/customerReviews/{id}/response |
JWT |
| Post response | POST | /v1/customerReviewResponses |
JWT |
| Delete response | DELETE | /v1/customerReviewResponses/{id} |
JWT |
| Summarizations | GET | /v1/apps/{id}/customerReviewSummarizations |
JWT |
| List versions | GET | /v1/apps/{id}/appStoreVersions |
JWT |
For full endpoint details, parameters, and authentication setup, see apple-endpoints.md.
Reference Files
| File | Purpose |
|---|---|
| apple-endpoints.md | API endpoint details, authentication, parameters |
| analysis-prompts.md | Prompt patterns for review analysis |
| reply-templates.md | Reply templates by rating and issue type |
| onboarding-interview.md | Interview questions and auto-detection logic |
| app-config-template.md | Template for app-specific config files |