{"id":8010,"date":"2026-04-07T10:28:28","date_gmt":"2026-04-07T09:28:28","guid":{"rendered":"https:\/\/www.laterretagames.com\/?p=8010"},"modified":"2026-04-07T10:28:28","modified_gmt":"2026-04-07T09:28:28","slug":"i-built-the-app-analytics-tool-i-always-needed-as-an-indie-developer","status":"publish","type":"post","link":"https:\/\/www.laterretagames.com\/en\/2026\/04\/07\/i-built-the-app-analytics-tool-i-always-needed-as-an-indie-developer\/","title":{"rendered":"I built the app analytics tool I always needed as an indie developer"},"content":{"rendered":"<h3 class=\"wp-block-heading\" id=\"ember373\">The frustration that started it all<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.licdn.com\/dms\/image\/v2\/D4E12AQGHUouT-MKPAQ\/article-inline_image-shrink_1000_1488\/B4EZ1m8RnZGQAQ-\/0\/1775548570693?e=1776902400&amp;v=beta&amp;t=WE4ZpKg3QS8jHyEeWl7atC1xilTDFudJBQrjm37YIwM\" alt=\"Contenido del art\u00edculo\"\/><\/figure>\n\n\n\n<p id=\"ember375\">I&#8217;ve been publishing apps on Google Play, App Store, and <a href=\"http:\/\/itch.io\/\">itch.io<\/a> for years. Every morning I&#8217;d open three different tabs, log into three different dashboards, and try to mentally piece together a picture of how my portfolio was doing.<\/p>\n\n\n\n<p id=\"ember376\">It was slow, fragmented, and annoying. And when I looked for a solution, I found tools like Sensor Tower ($450\/mo), App Annie (pure enterprise), or Appfigures ($12\/mo but no <a href=\"http:\/\/itch.io\/\">itch.io<\/a>). Nothing built for a developer like me \u2014 someone with 5\u201315 apps across multiple stores who just wants a clear view without paying SaaS prices.<\/p>\n\n\n\n<p id=\"ember377\">So I built AppWatch.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember378\">What it actually does<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.licdn.com\/dms\/image\/v2\/D4E12AQF_Dvfpy9mGIQ\/article-inline_image-shrink_1000_1488\/B4EZ1m9lXOIQAQ-\/0\/1775548913603?e=1776902400&amp;v=beta&amp;t=9JtIG34FyxaSo3OVkTYfZujkEGNwNbUpxS17cyBOkEQ\" alt=\"Contenido del art\u00edculo\"\/><\/figure>\n\n\n\n<p id=\"ember380\">AppWatch pulls data from all three stores into a single dashboard:<\/p>\n\n\n\n<p id=\"ember381\">&#8211; <strong>Google Play<\/strong> via the google-play-scraper API \u2014 install ranges, ratings, review counts, category rankings<\/p>\n\n\n\n<p id=\"ember382\">&#8211; <strong>App Store<\/strong> via iTunes Search \u2014 ratings, downloads proxy, version tracking<\/p>\n\n\n\n<p id=\"ember383\">&#8211; <a href=\"http:\/\/itch.io\/\"><strong>itch.io<\/strong><\/a><strong> via OAuth API<\/strong> \u2014 the only tool with real <a href=\"http:\/\/itch.io\/\">itch.io<\/a> integration. Exact download counts, views, purchases<\/p>\n\n\n\n<p id=\"ember384\">Beyond the dashboard view, it also stores historical snapshots and shows you evolution charts over time. Did that update you shipped last Tuesday move the needle? You&#8217;ll know within hours, not at the end of the month.<\/p>\n\n\n\n<p id=\"ember385\">There are also email alerts: get notified when your rating drops below a threshold, when you hit a download milestone, or when there&#8217;s a significant rating change. The kind of thing you want to know about immediately, not when you happen to open the app.<\/p>\n\n\n\n<p id=\"ember386\">And for paid plans, category rankings: where does your app sit in the top charts for its category, updated every 6 hours.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember387\">The tech decisions<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.licdn.com\/dms\/image\/v2\/D4E12AQFwjDQnKuoBdg\/article-inline_image-shrink_1500_2232\/B4EZ1m97cbJIAU-\/0\/1775549004418?e=1776902400&amp;v=beta&amp;t=0dtnNY_mEFoyTbmsBFtETPrOdnHw2bRXik4xv76OwZQ\" alt=\"Contenido del art\u00edculo\"\/><\/figure>\n\n\n\n<p id=\"ember389\">I built it with <strong>Next.js 16 App Router<\/strong>, <strong>Prisma 7<\/strong> with MariaDB, and deployed it on a plain Ubuntu VPS behind nginx. No Vercel, no managed database \u2014 because this tool is going to be cheap for users and that means keeping infrastructure costs real.<\/p>\n\n\n\n<p id=\"ember390\">A queue-based scraping pipeline with per-plan frequency and a simple license system integrated with my store.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember391\">What I learned building it<\/h3>\n\n\n\n<p id=\"ember392\"><strong>Scraping is fragile.<\/strong> Google Play&#8217;s google-play-scraper library works well but breaks occasionally. App Store&#8217;s iTunes Search API is stable but doesn&#8217;t give you download counts (only ratings as a proxy). <a href=\"http:\/\/itch.io\/\">itch.io<\/a>&#8216;s API is clean but only works with your own games.<\/p>\n\n\n\n<p id=\"ember393\"><strong>Ship fast, then improve.<\/strong> The MVP went live in April 2026 with core tracking. Category rankings, CSV export, and email alerts came in the weeks after. I had paying users before I had charts. That was intentional.<\/p>\n\n\n\n<p id=\"ember394\"><strong>Pricing is hard.<\/strong> Free tier with 3 apps, Indie at \u20ac19\/mo with 25 apps, Pro at \u20ac49\/mo with unlimited. These numbers came from looking at what indie developers actually say they&#8217;d pay in communities like r\/gamedev and IndieHackers, not from a pricing spreadsheet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember395\">Where it is now and what&#8217;s next<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.licdn.com\/dms\/image\/v2\/D4E12AQHon6fP6BavSA\/article-inline_image-shrink_1000_1488\/B4EZ1m9FN_I0AQ-\/0\/1775548782070?e=1776902400&amp;v=beta&amp;t=XS13mdxtLplEpSdPRpKNjcoBoPBfo-sGdAQ6g9E5ZMA\" alt=\"Contenido del art\u00edculo\"\/><\/figure>\n\n\n\n<p id=\"ember397\">It&#8217;s live at <a href=\"http:\/\/appwatch.dev\/\">appwatch.dev<\/a>. There&#8217;s a free tier with no credit card required \u2014 if you have apps on any of these stores, you can connect them in 2 minutes and see everything in one place.<\/p>\n\n\n\n<p id=\"ember398\">Next on the roadmap: Steam integration (the scraping is technically feasible, it&#8217;s a matter of prioritization), competitor tracking for Pro users, and a public API so developers can pipe their data into their own tools.<\/p>\n\n\n\n<p id=\"ember399\">If you&#8217;re an indie developer publishing on multiple platforms, I&#8217;d love to hear what you track and how you do it today. The product is early and feedback from real developers is how it gets better.<\/p>\n\n\n\n<p id=\"ember400\">&#8212;<\/p>\n\n\n\n<p id=\"ember401\"><em>AppWatch is available at <\/em><a href=\"http:\/\/appwatch.dev\/\"><em>appwatch.dev<\/em><\/a><em>. Free plan includes 3 apps, no credit card required.<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>The frustration that started it all I&#8217;ve been publishing apps on Google Play, App Store, and itch.io for years. Every\u2026<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8010","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"featured_media_urls":[],"_links":{"self":[{"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/posts\/8010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/comments?post=8010"}],"version-history":[{"count":1,"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/posts\/8010\/revisions"}],"predecessor-version":[{"id":8011,"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/posts\/8010\/revisions\/8011"}],"wp:attachment":[{"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/media?parent=8010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/categories?post=8010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.laterretagames.com\/en\/wp-json\/wp\/v2\/tags?post=8010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}