ASO: History & Alerts
Visibility trend, keyword metrics history, and competitor metadata change events from ASO Studio v2's mirror tables.
ASO Studio v2 stores daily history for project-level visibility, per-keyword popularity/difficulty/volume, and detected metadata changes for your app and tracked competitors. These endpoints expose that history for charting and analysis outside the Forvibe UI.
Visibility history
Daily aggregate visibility score for a project, optionally filtered to a store and country. Each point includes keywords tracked, keywords ranked, top-10 count, average rank, and share of voice for that day.
GET /api/v1/projects/:projectId/aso/visibility?store_type=appstore&country=US&days=90
# Scope: aso:read
# Returns: { data: { window_days, count, data: [
# { store_type, country, snapshot_date, visibility_score, keywords_total,
# keywords_ranked, top10_count, avg_rank, share_of_voice }, ...
# ] } }Keyword metrics history
Daily popularity, difficulty, and search-volume points for a tracked keyword, distinct from the rank history returned by the rankings endpoint. Ownership is resolved through the keyword the same way as the rankings and competitor-trajectory endpoints.
GET /api/v1/keywords/:keywordId/metrics-history?days=90
# Scope: aso:read
# Returns: { data: { tracked_keyword_id, window_days, count, data: [
# { metric_date, popularity, popularity_source, difficulty, search_volume }, ...
# ] } }Competitor metadata events
Detected metadata changes (title, subtitle, description, icon, price, and more) for a tracked competitor's app, newest first. The competitor row is resolved first to find its app_id and country, scope-checked against your organization, then events are filtered to that app.
GET /api/v1/competitors/:competitorId/metadata-events?days=90&limit=100
# Scope: aso:read
# Returns: { data: { competitor_id, app_id, country, window_days, count, data: [
# { store_type, country, app_id, is_own_app, event_date, field, old_value, new_value, details }, ...
# ] } }All three endpoints accept days between 1 and 365 (default 90). metadata-events also accepts limit between 1 and 500 (default 100). Response envelopes follow the standard v1 shape: data.data is the array, data.count is its length.