Keyword Metrics by App

KPIs that are specific to a keyword and an app.

👍

Improved Keyword Installs starting July 17, 2025

Starting July 17, 2025, we're updating our keyword installs estimates. This change will make keyword performance trends even more precise, especially when looking at historical data.

Keyword Metrics by App are KPIs that AppTweak has been able to gather or estimate about keywords. See below for a list of available metrics.

Metric nameDescriptionOriginHistorical Data Available?
rankThe position of the queried app in the search result list when a specific keyword is searched for.Gathered directly from the stores
installsNumber of users that search for this keyword and then install the queried appAppTweak estimates
chanceA score between 1 and 100 that indicates how likely your app is to rank in the top 10 search results for the selected keyword.AppTweak-defined KPI
keiKEI (Keyword Efficiency Index): A score that indicates the visibility potential of a keyword, taking into account keyword volume and chance score.AppTweak-defined KPI
relevancyThe relevancy score is an indicator between 0 and 100, indicating how relevant a keyword is for your app. A higher score indicates higher relevancy. The relevancy score is based on the app store ranking algorithm, hence targeting highly relevant keywords ensures that your app shows up when users search for the solution you offer.AppTweak-defined KPI

📘

How are Keyword Installs computed?

Keyword Installs are an estimated number of organic installed received by an app from a keyword. They are based on:

  • current or historical app ranking on a keyword
  • current keyword volume

App Keyword Ranking Current takes into account the today's app ranking and today's keyword volume to provide a keyword install estimation.

App Keyword Ranking Historical takes into account the historical app ranking and today's keyword volume to provide a keyword install estimation. This means that the historical keyword installs may vary if your keyword volume evolve through time. Therefore we recommend fetching data regularly and save it to have a more accurate picture.

This information is exposed through two endpoints:

  • The Current endpoint which returns the latest - most recent - data available
  • The History endpoint which returns the historical daily values over a given period of time

Rules for missing data in historical endpoints

When we don't have historical data for some days, we try to come up with our best estimate for that day. This estimate is exposed in a field called effective_value. It's useful because it's guaranteed to always return a number, so it won't break a dashboard or pipeline you might have built expecting a value every day. The same logic is used in the AppTweak tool itself.

⚠️

effective_value can differ between requests for the same day

effective_value is estimated using the other days within the date range you queried — it never looks outside your start_date/end_date. This means that querying the same day with a wider or narrower range can return a different effective_value for that same day, if it changes which neighboring days are available to estimate from.

If you need a number for a given day that's stable regardless of the range you query, use value instead, and treat null as "no estimate available" rather than defaulting it to 0 yourself.

The exact estimation logic differs slightly by metric — see the examples below.

📘

Ranked, unranked or no data

{
  "date": "2024-03-11",
  "value": null,
  "fetch_performed": true,
  "effective_value": 501
}

To know whether your app is ranked on a keyword or not, you can refer to the following logic in the response data:

  • value = non-null and fetch_performed = true ➔ ranked
  • value = null and fetch_performed = true ➔ unranked
  • value = null and fetch_performed = false ➔ no data

In addition to value, you can useeffective_value, that corresponds to a value that is guaranteed to be non-null. The logic to compute effective_value is:

  • If value is not null, effective_value = value
  • Otherwise
    • If fetch_performed = true, then effective_value = 501, corresponding to the numeric representation of unranked
    • Otherwise
      • If there is at least one non-null value in the date range, take the closest day to the missing day and use that value for the effective_value (use an average if 2 days are at the same distance to the missing day)
      • Otherwise, defaults to 501

📘

Installs & estimates

{
  "date": "2024-03-11",
  "value": null,
  "effective_value": 8234
}

fetch_performedis not returned for installs — it only applies to rank. For installs, value is simply null on any day where we have no ranking data for that keyword (since installs are derived from rank), with no "ranked/unranked" distinction.

The logic to compute effective_value for installs is:

  • If value is not null, effective_value = value
  • Otherwise, look at the other days within the date range you queried. If at least one of them has a non-null value, effective_value is set to the value of the closest such day (averaging the two closest days if they're equidistant).
  • If no day in the queried range has a non-null value, effective_value defaults to 0.

Note: because the neighbor lookup in step 2 only considers days inside the start_date/end_date you queried, effective_value for a given day can differ between two requests that use the same start_date but a different end_date (or vice versa) — widening the range can surface a real data point that a narrower range wouldn't have found. value is unaffected by this and is always the same for a given day regardless of the range queried.