ASO Rank Tracker with History — App Store & Google Play avatar

ASO Rank Tracker with History — App Store & Google Play

Pricing

$2.00 / 1,000 ranking rows

Go to Apify Store
ASO Rank Tracker with History — App Store & Google Play

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

Anton DataScout

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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:

rankStatusMeaningWritten to history?
rankedfound at a real positionyes
not-in-resultssearch returned normally, app wasn't in ityes
check-failedthe check itself failed after 3 rotated retriesnever

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

keywordstoreappNamepositionpreviousPositiondelta1ddelta7dtrendrankStatuscheckedDepth
ai chatappleChatGPT39+6+12upranked200
ai chatappleMy App41downnot-in-results200
photo editorgoogleInstagramnewnot-in-results28

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"
}
FieldNotes
appsApple numeric IDs and Google package names can be mixed. URLs work too
keywordsOne search request covers every app you track — adding apps costs no extra time
storesapple, google, or both. IDs are routed to the matching store automatically
storefrontsISO country codes — us, gb, de, jp, br
myAppFlags its rows isMyApp: true so you can filter yourself out of a competitor set
trackingIdHistory 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

  1. Configure the input once and Save as Task
  2. Open the Task → Integrations → Scheduler → daily
  3. Keep trackingId unchanged — 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 caseVolumeMonthly
1 app × 20 keywords × both stores, daily40 rows/day~$2.40
5 apps × 50 keywords × both stores, daily500 rows/day~$30
One-off competitor check, 10 apps × 10 keywords100 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 SheetsIMPORTDATA() 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-failed rows
  • One point per calendar day. Several runs a day update the same day's value rather than flooding the series, so delta1d always means yesterday → today
  • History depth. 90 days per app/keyword/store/country, kept in a named key-value store
  • Run report. RUN_SUMMARY records 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.