App Ratings API
Retrieve mobile app ratings from Apple App Store and Google Play Store. Track app performance as alternative data for consumer-facing companies.
Endpoint
Section titled “Endpoint”GET /v1/appratings/{market}/{ticker}Authentication
Section titled “Authentication”Requires API key via token query parameter.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
market | string | Yes | Market identifier (e.g., S&P 500, NASDAQ) |
ticker | string | Yes | Stock ticker symbol (e.g., UBER, DASH) |
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
token | string | Yes | Your API key |
dateFrom | string | No | Start date (YYYY-MM-DD) |
dateTo | string | No | End date (YYYY-MM-DD) |
Request
Section titled “Request”curl "https://api.finbrain.tech/v1/appratings/S%26P%20500/UBER?token=YOUR_API_KEY"from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Get as DataFrame (recommended)df = fb.app_ratings.ticker("S&P 500", "UBER", as_dataframe=True)print(df.head())# playStoreScore appStoreScore playStoreRatingsCount appStoreRatingsCount# date# 2024-02-02 4.3 4.7 32500000 15200000# 2024-01-26 4.3 4.7 32400000 15100000
# Get raw JSON responseratings = fb.app_ratings.ticker("S&P 500", "UBER")print(ratings)#include <iostream>#include <string>#include <curl/curl.h>#include <nlohmann/json.hpp>
using json = nlohmann::json;
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) { userp->append((char*)contents, size * nmemb); return size * nmemb;}
json get_app_ratings(const std::string& market, const std::string& ticker, const std::string& api_key) { CURL* curl = curl_easy_init(); std::string response;
if (curl) { char* encoded_market = curl_easy_escape(curl, market.c_str(), 0); std::string url = "https://api.finbrain.tech/v1/appratings/" + std::string(encoded_market) + "/" + ticker + "?token=" + api_key; curl_free(encoded_market);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); curl_easy_perform(curl); curl_easy_cleanup(curl); }
return json::parse(response);}
int main() { auto data = get_app_ratings("S&P 500", "UBER", "YOUR_API_KEY");
for (auto& rating : data["appRatings"]) { std::cout << rating["date"].get<std::string>() << ": " << "Play Store " << rating["playStoreScore"].get<double>() << ", App Store " << rating["appStoreScore"].get<double>() << std::endl; }
return 0;}use reqwest::blocking::Client;use serde::Deserialize;use std::error::Error;
#[derive(Debug, Deserialize)]struct AppRating { date: String, #[serde(rename = "playStoreScore")] play_store_score: f64, #[serde(rename = "playStoreRatingsCount")] play_store_ratings_count: i64, #[serde(rename = "appStoreScore")] app_store_score: f64, #[serde(rename = "appStoreRatingsCount")] app_store_ratings_count: i64,}
#[derive(Debug, Deserialize)]struct AppRatingsResponse { ticker: String, #[serde(rename = "appRatings")] app_ratings: Vec<AppRating>,}
fn get_app_ratings(market: &str, ticker: &str, api_key: &str) -> Result<AppRatingsResponse, Box<dyn Error>> { let url = format!( "https://api.finbrain.tech/v1/appratings/{}/{}?token={}", urlencoding::encode(market), ticker, api_key );
let client = Client::new(); let response: AppRatingsResponse = client.get(&url).send()?.json()?;
Ok(response)}
fn main() -> Result<(), Box<dyn Error>> { let data = get_app_ratings("S&P 500", "UBER", "YOUR_API_KEY")?;
for rating in &data.app_ratings { println!("{}: Play Store {:.1}, App Store {:.1}", rating.date, rating.play_store_score, rating.app_store_score); }
Ok(())}const market = encodeURIComponent("S&P 500");const response = await fetch( `https://api.finbrain.tech/v1/appratings/${market}/UBER?token=YOUR_API_KEY`);const data = await response.json();Response
Section titled “Response”Success Response (200 OK)
Section titled “Success Response (200 OK)”{ "ticker": "AMZN", "name": "Amazon.com Inc", "appRatings": [ { "playStoreScore": 3.75, "playStoreRatingsCount": 567996, "appStoreScore": 4.07, "appStoreRatingsCount": 88533, "playStoreInstallCount": null, "date": "2024-02-02" }, { "playStoreScore": 3.76, "playStoreRatingsCount": 567421, "appStoreScore": 4.07, "appStoreRatingsCount": 88293, "playStoreInstallCount": null, "date": "2024-01-26" }, { "playStoreScore": 3.76, "playStoreRatingsCount": 566931, "appStoreScore": 4.07, "appStoreRatingsCount": 88036, "playStoreInstallCount": null, "date": "2024-01-19" } ]}Response Fields
Section titled “Response Fields”| Field | Type | Description |
|---|---|---|
ticker | string | Stock ticker symbol |
name | string | Company name |
appRatings | array | Array of rating data points (weekly snapshots) |
App Rating Object Fields
Section titled “App Rating Object Fields”| Field | Type | Description |
|---|---|---|
playStoreScore | number | Google Play Store rating (1-5) |
playStoreRatingsCount | integer | Number of Play Store ratings |
appStoreScore | number | iOS App Store rating (1-5) |
appStoreRatingsCount | integer | Number of App Store ratings |
playStoreInstallCount | integer/null | Play Store install count (may be null) |
date | string | Date of the snapshot (YYYY-MM-DD) |
Interpretation
Section titled “Interpretation”| Rating | Quality |
|---|---|
| 4.5 - 5.0 | Excellent |
| 4.0 - 4.5 | Good |
| 3.5 - 4.0 | Average |
| 3.0 - 3.5 | Below average |
| < 3.0 | Poor |
Errors
Section titled “Errors”| Code | Error | Description |
|---|---|---|
| 400 | Bad Request | Invalid market or ticker |
| 401 | Unauthorized | Invalid or missing API key |
| 404 | Not Found | Ticker not found |
| 500 | Internal Server Error | Server-side error |
Related
Section titled “Related”- App Ratings Dataset - Use cases and analysis examples
- LinkedIn Data - Employee metrics
- Sentiments - News sentiment