Show HN: App Store Webhook Proxy for Slack/Teams – Monitor App Review Status

4 months ago 12

 MIT Node.js Docker Ready

Slack Integration MS Teams Integration

Buy Me a Coffee

Deploy to Render

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.

  • ✅ 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

  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

End-to-end simple installation guides, from installing the proxy to get the test message to MS Teams / Slack

MS Teams Notification Screenshot

📘 Step-by-step setup guide: Integrate App Store Webhooks with Microsoft Teams (Medium)

Slack Notification Screenshot

📘 Step-by-step setup guide: Integrate App Store Webhooks with Slack (Medium)


✅ Supported Webhook Events

  • appStoreVersionAppVersionStateUpdated
  • webhookPingCreated

Unknown events will still be delivered in raw JSON.


Here you can find all the available options to run the proxy.

1. Manual Setup (Node.js)

If you'd like to run the app directly with Node.js:

git clone https://github.com/yourusername/appstore-webhook-proxy.git cd appstore-webhook-proxy npm install

Build and run using Docker:

docker build -t appstore-webhook-proxy . docker run -p 3000:3000 --env-file .env appstore-webhook-proxy

3. One-Click Render Deployment

Click below to deploy instantly to Render:

Deploy to Render

Make sure to set the following environment variables during setup:

  • SHARED_SECRET
  • TEAMS_WEBHOOK_URL
  • SLACK_WEBHOOK_URL
  • APP_STORE_URL (optional)
  • TIMEZONE (e.g., Europe/Athens)

Render automatically sets NODE_ENV=production


Create a .env file (or set variables directly in your cloud environment):

SHARED_SECRET=your_shared_secret TEAMS_WEBHOOK_URL=https://your-teams.webhook.url SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXX/YYY/ZZZ APP_STORE_URL=https://apps.apple.com/app/id123456789 TIMEZONE=Europe/Athens

You can also copy from the example:


Then send a webhook POST to:

http://localhost:3000/appstore-webhook

🔐 Usefull App Store Connect info:


. ├── 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

PRs and feedback welcome! You can help with:

  • More supported event types
  • Custom Slack/Teams formatting
  • Delivery logs and retry support

MIT

Read Entire Article