There are tools that forward Apple webhooks to Slack. They take the JSON payload, maybe wrap it in a code block, and send it to a channel. Technically, you get a notification. Practically, you still don't know what happened.
That's the difference between forwarding and enriching. Yeethook enriches.
What a raw webhook looks like
When Apple sends a webhook, the payload contains identifiers. An event type, a resource ID, maybe a build number. It tells you that something happened. It doesn't tell you the full story.
A crash report webhook says "a crash was submitted." It doesn't include the crash log, the stack trace, or the tester's name. A subscription event says "DID_CHANGE_RENEWAL_STATUS." It doesn't tell you which subscriber, which plan, or what they changed.
If you forward that raw payload to Slack, you've moved the problem. Instead of polling App Store Connect to find out if something happened, now you're clicking through from Slack to App Store Connect to find out what happened. Different trigger, same destination.
What an enriched message looks like
When Yeethook receives a crash report webhook, it doesn't just forward the event. It uses your p8 API key to call the App Store Connect API and pull the full context:
- Crash log with the stack trace
- Tester's name and email
- Device model (iPhone 15 Pro, iPad Air, etc.)
- OS version (iOS 18.3, macOS 15.2)
- Screenshots the tester attached
- Comments the tester wrote
All of that lands in one Slack message. Your team reads it and understands what happened, who it happened to, and where to look. Nobody opens App Store Connect. Nobody asks "which tester was it?" The answer is already there.
Enrichment across event types
Crash reports aren't the only events that get richer with a p8 key.
Build events get version descriptions, build numbers, and processing status details. Instead of "build state changed," you see "MyApp v2.3.1 (build 47) finished processing and is ready for TestFlight."
App review events get the full version context. Instead of "version state updated," you see "MyApp v2.3.1 moved to In Review" or "MyApp v2.3.1 was approved for the App Store."
Subscription events get transaction details and subscriber context. Instead of "DID_RENEW," you see the plan, the renewal period, and whether the subscriber has been active for three months or three years.
TestFlight feedback gets the tester's screenshot, their device info, and whatever they wrote. Instead of "screenshot feedback submitted," you get the actual screenshot in Slack.
Without enrichment
Yeethook still works without a p8 key. Every event type gets a formatted Slack message with the event name, the app, and whatever data the raw webhook payload includes. It's cleaner than raw JSON. But it's a headline without the article.
This is what happens with Manual Setup, where you configure webhooks in App Store Connect yourself without giving Yeethook your API key. You get real-time notifications for every event type. You just don't get the full story attached to each one.
The core question
The question isn't "do I get notified?" Any webhook proxy can do that. The question is: "can I act on this notification without leaving Slack?"
With enrichment, the answer is yes. The crash log is there. The tester's name is there. The screenshot is there. The subscription details are there. You read the Slack message and you know what to do next.
That's the difference between forwarding and enriching. One tells you something happened. The other tells you the whole story.
