A Discord webhook is a URL that posts into one channel with no bot and no login. Making one takes a minute. Most of the problems come afterwards.
Discord webhook alerts work by giving a monitoring tool a URL that posts straight into one channel of your server. Discord's own developer docs say webhooks "do not require a bot user or authentication to use". To make one, open Server Settings, go to Integrations, click Create Webhook, pick the channel, then Copy Webhook URL and paste it into the tool. That part takes a minute. What makes alerts go missing later is rate limits, a deleted webhook, a message that is too long, and a URL that has leaked.
Discord's help article on webhooks describes them as a way to get "automated messages and data updates sent to a text channel in your server". Under the hood it is one address. The webhook reference shows the call a tool makes: a POST to /webhooks/{id}/{token}, where the id and token are the two long strings at the end of the URL you copied.
That suits website monitoring well. A monitor notices a page change, a price drop or a restock, and sends one message. Nobody has to run a bot, keep it online or give it permissions across the server.
Open Server Settings, then Integrations
You need to be on the server the alerts should go to. Creating a webhook through Discord's API requires the Manage Webhooks permission, so if the option is missing, that permission is the likely reason.
Click Create Webhook
That creates the webhook, and the options for it open.
Choose the channel it posts to
Pick an ordinary text channel. If the webhook's channel is a forum or media channel, Discord requires every message to name a thread, so a tool that does not send one cannot post there.
Give it a name and, if you like, an avatar
Discord suggests naming webhooks so you can tell several apart. A tool can still override the name and avatar on each message.
Click Copy Webhook URL
Treat what you copied like a password. The section below says why.
Paste it into your monitoring tool and send a test
A test message proves the channel, the permissions and the URL in one go, before a real alert depends on it.
More than an alert needs, but the limits are hard ones. Discord's message reference says a message that goes over them is refused with a Bad Request, so an over-long product description can lose you the whole alert, not just the end of it.
| Part of the message | Limit |
|---|---|
| Plain text (content) | 2,000 characters |
| Embeds per message | Up to 10 |
| Embed title | 256 characters |
| Embed description | 4,096 characters |
| Fields per embed | Up to 25 |
| Field name / field value | 256 / 1,024 characters |
| Footer text | 2,048 characters |
| All embed text in one message, combined | 6,000 characters |
An embed is the boxed card with a title, fields and an image, and it is the right shape for a stock alert: product name as the title, price and stock as fields, the link on the title. The combined 6,000 characters counts the title, description, field names, field values, footer and author name across every embed in the message.
Discord does not publish one fixed number for a webhook, and says so. Its rate limits page states that "rate limits should not be hard coded into your app", and that an app should read the response headers instead. What it does publish:
Say a shop starts a sale and 200 prices drop inside a minute. That is about three alerts a second, well under the global limit, but a tool that fires all 200 at the same instant is likely to hit a per-route limit and get a run of 429s. If it retries each one straight away, every retry is another invalid request. A well-behaved sender queues the messages for each webhook, sends them one after another, and waits out retry_after when Discord asks. On a shared service one badly behaved sender can get the IP restricted for every customer on it.
| What you see | Likely cause | What to do |
|---|---|---|
| Nothing arrives, and the tool logs a 404 | The webhook was deleted, or its URL was mistyped | Create a new webhook. Discord says a webhook that returns 404 should not be used again |
| Some alerts arrive, some do not, 429 in the logs | Rate limited during a burst | The sender should wait for retry_after. If it is your own script, add a queue |
| One particular alert never arrives, 400 in the logs | The message broke a length limit | Shorten the description or split the fields |
| Nothing arrives from a forum channel webhook | No thread given | Point the webhook at a normal text channel |
| Messages you did not send appear in the channel | The URL has leaked | Delete the webhook and make a new one |
Yes. The webhook reference lists versions of get, modify and delete that take the token from the URL, and says each one "does not require authentication". So anyone who has the URL can post into your channel, rename the webhook, or delete it. Do not paste it into a public repository, a screenshot or a support forum. If it has been exposed, delete it in Server Settings and create a new one, then update the tool.
You paste the webhook URL into Settings and hit test, as the notifications help article shows. Each alert, whether it is a restock, a price drop, a new product or a page changing, arrives as one embed from a sender named StockWatch. A monitor can also tag @everyone when it fires. To send different products to different channels, give each channel its own webhook and use keyword routing.
Sends are queued per webhook and wait out Discord's retry time on a 429, so a sale that drops hundreds of prices arrives as a steady run of messages instead of a wall of refusals. If you are deciding what to watch in the first place, watching a page for a specific word covers the setup, and why restock alerts arrive too late explains why Discord beats email when seconds count.
No. Discord's developer docs say webhooks do not require a bot user or authentication. A monitoring tool only needs the webhook URL.
No. You choose one channel when you create it. For alerts in several channels, create a webhook in each and route alerts to the right one.
Discord does not publish a fixed per-webhook number and says limits should not be hard coded. It publishes a global limit of 50 requests per second and answers 429 with a retry_after value when a sender goes over.
The webhook no longer exists, usually because someone deleted it, or the URL was copied wrongly. Discord says not to keep using a webhook that returns 404, because repeated attempts lead to a temporary restriction. Create a new one.
2,000 characters of plain text, plus up to 10 embeds holding no more than 6,000 characters between them. An embed description can be up to 4,096 characters.
Send website change alerts to your Discord server Five pages free, checked every 60 seconds, alerts to Discord, email or Telegram.