Why I Built Yeethook

I got tired of logging into App Store Connect to check if anything happened. So I built a service that yeets every Apple event to Slack, enriched with the full story.

Cover Image for Why I Built Yeethook

I used to start every morning the same way. Open App Store Connect. Click around. Check if a beta tester left feedback overnight. See if Apple finished reviewing my build. Look for crash reports. Refresh. Nothing new. Close the tab. Repeat tomorrow.

If you ship iOS or macOS apps, you know the drill.

The problem with polling

App Store Connect is where everything happens for your app. Beta tester feedback, review status changes, crash reports, subscription events. But Apple doesn't come to you. You have to go to Apple. Every. Single. Time.

Miss a day? That crash report from your biggest beta tester sits unread. That review rejection? You find out 48 hours late. A tester screenshots a bug and writes a detailed description? It disappears into a queue you forgot to check.

I was building mobile apps for myself and with friends, and we all had the same problem. Important events were happening in App Store Connect, and nobody knew until someone remembered to log in.

What already existed (and why it wasn't enough)

I looked at what was out there.

Sentry could send Slack notifications for crashes, but it wanted extra money for that, and it completely missed TestFlight feedback, review status changes, and the rest of the App Store Connect lifecycle. The crash context was decent, but everything else was a blind spot.

I found a couple of open source projects on GitHub that could proxy Apple webhooks to Slack. They worked, technically. But they just forwarded raw JSON. You'd get a notification saying something happened, click through, and still have to log into App Store Connect to figure out what it actually was. Which tester? What device? What did the screenshot look like? Back to square one.

To be fair, Xcode's Organizer is genuinely good at this. Crash logs show up almost instantly, with device info, OS versions, and tester screenshots attached. But I build with Expo. I don't want to open Xcode just to check if a tester left a comment. Expo's MCP can pull TestFlight crash reports and feedback too, which is great if you're already in that workflow. But it's still pull-based. You have to remember to ask. I wanted to be told. There's a difference between "I can check if something happened" and "something happened, here it is."

The tools that had good context (Xcode, Expo MCP) required me to go check. The tools that came to me (webhook proxies) had no context. Nothing combined both: rich, enriched events pushed to where my team already lives.

Building the thing I wanted

So I built it myself. The idea was simple: receive every webhook Apple sends, use the App Store Connect API to fetch the complete context, and deliver a rich, readable Slack message. No raw JSON. No "event ID: abc123, go look it up yourself."

A TestFlight crash report comes in? Yeethook pulls the crash log, the tester's name, their device model, the OS version, and any screenshot they attached. All in one Slack message. Before anyone opens Xcode.

A build moves to "In Review"? You know instantly. It gets approved? Rejected? Your team's Slack channel lights up with the details.

Subscription renewed? Refund requested? Price increase accepted? Every App Store Server Notification v2 event lands in Slack with the subscriber context attached.

The enrichment is the whole point. Without it, you're just moving the "go check App Store Connect" problem from a browser tab to a Slack notification.

From side project to product

I started using Yeethook for my own apps. Then my friends wanted it for theirs. It worked well. Really well. The "did anything happen?" anxiety went away. Events just showed up in Slack with enough context to act on immediately.

That's when I thought: why not give this to everyone?

There are thousands of indie developers and small teams shipping iOS and macOS apps who deal with the same App Store Connect polling problem. So I turned Yeethook into a proper product with a free tier. One app, fully enriched, no credit card required.

How it works

The setup takes about two minutes:

  1. Upload your p8 API key from App Store Connect. Yeethook encrypts it with AES-256-GCM at rest.
  2. Pick your apps. Yeethook can automatically create Apple webhooks for you, or you can configure them manually.
  3. Paste a Slack webhook URL. Route different event types to different channels if you want. Crashes to #bugs, reviews to #releases, subscriptions to #revenue.
  4. Done. Every event, enriched, in Slack, instantly.

Yeethook handles both Apple webhook sources: App Store Connect webhooks (builds, reviews, TestFlight, crashes) and App Store Server Notifications v2 (subscriptions, refunds, offer redemptions). It also monitors webhook health on both the Apple and Slack side. If a webhook gets deleted or disabled, Yeethook detects it and offers a one-click fix.

Stop checking. Start knowing.

That's the shift. From "I should probably log into App Store Connect" to "my team already knows what happened."

If you're shipping Apple apps and you're tired of the daily App Store Connect check-in ritual, give Yeethook a try. Free for one app. Your Slack channels will thank you.