skills/app-store-reviews/SKILL.md
App Store review analysis, competitor intelligence, and automated response generation for iOS/macOS apps. Use this skill when working with Apple App Store reviews for any of these tasks: (1) Fetching and analyzing customer reviews for your own apps via the App Store Connect API, (2) Fetching competitor app reviews via the public RSS feed or iTunes Search API, (3) Performing sentiment analysis, theme extraction, or bug/feature-request categorization on reviews, (4) Generating context-aware developer replies to customer reviews, (5) Comparing ratings, review sentiment, or feature gaps across competing apps, (6) Tracking rating trends and review volume over time, (7) Producing executive summaries or actionable insight reports from review data, (8) Searching the App Store for apps by name or category, (9) Setting up app-specific reply configurations through an interactive onboarding interview that auto-detects patterns from existing responses.
npx skillsauth add onatcipli/skills app-store-reviewsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Analyze App Store reviews, generate intelligent replies, and extract competitive insights using Apple's public and private APIs.
Before generating replies, run the onboarding process to create an app-specific configuration file. This ensures replies match your brand voice consistently.
Fetch existing responses (if available):
GET /v1/apps/{appId}/customerReviews?include=response&limit=100
Auto-detect patterns from existing replies:
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:
See onboarding-interview.md for full question list.
Generate config file:
{app-name}-review-config.mdThe onboarding process generates a markdown configuration file following the template in app-config-template.md.
Users can update their configuration at any time:
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:
GET /v1/apps/{appId}/customerReviews
sort=-createdDate for newest firstfilter[rating]=1,2 to focus on negative reviewsfilter[territory]=USA for a specific countrylimit=200 and paginate via links.nextGET /v1/apps/{appId}/appStoreVersions, then query
GET /v1/appStoreVersions/{versionId}/customerReviewsGET https://itunes.apple.com/search?term={name}&media=softwaretrackId from resultsGET https://itunes.apple.com/{country}/rss/customerreviews/page={1-10}/id={trackId}/sortby=mostrecent/json
us, gb, de, fr, jp, au, ca, br, kr, cnfeed.entry[] — fields: im:rating.label, title.label, content.label, author.name.label, im:version.labelGenerate context-aware, professional developer responses to customer reviews.
Before generating replies, check if an app configuration file exists:
{app-name}-review-config.mdWhen a config file is available, apply these settings:
| 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 |
{app-name}-review-config.mdPOST /v1/customerReviewResponses (private API only)Build a competitive analysis comparing your app with competitors.
Perform deep analysis on a set of collected reviews. See analysis-prompts.md for detailed prompt patterns.
Categorize every review into one or more themes:
For each theme, track: count, average rating, representative quotes, trend direction.
Classify each review as: positive, neutral, negative, mixed.
Use the following signals:
From the analyzed reviews, extract:
Generate a concise report for stakeholders.
## 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. ...
Track how ratings change over time.
sort=createdDate to get chronological orderim:version from RSS or version endpoint from private API)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")
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)
| 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 |
| 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.
| 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 |
tools
A native-first SwiftUI design language for building consistent, premium iOS app UI — a dark-first, image-forward, softly-rounded aesthetic (inspired by apps like Luma) expressed almost entirely through native SwiftUI components. Use this skill for any UI/UX work in a SwiftUI/iOS project: (1) Building new screens, views, or components, (2) Redesigning or restyling existing screens, (3) Refactoring ad-hoc styling into reusable design tokens, (4) Reviewing UI for visual consistency, (5) Implementing dark interfaces with materials/Liquid Glass, navigation stacks, tab views, lists, toolbars, buttons, search, sheets, empty states, hero headers, chips, and avatar groups. The guiding rule is NATIVE FIRST: reach for built-in SwiftUI components and modifiers before writing any custom view, and only build a custom component when the platform genuinely can't express the design. Trigger when the user mentions UI, design, styling, layout, theming, redesign, restyle, refactor the UI, design consistency, or "make it look good/premium/like Luma" in any SwiftUI/iOS project.
tools
App Store screenshot research, competitor analysis, building, and upload tool for iOS/macOS apps. Use this skill when working with App Store screenshots for any of these tasks: (1) Finding and analyzing competitor screenshots in your category, (2) Downloading competitor screenshots locally for reference, (3) Analyzing screenshot strategies (styles, captions, features), (4) Researching ASO keywords for screenshot captions, (5) Planning your screenshot sequence and messaging, (6) Building screenshots using an HTML/CSS export tool, (7) Generating a local preview website to view and compare screenshots, (8) Exporting screenshots at correct dimensions via browser or Puppeteer, (9) Localizing screenshots for multiple App Store locales, (10) Uploading screenshots to App Store Connect via API.
development
Price localization intelligence for iOS/macOS apps using purchasing power parity analysis. Use this skill when working with App Store pricing for any of these tasks: (1) Building a "Price Index" by analyzing reference app prices across territories, (2) Comparing your app's pricing against PPP-adjusted benchmarks, (3) Generating localized price recommendations based on economic data, (4) Automating price updates via App Store Connect API, (5) Analyzing competitor pricing strategies across markets, (6) Identifying overpriced/underpriced territories hurting conversions or revenue, (7) Creating pricing health reports with actionable recommendations.
development
App Store Optimization and metadata localization for iOS/macOS apps. Use this skill when working with App Store metadata for any of these tasks: (1) Analyzing current app metadata health (character usage, missing localizations), (2) Keyword research and optimization across locales, (3) Translating and localizing metadata to 38+ languages, (4) Implementing cross-localization strategies to maximize keyword coverage, (5) Bulk updating metadata via App Store Connect API, (6) Competitor ASO analysis and keyword gap identification, (7) Generating optimized titles, subtitles, keywords, and descriptions, (8) Auditing metadata for ASO best practices compliance.