Inspiration

I have shipped 20+ apps to the App Store over the years, and for most of that time I judged every one of them by downloads. Downloads are not revenue though. At some point I realized one app in my portfolio was quietly paying for all the others, and I could not tell you which step of the funnel made it work.

App Store Connect has all of the data: impressions, product page views, installs, purchases. It just never puts them in one line and points at the leak. An app with 40,000 impressions and almost no purchases is not a failed app, it is a fixable one, and the fix is usually a single screen. I wanted the tool that tells me which screen. It did not exist, so I built it during Shipaton.

What it does

FunnelHound connects to your own App Store Connect API key and turns every app you own into one clear funnel: Impressions → Page Views → Installs → Purchases each step with its conversion rate.

The math is embarrassingly simple, which is exactly the point. Each step converts at

$$c_i = \frac{n_{i+1}}{n_i}$$

and your overall funnel is the product

$$\mathrm{CVR} = \prod_i c_i$$

(I just tasked with AI to write something using LaTeX for this readme, I did not do math like this 😅 I just calculated percentages 🤷‍♂️)

Because it is a product, the leakiest step drags everything down with it, and fixing that step multiplies the whole funnel!

  • Low tap-through means your icon and title.
  • Healthy page views but flat installs means your screenshots need fixing.
  • Installs fine but nobody pays means your paywall. One diagnosis, one afternoon.

Other neat stuff

App is not only "the funnel", we have other features:

  • side-by-side portfolio comparison (which app deserves your next month),
  • milestones that measure what a change actually earned ("since this milestone: +18% purchases"),
  • a configurable home-screen revenue widget
  • on-device Apple Intelligence analysis of your funnel

How I built it

  • SwiftUI, all native, iOS 26 Liquid Glass throughout, custom-built chart views. (maybe even too much glass at some parts 🙃)
  • Direct App Store Connect API connection with the user's own key, stored in the Keychain. No middleman server, no analytics reseller. Reports flow from Apple straight to the device. (I pray to apple gods they do not decide to kill the API tho 😅)
  • RevenueCat powers the subscription. Premium is one entitlement called "Houndy's Pack" (the mascot is a hound in a recovery cone, long story). Free tier is a full demo mode: everything is visible, the paywall appears when you try to do things.
  • Apple's Foundation Models for the "Analyze with Apple Intelligence" feature, fully on-device.
  • Snapshot tests as a pipeline: every marketing screenshot on the website is generated from the same snapshot tests that guard the UI, so the store page can never drift from the real app.
  • Built in public, one post a day (although I missed to post some days, I definitely did the work :) )

Challenges I ran into

The TestFlight build that crashed for every single tester. My first beta went out with RevenueCat's Test Store key still configured, and RevenueCat asserts on test keys in release builds. Instant crash on launch, for everyone, on launch day of the beta. The fix was one string. Lesson == Learned

The $0 widget. The home-screen widget would randomly show $0.00 revenue, which is a special kind of morning heart attack. Root cause: widget data was only published from one tab, and a failed fetch went back to a hardcoded 0. I will not say if AI wrote that code or myself.

Making the paywall. Deciding what is free took longer than building the paywall. I scrapped a banner-based upgrade flow entirely and landed on "look, but don't touch". You can see everything, and the moment you act on your own data, Houndy asks to be paid. Simple, direct....fair?

Apple's data lag. App Store Connect reports run 2 to 3 days behind, and a fresh connection needs a day or two before data lands. I focused on having proper UI to relay this to the users, and my conversions increased. Honesty converts better than pretending 🙌

Life. I postponed release a few times, although app was "ready" after a few weeks. At this current stage it is still "good" but I know its not perfect yet. I was excited to use pre-orders tho, helps a bunch to get some hype and align downloads early on.

Accomplishments that I'm proud of

  • Idea to App Store inside one hackathon, as a solo dev, with a daily build-in-public streak the whole way.
  • A full accessibility pass: VoiceOver summaries on every chart and visualization, Dynamic Type, Reduce Motion. Charts you can listen to is next level of fun but also an a11y win :)
  • The honesty section. The App Store description tells you about Apple's data lag before you buy. Scariest copy decision, best-feeling one.
  • A marketing pipeline that cannot lie: website and store screenshots are generated from the app's own snapshot tests, so what you see on the store page is what ships. Supper proud of this one, and I am sure my future self will thank me.
  • Houndy. The mascot has more personality than me and the cone was an accident that became the brand. I am so happy I found an illustrator to help me with this, although for the app Icon I did use AI to add some 3D. But icon and mascot is fully human made :)

What I learned

  • A deadline makes the app real. Shipaton forced scope decisions I had postponed for months.
  • Sell the feeling, not the feature list. Nobody wants "analytics". People want to stop guessing why nobody buys.
  • Release builds are a different animal. Test keys, entitlements, widget versions: everything that can only break in release will break in release.
  • My own funnel is my best test data. FunnelHound's launch is being measured by FunnelHound, which is either very meta or very efficient, probably both.

What's next for Funnel Hound: App Sales & ASO

Animated app icon, deeper leak diagnosis that names the fix instead of the symptom, more category benchmarks, and watching the milestone chips tell me whether this Devpost story moved the numbers. Will try to add Google if that is doable as well, and maybe fetch some data from ads. The more the merrier!

One more thing. This app, is THE app for me. I can feel that this is the project that I want to drive forward for years to come. It is the bread and butter of every dev, including myself, and as such, a project I can dedicate a lot of my time to.

Built With

  • appstoreconnect
  • charts
  • liquidglass
  • swiftui
Share this project:

Updates

Submission history