ASO: History & Alerts

Visibility trend, keyword metrics history, and competitor metadata change events from ASO Studio v2's mirror tables.

Updated 2026-07-03
3 min read

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.

bash
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.

bash
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.

bash
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.