ASO: Keywords
Track keywords, pull daily ranking history + deltas, competitor trajectory, visibility score, suggestions, and digest settings.
Updated 2026-06-21
3 min read
Keywords are tracked per project + store + country. Tracking enrolls the keyword in Forvibe's periodic ranking capture so you can chart movement over time.
List tracked keywords
bash
GET /api/v1/projects/:projectId/keywords?store_type=appstore&country=US
# Scope: aso:readTrack a new keyword
bash
POST /api/v1/projects/:projectId/keywords
Content-Type: application/json
{
"store_type": "appstore",
"keyword": "focus timer",
"country": "US",
"language": "en",
"search_volume": 65,
"difficulty": 40
}
# Scope: aso:write
# 409 DUPLICATE if the same (project, store, country, keyword) already existsUntrack a keyword
bash
DELETE /api/v1/keywords/:keywordId
# Scope: aso:write
# Returns: 204 No ContentRanking history
bash
GET /api/v1/keywords/:keywordId/rankings?days=30
# Scope: aso:read
# Returns: { data: { tracked_keyword_id, keyword, store_type, country, window_days,
# points: [{ snapshot_date, rank_position, rank_delta }, ...] } }
# rank_delta = previous_day_rank - rank (positive = improved)Rankings overview (latest + change)
bash
GET /api/v1/projects/:projectId/keyword-rankings?store_type=appstore&country=US
# Scope: aso:read
# Returns: { data: [{ id, keyword, current_rank, rank_delta, best_rank, ... }, ...] }Competitor trajectory
bash
GET /api/v1/keywords/:keywordId/competitor-trajectory?days=30
# Scope: aso:read
# Returns: { data: { keyword, own: [{snapshot_date, rank_position}], competitors: [{app_id, app_name, points}] } }Optimization (visibility + metadata audit)
bash
GET /api/v1/projects/:projectId/optimization?store_type=appstore&country=US
# Scope: aso:read
# Returns: { data: { visibility: {score, status, trend}, summary: {keep, monitor, drop},
# indexed: [{keyword, rank, verdict, reason}], opportunities: [...] } }Suggestions (weekly, credit-free)
bash
GET /api/v1/projects/:projectId/suggestions?store_type=appstore&country=US
# Scope: aso:read
# Returns: { data: { keywords: [{keyword, reason}], competitors: [{app_id, app_name, reason}], generatedAt } }
# Pre-computed weekly from a deep store-listing analysis. Never consumes credits.Daily digest settings
bash
GET /api/v1/projects/:projectId/notification-settings
# Scope: aso:read
PUT /api/v1/projects/:projectId/notification-settings
Content-Type: application/json
{
"enabled": true,
"frequency": "daily",
"send_hour_local": 9,
"timezone": "Europe/Istanbul"
}
# Scope: aso:write