App Store Connect Notifications, Now in Discord

Yeethook now delivers enriched App Store Connect webhooks and App Store Server Notifications to Discord. Paste a channel webhook URL, no bot required. Here's what the embed contains and how delivery stays reliable.

Cover Image for App Store Connect Notifications, Now in Discord

Plenty of iOS teams don't live in Slack. The indie developer whose beta testers hang out in a Discord server. The two-person studio that already runs its whole company out of a few Discord channels. The game team whose community, QA, and dev chat are all one server apart.

Until today, those teams had to open a Slack workspace just to get App Store Connect events. Not anymore. Yeethook now delivers to Discord, with the same enrichment, routing, and health monitoring as Slack.

Setup takes about a minute

There is no bot to invite, no OAuth screen, and no permissions to approve. Discord has webhooks built into every text channel, and that is all Yeethook needs.

  1. In Discord, open the channel's settings (the gear icon next to the channel name).
  2. Go to Integrations, then Webhooks, and click New Webhook.
  3. Click Copy Webhook URL.
  4. In Yeethook, go to Channels, click Add channel, choose the Discord tab, paste the URL, and give the channel a name.

If you paste a Discord URL while the Slack tab is selected, Yeethook notices and switches tabs for you. The same flow is in the setup wizard's Connect a channel step, so new accounts can pick Discord from the start.

Hit Send test event from the channel's menu and you should see a Yeethook message land in your channel within seconds. The full walkthrough, including the URL formats we accept, is in How do I create a Discord webhook?.

What lands in your channel

Every event becomes a single Discord embed. We didn't port the Slack layout pixel for pixel. We rebuilt it around what Discord embeds do well.

A color bar for severity. Red for critical events like crashes and refunds, amber for warnings, green for good news like a new subscription, blue for everything informational. You can scan a busy channel by color before reading a word.

A headline with an emoji. The title tells you what happened in plain language, not as an enum like BUILD_UPLOAD_STATE_UPDATED.

Context in the description. The app name and bundle ID, a short description of the event, and, for TestFlight feedback, the tester's comment as a quote.

Fields for the details. The most important facts (version, build, device, OS, product) sit side by side as inline fields. Secondary details get their own full-width rows. For crashes, the diagnostics come through as a code block field, so stack frames stay monospaced and readable.

The screenshot. When a tester attaches a screenshot to their feedback, it shows up as the embed image. You see what they saw without leaving Discord.

Links to go deeper. Discord webhooks can't show clickable buttons the way Slack messages can, so "View in Yeethook" and "View in App Store Connect" are markdown links right in the description. One click takes you to the full event or the right page in App Store Connect.

A footer and timestamp round it out, and every message posts as Yeethook, whatever you named the webhook.

Your notification preferences carry over too. If you've turned off emoji, the app name, or either link, Discord messages respect that exactly like Slack messages do.

Nobody gets pinged by a tester

This one mattered to us. TestFlight feedback is free text written by people outside your team. In a Discord server, free text containing @everyone is a problem waiting to happen: one tester's comment and your whole community gets a notification at 3am.

Yeethook sends every Discord message with mentions disabled. @everyone, @here, role mentions, and user mentions all render as plain text and never ping anyone. On top of that, untrusted text like tester comments is markdown-escaped, so it can't inject formatting or fake links into the embed.

You don't have to configure anything. It's always on.

Reliability: what happens when Discord says no

A webhook relay is only as good as its failure handling. Discord support uses the same delivery pipeline as Slack, with the rules tuned to how Discord responds.

Deleted webhooks are caught immediately. If someone deletes the webhook or the channel, Discord responds with a 401 or 404. Yeethook treats that as permanent and deactivates the channel right away, instead of hammering a dead URL. Your other channels keep receiving events.

Rate limits don't count as failures. Discord limits how often a single webhook can post. When it returns a 429, Yeethook reads Discord's retry_after hint, leaves the channel's health alone, and a retry job picks the event up again. That job runs every 5 minutes and retries an event up to 5 times within its first hour.

Temporary problems get a few chances. Timeouts and other errors count as consecutive failures. A successful delivery resets the count. Five failures in a row, and the channel is deactivated so you can see something is wrong.

Health checks don't spam your channel. To check that a Discord webhook still exists, Yeethook sends a GET request to it. That returns the webhook's metadata and posts nothing.

When a channel is deactivated, fixing it takes the same minute as setting it up: create a new webhook in Discord and paste the fresh URL into Reactivate. The details are in Webhook health.

Security

A Discord webhook can post to exactly one channel. It can't read messages, see members, or touch anything else in your server. Yeethook encrypts the webhook URL at rest with AES-256-GCM, the same way we store Slack webhooks, and never shows it again after you save it. If you ever want to cut Yeethook off, delete the webhook in Discord and it stops working instantly.

We wrote up the full picture in Is a Discord webhook safe to use?.

Mix Slack and Discord however you like

Discord channels are just channels in Yeethook. Routing and event filters work the same way, so one app can send crash reports to your team's Slack and TestFlight feedback to your beta testers' Discord. Or keep everything in Discord.

Slack and Discord channels count toward the same channel limit on your plan: one on Free, three on Team, unlimited on Scale and Fleet.

If your team lives in Discord, go to Channels, click Add channel, and pick the Discord tab. Your next App Store event will show up where your team already is.