Something is not sending and the tool is telling you nothing useful. This post is the order to check things in, and the order is not arbitrary — it is sorted by how often each cause is actually the cause on a system that has processed around fifteen thousand of these events.
The numbers below are from this product's own database. We are one tool among many and our distribution will not be exactly yours, but the shape of it holds everywhere, because the causes are Meta's rather than any vendor's.
Start here: it probably matched nothing
Every outcome recorded, all time:
| What happened | Count | Is it a fault? |
|---|---|---|
| Matched no automation at all | 11,377 | no |
| Sent | 3,204 | no |
| Matched, failed the keyword condition | 561 | no |
| Refused: cooldown | 35 | no — working as intended |
| Platform rejected the send | 28 | sometimes |
| Refused: rate budget | 19 | no — working as intended |
| Send failed on our side | 16 | yes |
| Refused: duplicate event | 9 | no — working as intended |
| Refused: burst | 5 | no — working as intended |
| Refused: connection unhealthy | 1 | yes — go fix the connection |
| Refused: a human took over | 1 | no — working as intended |
For every reply that went out, roughly four events matched nothing. Another 561 matched an automation and then failed its keyword condition.
Genuine faults — the send failing on our side, or a connection that had gone bad — total seventeen across the whole history. Seventeen, against nearly twelve thousand non-matches.
So the overwhelmingly likely answer to "why did nothing send" is that from the system's point of view nothing was supposed to. That is not a comforting answer, but it is the one that saves you an afternoon on the wrong problem.
The nine causes, in order
- The comment did not contain your trigger. Your keyword is
LINK. They typedlink plz,Link 🙏,linkk,send link, or in an Indian account very oftenlink bhejo. Most tools match case-insensitively but not typo-insensitively, and none of them match intent. - The automation is scoped to a different post. Scoping is the right practice — a one-word comment is only unambiguous when the post makes it so — and it is also the most common way an automation quietly covers nothing. Check which posts it is actually attached to.
- The event never arrived, because the webhook subscription lapsed. This is the silent one. On our own connections there are 29 webhook subscriptions recorded and 14 unsubscribe events — roughly one in two connections has lost it at some point. Nothing looks wrong: the account name is still on screen, the automation is still switched on, and no events are coming in at all.
- The token expired. Long-lived Instagram tokens last around 60 days and renewal can fail quietly. The connection screen keeps showing your name and picture because they were cached when you connected. The tell is silence rather than errors.
- A permission was not re-granted. Reading comments and sending messages are separate scopes. Miss the messaging one on the consent screen — easy on a reconnect, where people click through fast — and the tool can see every comment and send nothing.
- The public reply killed the DM. Least known, and worth testing for. Comment-to-DM is usually two API calls: a public reply under the comment, and the private message. They fail independently. If the public reply errors and the tool treats that as fatal, the DM never fires. Build a DM-only version with no public reply; if that works, you have found it.
- The window had closed. Seven days from the comment, twenty-four hours from a DM or story reply. Past that, no tool on the official API can send — not on a higher plan, not with a different vendor. Check a specific thread here.
- A guard refused it on purpose. Cooldown because that person already heard from you recently. Duplicate because Instagram redelivered the same event. Rate budget because a post travelled. These are the system working. A good tool names which one and when.
- You are using Meta's own automation, which waits. Instagram's built-in keyword responses in Business Suite are documented as firing about 15 minutes after the message, so a human can answer first. Not broken. Waiting.
Ten minutes to isolate it
Checklist
What a tool owes you when it does not send
This is the part worth taking away even if your problem turns out to be a typo in a keyword.
A refusal and a failure are different things, and a tool that cannot tell you which one happened has left you to guess. Every send that does not go out should be recorded with the reason, in words, visible to you afterwards. Ours names ten checks — kill switch, connection, takeover, window, dedupe, cooldown, quiet hours, rate budget, credits, content safety — and the first one to fail stops the send and gets written down.
That is also why the numbers at the top of this post exist at all. We can tell you that 35 sends were stopped by cooldown and 9 by duplicate delivery because each one was recorded when it happened.
Ask any tool in this category what its refusal rate is. Zero is not a good answer — it means nothing is being checked.
About 2.3% of our sends are refused by a policy check. If yours reports nothing ever being stopped, either your account is unusually quiet or the checks are not running, and only one of those is good news.
If it is still not working
Two things worth knowing before you conclude the tool is broken.
Meta has outages. Check Meta's status page before assuming it is you. A handful of our own failures trace to the platform being unavailable rather than to anything in the automation.
Instagram redelivers. The same comment can arrive twice, which is why a duplicate check exists. If you are seeing two DMs rather than none, that is this, and the fix is a tool that dedupes rather than one that sends faster.
For the rules underneath all of this — what the API permits, the two windows, and what no tool can do at any price — the complete picture has it in one page.
Questions people ask
Why is my Instagram comment-to-DM not sending?
Overwhelmingly because the comment never matched your automation rather than because anything is broken. On our own production data there are about four events that match no automation for every reply that goes out. Check the match before you check the plumbing: your trigger word against what people actually typed, then whether the automation is scoped to that post.
How do I know if my Instagram token expired?
You usually cannot tell by looking, which is the problem. The connection screen keeps showing your account name and picture because those were cached at connect time. The reliable signals are that nothing has sent for a while and that no new events are arriving at all — not that some are failing. Reconnecting through Meta takes under a minute and fixes most of these.
Why did my automation stop working after I reconnected Instagram?
Two reasons. A permission may not have been re-granted on the consent screen — messaging is a separate scope from reading comments, and an account that can read but not send looks connected and does nothing. Or the webhook subscription did not come back with the connection. Both are silent.
Can a public comment reply stop the DM from sending?
Yes, and it is the least-known failure in this category. A comment-to-DM automation is usually two separate API calls — a public reply and a private message — and they fail independently. If the public reply errors and a tool treats that as fatal, the DM never fires. Testing a DM-only version with no public reply is the fastest way to isolate it.
Is there a delay on Instagram comment-to-DM?
Through a third-party tool on the official API, no — a few seconds is normal. Through Instagram’s own keyword automation in Meta Business Suite there is a documented wait of about 15 minutes, deliberately, so that a human can answer first. If your "automation" is Meta’s built-in one, it is not broken, it is waiting.
How many automated replies should be refused?
A small share, and it should not be zero. On our system 68 sends out of nearly 3,000 were stopped by policy checks — about 2.3%. Cooldown and rate budget account for most of them. A tool reporting that it never refuses anything is not being careful; it is not checking.
