https://github.com/yannisalexiou/appstore-webhook-proxy
App Store Webhook Proxy for Slack & MS Teams
https://github.com/yannisalexiou/appstore-webhook-proxy
app-store-connect ios microsoft-teams nodejs productivity slack slack-api webhook
Last synced: 12 months ago
JSON representation
App Store Webhook Proxy for Slack & MS Teams
- Host: GitHub
- URL: https://github.com/yannisalexiou/appstore-webhook-proxy
- Owner: yannisalexiou
- Created: 2025-06-12T23:00:06.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-26T10:05:17.000Z (12 months ago)
- Last Synced: 2025-06-26T11:19:01.861Z (12 months ago)
- Topics: app-store-connect, ios, microsoft-teams, nodejs, productivity, slack, slack-api, webhook
- Language: JavaScript
- Homepage:
- Size: 214 KB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# App Store Webhook Proxy for Microsoft Teams & Slack
[](https://opensource.org/licenses/MIT)

[](https://hub.docker.com/r/yannisalexiou/appstore-webhook-proxy)
[](https://render.com/deploy)
[](https://forums.unraid.net/topic/191280-support-yannisalexiou-app-store-webhook-proxy/)


[](https://coff.ee/alexiou)
This project provides a simple, secure Node.js proxy to forward webhook events from **App Store Connect** to **Microsoft Teams** and/or **Slack**, including signature verification and platform-specific formatting.
---
## ๐ Features
- โ
Verifies App Store webhook signatures using HMAC SHA-256
- โ
Forwards formatted messages to Microsoft Teams and Slack
- โ
Custom message templates per platform
- โ
Supports custom timezones for event timestamps
- โ
Error handling and logging
- โ
Dockerized and ready for deployment (e.g. Render, Railway)
- โ
One-click deployable to Render
---
## ๐ Prerequisites
1. App Store Connect access with one of the following roles: **Account Holder**, **Admin**, or **App Manager** to create a webhook.
2. A configured workspace in either: Microsoft Teams and/or Slack
---
## ๐ฆ Installation Guides
End-to-end simple installation guides, from installing the proxy to get the test message to MS Teams / Slack
### ๐ฌ Microsoft Teams

**๐ Step-by-step setup guide**: [Integrate App Store Webhooks with Microsoft Teams (Medium)](https://medium.com/p/af3c8c840c15)
### ๐ฌ Slack

**๐ Step-by-step setup guide**: [Integrate App Store Webhooks with Slack (Medium)](https://medium.com/p/4785b8306c81)
---
## โ
Supported Webhook Events
- `appStoreVersionAppVersionStateUpdated`
- `webhookPingCreated`
Unknown events will still be delivered in raw JSON.
---
## ๐ง Proxy Setup Options
Here you can find all the available options to run the proxy.
โ ๏ธ To make the proxy work, it must be accessible from the internet. In my Unraid setup, I use an NGINX reverse proxy. If you're not familiar with this, it's easier to use the [1. One-Click Render Deployment](#1-one-click-render-deployment) option, which provides a public domain automatically.
**The incoming webhook should be sent to the path: `/appstore-webhook`.**
### 1. One-Click Render Deployment
Click below to deploy instantly to Render:
[](https://render.com/deploy)
Make sure to set the environment variables during setup [(Read the Environment Variables table below)](#%EF%B8%8F-environment-variables).
> Render automatically sets `NODE_ENV=production`
### 2. Unraid Setup
To install via Unraid:
1. Open the **Apps** tab in your Unraid dashboard.
2. Search for:
**`AppStore-Webhook-Proxy`**
3. Click **Install** and configure the required environment variables.
๐ฌ **Need help or want to leave feedback?**
Join the support thread in the [Unraid Community Forum](https://forums.unraid.net/topic/191280-support-yannisalexiou-app-store-webhook-proxy/).
๐ฅ **Watch the setup walkthrough:**
[](https://www.youtube.com/watch?v=g_EBC1CdblE)
### 3. Docker Setup
Build and run using Docker:
```bash
docker build -t appstore-webhook-proxy .
docker run -p 3000:3000 --env-file .env appstore-webhook-proxy
```
### 4. Manual Setup (Node.js)
If you'd like to run the app directly with Node.js:
```bash
git clone https://github.com/yourusername/appstore-webhook-proxy.git
cd appstore-webhook-proxy
npm install
```
---
## โ๏ธ Environment Variables
Create a `.env` file (or set variables directly in your cloud environment):
| Variable | Explanation | Default Value |
|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|
| `SHARED_SECRET` | **Required.** Secret used to verify incoming App Store Webhook requests. You define it when creating the webhook in App Store Connect, then set the same value here.
Set it here: [App Store Webhooks Setup](https://appstoreconnect.apple.com/access/integrations/webhooks) | *(empty)* |
| `TEAMS_WEBHOOK_URL` | **Required if integrating with Microsoft Teams.** Webhook URL for sending notifications to Microsoft Teams. Leave empty if not used.
Example: `https://your-teams.webhook.url`
Create it here: [Microsoft Teams Incoming Webhook Guide](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet) | *(empty)* |
| `SLACK_WEBHOOK_URL` | **Required if integrating with Slack.** Webhook URL for sending notifications to Slack. Leave empty if not used.
Example: `https://hooks.slack.com/services/XXX/YYY/ZZZ`
Create it here: [Slack Webhook Guide](https://api.slack.com/messaging/webhooks) | *(empty)* |
| `APP_STORE_URL` | *(Optional)* Public URL of your app on the App Store. Included in notifications to make it easier to access the appโs page.
Example: `https://apps.apple.com/app/id123456789` | *(empty)* |
| `TIMEZONE` | *(Optional)* Timezone used to format timestamps in messages. Use a valid [IANA timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), e.g. `Europe/Athens`. | `UTC` |
You can also copy from the example:
```bash
cp .env.example .env
```
---
## ๐งช Running Locally
```bash
npm start
```
Then send a webhook POST to:
```
http://localhost:3000/appstore-webhook
```
---
## ๐ Usefull App Store Connect info:
- When setting up the webhook in App Store Connect, Apple will ask for a **secret**. Use a string of your choice and set it in `SHARED_SECRET`.
- Official docs:
- [Apple Webhook Notification Overview]()https://developer.apple.com/documentation/AppStoreConnectAPI/webhook-notifications
- [Configuring Webhook Notifications](https://developer.apple.com/documentation/appstoreconnectapi/configuring-webhook-notifications)
- [Webhook Permissions Guide](https://developer.apple.com/help/app-store-connect/manage-your-team/manage-webhooks)
---
## ๐ Project Structure
```
.
โโโ app.js # Entry point
โโโ routes/
โ โโโ webhook.js # Webhook handler
โโโ utils/
โ โโโ eventTemplates.js # Teams formatter
โ โโโ slackTemplates.js # Slack formatter
โ โโโ stateDescriptions.js
โโโ services/
โ โโโ signatureVerifier.js
โ โโโ teamsNotifier.js
โ โโโ slackNotifier.js
โโโ middleware/
โ โโโ errorHandler.js
โ โโโ logging.js
โโโ Dockerfile
โโโ render.yaml # Render deploy spec
โโโ .env.example
โโโ .dockerignore
โโโ .gitignore
โโโ README.md
```
---
## ๐ก Contributing
PRs and feedback welcome! You can help with:
- More supported event types
- Custom Slack/Teams formatting
- Delivery logs and retry support
---
## ๐ License
MIT