Notifications and exports
Get a message in a Discord, Slack, or Microsoft Teams channel when something happens in your workspace: an upload finishes, an upload fails, an ad is created, an automation rule takes action, or someone joins your team. These are meant for people. If you want structured events for your own code, use webhooks instead. There is also a daily Google Sheets performance export.
Set them up on the integrations page. One channel per platform per workspace, and you can use several at once.
Discord setup
- In Discord, open the channel you want messages in and click the gear icon (Edit channel).
- Go to Integrations, then Webhooks, and click New webhook.
- Name it (for example "upload.ad"), pick the channel, and click Copy webhook URL.
- Paste the URL on the integrations page under Discord and save.
- Click Send test message to confirm it works.
The URL looks like https://discord.com/api/webhooks/1234567890/AbCdEf....
Slack setup
- Go to api.slack.com/apps and create an app (from scratch) in your workspace.
- Open Incoming Webhooks and turn them on.
- Click Add new webhook to workspace and pick the channel.
- Copy the webhook URL, paste it on the integrations page under Slack, and save.
- Click Send test message to confirm it works.
The URL looks like https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX.
Microsoft Teams setup
- In Teams, open the channel you want messages in, click + (or the channel's three-dot menu) and add the Workflows app.
- Pick the template Post to a channel when a webhook request is received and confirm the team and channel.
- Copy the request URL the workflow gives you.
- Paste it on the integrations page under Microsoft Teams and save.
- Click Send test message to confirm it works.
The URL looks like https://prod-XX.westus.logic.azure.com/workflows/.... Legacy Office 365 connector URLs (https://....webhook.office.com/...) also work while Microsoft still supports them.
What gets sent
| Event | Message |
|---|---|
| Upload completed | ✅ banner.png (image, 1.2 MB) uploaded to Facebook |
| Upload failed | ❌ Upload failed for banner.png, with the reason when known |
| Ad created | 🆕 Ad created: the ad's name and id |
| Rule triggered | ⚡ An automation rule paused or activated ads, or changed budgets, with the names |
Bulk uploads are grouped: while a batch is still uploading nothing is sent, and when the queue drains you get one summary ("4,987 uploads completed, 13 failed") instead of a message per file. A single upload still gets its own message. Chat and email both use this grouping; the signed webhook receives every event individually.
Messages are sent once per event, with no retries. The integrations page shows whether the last delivery succeeded, and the test button sends a sample message any time.
Choosing what you receive
By default every destination receives every event. On the notifications page you can pick events per destination: each chat channel, the signed webhook, and email. Email notifications go to your account address and are off until you turn them on there.
Google Sheets performance export
upload.ad can build a running performance log of your ads in a Google Sheet, one row per ad per day.
- Connect Google Drive on the integrations page if you haven't already. If you connected before the export existed, reconnect once to grant spreadsheet access.
- Click Enable export under Google Sheets export.
upload.ad creates a spreadsheet named "upload.ad performance" in your Drive with three tabs, Campaigns, Ad sets, and Ads, and appends yesterday's numbers once per day for everything that had delivery. Campaign and ad set rows include the objective and daily budget; every row carries spend, impressions, reach, clicks, CTR, CPC, CPM, link clicks, purchases, purchase value, ROAS, leads, and thruplays. Build your own pivots and charts on top; new rows keep arriving daily.
The export only has access to spreadsheets it created, never your other files. Disabling the export stops new rows; the spreadsheet stays in your Drive.
Notes
- The webhook URL is the credential: anyone who has it can post to your channel. Treat it like a secret, and rotate it on the chat platform if it leaks. Saved URLs are shown masked in settings.
- Notifications never block or delay uploads. If the chat service is down, the message is dropped and the upload continues normally.
- To stop notifications, remove the channel on the integrations page or delete the webhook on the chat platform.