App Store and Google Play chart API
App Store and Google Play demand via the Trends API. Android download history plus live iOS and Play charts.
Key: trendsapi.ai/#get-key. HTTP contract and every source: trendsapi-ai/trendsapi.
Authentication
pip install trendsapi-app-store
export TRENDSAPI_KEY=your_key
Python 3.9+. Same key as the HTTP API.
from trendsapi_app_store import TrendsAPI
client = TrendsAPI() # TRENDSAPI_KEY
# client = TrendsAPI(api_key="YOUR_KEY")
Keyword helpers default to source: "app downloads". Pass source= to hit any other platform with the same client. Official full client (every source, no preset): trendsapi.
Methods
source is lowercase (app downloads). type is exact (App Store Top Free). Mixing them is a 400.
from trendsapi_app_store import TrendsAPI
client = TrendsAPI() # TRENDSAPI_KEY
# client = TrendsAPI(api_key="YOUR_KEY")
series = client.get_time_series("com.openai.chatgpt")
print(series[-1].date, series[-1].value)
growth = client.get_growth("com.openai.chatgpt", percent_growth=["3M", "12M"])
print(growth.results[0].growth, growth.results[0].direction)
hot = client.get_live(limit=10)
print(hot.data) # [[1, "..."], ...]
get_time_series
points = client.get_time_series("com.openai.chatgpt")
Each point:
Python returns list[TrendsDataPoint]. Use .date and .value, not ["date"].
JS returns the same fields as object properties.
get_growth
g = client.get_growth("com.openai.chatgpt", percent_growth=["12M", "3M", "YTD"])
print(g.results[0].growth, g.results[0].direction)
percent_growth default: ["12M"]. Presets: 7D 14D 30D 1M 2M 3M 6M 9M 12M/1Y 18M 24M/2Y 36M/3Y 48M 60M/5Y MTD QTD YTD. Custom: {"name": "Launch", "recent": "2024-06-01", "baseline": "2024-01-01"}.
Several windows still count as one request. Python: growth.results[0].growth. JS: growth.results[0].growth.
get_live
hot = client.get_live(limit=10)
Python: hot.data. JS: hot.data. Optional offset= and category= (Amazon Best Sellers by Category, Top Websites only).
Async
import asyncio
from trendsapi_app_store import AsyncTrendsAPI
async def main():
c = AsyncTrendsAPI()
return await asyncio.gather(
c.get_time_series("com.openai.chatgpt"),
c.get_time_series("com.openai.chatgpt", source="google search"),
)
asyncio.run(main())
Each 200 is one billed request.
Pandas
from dataclasses import asdict
import pandas as pd
from trendsapi_app_store import TrendsAPI
df = pd.DataFrame(asdict(p) for p in TrendsAPI().get_time_series("com.openai.chatgpt"))
df["date"] = pd.to_datetime(df["date"])
print(df.set_index("date")["value"].resample("ME").mean().tail())
Call (curl)
curl -sS -X POST https://api.trendsapi.ai/api \
-H "Authorization: Bearer $TRENDSAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"get_time_series","source":"app downloads","keyword":"com.openai.chatgpt"}'
Source notes
chatgptaskeywordis 404. Use the Play Store id.app downloadsis Android history. iOS lists are live feeds only.- Live
typevalues:App Store Top Free,App Store Top Paid,Google Play.
Errors
The HTTP body field is a JSON string. SDKs decode it. Raw curl must parse body a second time.
Site: https://trendsapi.ai/trends/app-store-trends.
License
MIT. See LICENSE.
