AppReviewFetch 1.1.4
dotnet add package AppReviewFetch --version 1.1.4
NuGet\Install-Package AppReviewFetch -Version 1.1.4
<PackageReference Include="AppReviewFetch" Version="1.1.4" />
<PackageVersion Include="AppReviewFetch" Version="1.1.4" />
<PackageReference Include="AppReviewFetch" />
paket add AppReviewFetch --version 1.1.4
#r "nuget: AppReviewFetch, 1.1.4"
#:package AppReviewFetch@1.1.4
#addin nuget:?package=AppReviewFetch&version=1.1.4
#tool nuget:?package=AppReviewFetch&version=1.1.4
AppReviewFetch
A .NET library, CLI tool, and MCP server for fetching app reviews from App Store Connect (with Google Play support in development).
📦 Installation
CLI Tool (Recommended for most users)
dotnet tool install -g AppReviewFetch.Cli
Then run from anywhere:
arfetch
MCP Server (For AI Assistants)
Access your app reviews directly from GitHub Copilot, Claude, and other AI assistants:
dotnet tool install -g AppReviewFetch.Mcp
For configuration instructions, visit: https://github.com/praeclarum/AppReviewFetch/tree/main/AppReviewFetchMcp#readme
Library (For .NET Developers)
dotnet add package AppReviewFetch
Or add to your .csproj:
<PackageReference Include="AppReviewFetch" />
🚀 Quick Start (CLI)
# Install globally
dotnet tool install -g AppReviewFetch.Cli
# Run the interactive REPL
arfetch
# Configure credentials
arfetch> setup
# List your apps
arfetch> list
# Fetch reviews
arfetch> fetch 123456789
Main CLI Commands
| Command | Aliases | Description |
|---|---|---|
setup |
Configure App Store Connect credentials | |
list |
l |
List all apps (excludes hidden) |
fetch <query> [country] |
f |
Fetch reviews (supports app ID, bundle ID, or name) |
help |
h, ? |
Show all commands |
Query Support: Most commands accept flexible queries that can match:
- App ID (e.g.,
123456789) - Bundle/Package ID (e.g.,
com.example.app) - App Name (case-insensitive, partial match)
Examples:
fetch 123456789 # By app ID
fetch com.example.app # By bundle ID
fetch "My App Name" # By name
App Database
AppReviewFetch maintains a local database of apps at:
- Windows:
%LOCALAPPDATA%\AppReviewFetch\Apps.json - macOS/Linux:
~/.config/AppReviewFetch/Apps.json
This database:
- Caches apps from API calls (App Store, Google Play)
- Stores metadata like project URLs and notes
- Supports manual entries for stores that can't list apps (e.g., Google Play)
- Hides removed apps to keep listings clean
Use add-app to manually add apps, edit-app to set project URLs or hide apps, and delete-app to remove entries.
Setup
1. Get App Store Connect API Key
- Go to App Store Connect → Users and Access → Keys → App Store Connect API
- Generate or select an API key
- Note: Key ID, Issuer ID, and download the .p8 file
Required Role: Only Account Holders and Admins can generate API keys.
Required Key Access: When creating the key, assign one of these access levels:
- App Manager - Full app management access (recommended)
- Customer Support - Can view and respond to reviews
- Sales - Can view reviews and analytics
- Admin - Complete access to all features
Note: Developer, Marketing, and Finance roles do NOT have access to customer reviews.
2. Configure Credentials
Run arfetch setup or manually create:
Windows: %LOCALAPPDATA%\AppReviewFetch\Credentials.json
macOS/Linux: ~/.config/AppReviewFetch/Credentials.json
{
"appStoreConnect": {
"keyId": "YOUR_KEY_ID",
"issuerId": "YOUR_ISSUER_ID",
"privateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}
}
Library Usage
Add the package to your project:
dotnet add package AppReviewFetch
Fetch Reviews
using AppReviewFetch;
var service = new AppStoreConnectService();
var request = new ReviewRequest
{
SortOrder = ReviewSortOrder.NewestFirst,
Limit = 100,
Country = "US" // Optional
};
var response = await service.GetReviewsAsync("YOUR_APP_ID", request);
foreach (var review in response.Reviews)
{
Console.WriteLine($"{review.Rating}/5 - {review.Title}");
Console.WriteLine(review.Body);
if (review.DeveloperResponse != null)
Console.WriteLine($"Reply: {review.DeveloperResponse.Body}");
}
List Apps
var apps = await service.GetAppsAsync();
foreach (var app in apps.Apps)
{
Console.WriteLine($"{app.Name} ({app.Id})");
}
Pagination
var allReviews = new List<AppReview>();
var request = new ReviewRequest { Limit = 200 };
string? cursor = null;
do
{
request.Cursor = cursor;
var response = await service.GetReviewsAsync(appId, request);
allReviews.AddRange(response.Reviews);
cursor = response.Pagination.NextCursor;
} while (!string.IsNullOrEmpty(cursor));
Dependency Injection
services.AddHttpClient<IAppReviewService, AppStoreConnectService>();
API Reference
IAppReviewService
Task<ReviewPageResponse> GetReviewsAsync(string appId, ReviewRequest request)Task<AppListResponse> GetAppsAsync()
ReviewRequest
ReviewSortOrder SortOrder- NewestFirst, OldestFirst, HighestRatingFirst, LowestRatingFirst, MostHelpfulstring? Country- ISO 3166-1 alpha-2 country codestring? Cursor- Pagination cursorint Limit- Results per page (default: 100)
AppReview
string Id,int Rating,string? Title,string? Bodystring? ReviewerNickname,DateTimeOffset CreatedDate,string? TerritoryReviewResponse? DeveloperResponse
Exceptions
ApiErrorException- API errors (includes StatusCode, ErrorCode, ErrorDetail)AuthenticationException- JWT authentication issuesCredentialsException- Credentials file problems
Features
- ✅ JWT authentication with automatic token generation
- ✅ List all accessible apps
- ✅ Pagination support
- ✅ Multiple sort orders and territory filtering
- ✅ Developer response support
- ✅ Interface-based (extensible for other stores)
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- System.IdentityModel.Tokens.Jwt (>= 8.15.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.