ASO Rank Tracker with History — App Store & Google Play
Pricing
$2.00 / 1,000 ranking rows
ASO Rank Tracker with History — App Store & Google Play
ASO keyword rank tracking for the App Store and Google Play across 60+ storefronts. Each row carries yesterday position, 1-day and 7-day deltas, 30-day best/worst and a trend — no dataset joins. A failed check is never reported as a rank drop. Pay-per-use alternative to AppTweak and AppFollow.
Pricing
$2.00 / 1,000 ranking rows
Rating
0.0
(0)
Developer
Anton DataScout
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
📈 ASO Rank Tracker with History — App Store & Google Play
Where does your app rank for a keyword today — and did it move since yesterday?
Keyword rank tracking and App Store Optimization (ASO) monitoring for iOS and Android, across 60+ country storefronts, priced per use instead of per seat.
Most rank scrapers hand you a fresh snapshot every run and leave you to join yesterday's dataset with today's in a spreadsheet. This Actor keeps the history itself. Every row already carries yesterday's position, the 1-day and 7-day change, the 30-day best and worst, and a trend — nothing to merge, nothing to compute.
Built by an indie iOS developer who tracks his own portfolio with it daily.
Why this one
🧮 History is included, not homework. Run it on a schedule and the series builds itself in a named store that survives runs. Row two of your very first week already answers "am I going up or down?"
🛡 A failed check is never reported as a rank drop. This is the whole point. When a request degrades — bad node, rate limit, timeout — most trackers write "not ranked" and your chart shows a cliff that never happened. Here every measurement is one of three honest states:
rankStatus | Meaning | Written to history? |
|---|---|---|
ranked | found at a real position | yes |
not-in-results | search returned normally, app wasn't in it | yes |
check-failed | the check itself failed after 3 rotated retries | never |
A broken check leaves the series untouched, so your trend line stays truthful instead of gaining a phantom crash.
📏 Honest depth. Apple serves up to ~200 results per search; Google Play caps far lower — around 28. Claiming "out of top 200" on both stores would be false on half your rows, so every row reports checkedDepth — how deep this specific check actually reached.
🏷 Rows stay identifiable when you drop out. The app's name, developer and rating are resolved once per run, so a not-in-results row still tells you which app fell out — exactly when you most need to know.
🎯 Matching is by ID only. Never by name. A search for "soulmate drawing" returns three different apps with nearly identical titles — name matching would happily track a competitor's position as yours.
Sample output
| keyword | store | appName | position | previousPosition | delta1d | delta7d | trend | rankStatus | checkedDepth |
|---|---|---|---|---|---|---|---|---|---|
| ai chat | apple | ChatGPT | 3 | 9 | +6 | +12 | up | ranked | 200 |
| ai chat | apple | My App | — | 41 | — | — | down | not-in-results | 200 |
| photo editor | — | — | — | — | new | not-in-results | 28 |
Positive delta = moved up (lower position number is better).
Full row: keyword, store, storefront, appId, appName, iconUrl, isMyApp, position, rankStatus, checkedDepth, totalResults, previousPosition, delta1d, delta7d, best30d, worst30d, trend, rating, ratingCount, developer, genre, price, releaseDate, url, error, checkedAt
Input
{"apps": ["https://apps.apple.com/us/app/chatgpt/id6448311069","com.openai.chatgpt"],"keywords": ["ai chat", "chatbot", "ai assistant"],"stores": ["apple", "google"],"storefronts": ["us", "de", "jp"],"myApp": "6448311069","trackingId": "my-portfolio"}
| Field | Notes |
|---|---|
apps | Apple numeric IDs and Google package names can be mixed. URLs work too |
keywords | One search request covers every app you track — adding apps costs no extra time |
stores | apple, google, or both. IDs are routed to the matching store automatically |
storefronts | ISO country codes — us, gb, de, jp, br… |
myApp | Flags its rows isMyApp: true so you can filter yourself out of a competitor set |
trackingId | History lives per tracking ID. Keep it identical between runs for a continuous series; change it to keep projects separate |
Where to find IDs. Apple: the digits after /id in the store URL. Google: the value after ?id=.
🔁 Daily tracking
- Configure the input once and Save as Task
- Open the Task → Integrations → Scheduler → daily
- Keep
trackingIdunchanged — that's what stitches the runs into a series
From the second day on, every row carries its own delta. No dataset joins, no lookup formulas.
💰 Cost
$0.002 per result row. No start fee. You are billed for rows you actually receive.
| Use case | Volume | Monthly |
|---|---|---|
| 1 app × 20 keywords × both stores, daily | 40 rows/day | ~$2.40 |
| 5 apps × 50 keywords × both stores, daily | 500 rows/day | ~$30 |
| One-off competitor check, 10 apps × 10 keywords | 100 rows | $0.20 |
For scale: AppTweak rank tracking starts at $83/month and AppFollow at $179/month, billed per seat whether you check one keyword or a thousand. If you are looking for an AppTweak alternative or an AppFollow alternative for pure rank tracking, this is the same measurement without the subscription.
🔌 Using it from your own stack
The dataset is available the moment a run finishes — as CSV, JSON or XLSX from the console, or straight from the API:
https://api.apify.com/v2/datasets/{datasetId}/items?format=csv&view=overview
- Google Sheets —
IMPORTDATA()the URL above and your sheet refreshes itself - BI tools — point Looker Studio, Metabase or Tableau at the same endpoint
- Webhooks — fire on run completion to push rows into Slack, a database or your own service
- AI agents — the Actor is exposed through Apify's MCP server, so an agent can ask for a keyword position and get structured rows back
- Zapier / Make / n8n — available through Apify's integrations, no glue code
Because every row already contains its own deltas, none of these consumers need to keep state or join anything.
Notes and limits
- Search depth. Apple ~200 per query, Google Play ~28. Reported per row in
checkedDepth - Rate limits. Both stores throttle by IP. Proxy rotation is on by default — leaving it off will turn large runs into
check-failedrows - One point per calendar day. Several runs a day update the same day's value rather than flooding the series, so
delta1dalways means yesterday → today - History depth. 90 days per app/keyword/store/country, kept in a named key-value store
- Run report.
RUN_SUMMARYrecords how many checks were ranked, absent or failed, with the reason for each failure
This Actor is a monitor, not a research suite: it answers "where am I and where am I going". For keyword discovery and market exploration, use a dedicated research tool alongside it.
Not affiliated with Apple Inc. or Google LLC. Data comes from publicly accessible endpoints; use it in accordance with each store's terms of service.