A rank tracker has one job: tell you where your app appeared for a search term, and when. Almost every problem people have with rank tracking comes from tools that quietly do a second job as well — inventing a number when they did not get an answer — without saying which is which.

The three states a rank can be in

There are three genuinely different outcomes when you check a keyword, and collapsing them is where the damage starts.

**Ranked.** The store returned your app at a position. This is a fact with a timestamp.

**Not ranked within the depth searched.** The store returned results, your app was not among them. This is also a fact — but an incomplete one. "Not in the top 50" and "not in the top 200" are different statements. A tool that shows both as "not ranked" has thrown away the difference.

**Not observed.** The check did not complete. The storefront refused the request, the network failed, the job timed out. Nothing was learned.

The third case is the dangerous one. If a tool records a failed check as rank 0, or as "unranked", your history now contains a cliff that never happened. You will spend an afternoon working out what you changed on Tuesday, and the answer is that a request timed out.

**A missing observation must look missing.** Not zero. Not a dash that means zero. Missing.

Why your rank moves when you did nothing

Before you attribute a rank change to anything you did, know the baseline sources of movement:

**Reindexing.** The stores re-evaluate listings on their own schedule. Positions shift as a result of other apps' changes, not yours.

**Competitors.** Every metadata update by an app near you can reorder the block you are in. You are ranked relative to a moving field.

**Personalization and locale.** Results differ by storefront and can differ by device and account state. A rank is a measurement of a specific storefront, not a universal truth. Two people checking the same keyword in the same country can legitimately see different orders.

**Depth truncation.** If your tool searches 50 results today and 200 tomorrow, your app can "appear" without moving at all.

This is why a single observation is nearly worthless and a series is valuable. One check tells you a position. Twenty checks tell you a range, a trend and a noise floor — and only once you know the noise floor can you recognise a signal.

Do not confuse the score with the rank

Most trackers show, next to each keyword, some combination of traffic, difficulty and an overall opportunity number. These are model outputs. They are computed from observations by a formula that the tool's authors chose, and they change when the formula changes — even if nothing in the store moved.

That has a practical consequence people miss: **if your tool updates its scoring model, your historical scores are no longer comparable to your new ones.** Your rank history is still valid, because a rank is an observation. Your difficulty history is not, unless the tool versioned the formula and can tell you which version produced which number.

When you review performance, review ranks. Use scores to decide where to look, never to decide what happened.

Set the tracking cadence to the thing you are measuring

Checking every keyword every hour is mostly a way to buy noise. Store positions do not meaningfully change hour to hour for most apps, and a dense series of near-identical observations makes real movement harder to see, not easier.

Daily is right for most terms. A few times a day is justified around a launch, a feature release or a seasonal peak. Weekly is fine for long-tail terms you are monitoring rather than working on.

What matters far more than frequency is **consistency**: same storefront, same depth, same time of day where possible. A series collected under changing conditions is not a series, it is a pile of unrelated measurements.

Read the trend, not the point

Three questions to ask of a rank history, in order:

**What is the range?** If a term has bounced between 18 and 26 for a month, then a reading of 24 is not a decline. It is Tuesday.

**Has the range moved?** A term that used to oscillate between 30 and 40 and now oscillates between 18 and 25 has genuinely improved, even if today's number is worse than last Thursday's.

**Did anything change, and when?** Metadata changes, version releases, price changes, a competitor's relaunch. Mark them on the timeline. This lets you form a hypothesis. It does not prove one — ASO has no control group, and anyone claiming causal certainty from a rank chart is overreaching.

What "top 10 coverage" actually means

A useful summary metric is the share of your tracked keywords that sit in the top 10 — the positions that get meaningful search traffic on both stores. It is a better health indicator than average rank, because average rank is dragged around by a handful of terms you were never going to win.

But it is only meaningful if the denominator is honest. Coverage over *ranked* keywords and coverage over *all tracked* keywords are different numbers, and a tool that does not say which it is showing you is not telling you much.

The checklist

  • Every stored rank carries store, country, language, search depth and timestamp.
  • A failed check is stored as missing, never as zero and never as "unranked".
  • Scores are versioned, and you can see which observations produced them.
  • You establish a baseline before you change metadata, not after.
  • Changes are marked on the timeline as context, not presented as proven causes.
  • You compare like with like: same storefront, same depth.

Rank tracking is not complicated. It is just unforgiving about bookkeeping — and the tools that feel most confident are usually the ones that have quietly stopped distinguishing what they saw from what they guessed.