Your comment-to-DM automation is live, someone commented the keyword, and nothing happened.
Most troubleshooting guides hand you eight things to check in no particular order. That is the slow way, because the causes have different symptoms, and knowing which symptom you have tells you which cause it is without checking the other seven.
This is ordered by how often each one actually happens, with the symptom that identifies it.
First, the question that halves the search
Did the public reply appear under the comment?
Comment-to-DM is two separate actions: a public reply, then a private DM. Whether the public one appeared splits the problem cleanly.
| Public reply | DM | Where the problem is |
|---|---|---|
| No | No | The trigger never fired. Sections 1 to 4. |
| Yes | No | The trigger fired. The send failed. Sections 5 to 7. |
| No | Yes | Public replies are off in your settings. Not a fault. |
Answer that before reading further, because it removes half of what follows.
1. You commented on your own post
This is the single commonest cause and almost no guide mentions it, because it is not a fault. It is a deliberate guard.
Every serious tool refuses to DM the account owner or another admin of the same Instagram account. Without that guard, your own reply to a commenter would trigger your own automation, which would reply to itself. Testing your automation by commenting from the account that owns the post therefore does nothing, on purpose.
Symptom: nothing at all happens, no public reply, no DM, and the tool's logs show either no event or a skip.
Fix: test from a completely different Instagram account. Not a second profile you administer, a genuinely separate account.
Worth knowing: the guard usually matches on the account's own IDs and username. An admin who comments from a personal account that also has a role on the business will sometimes slip through and receive a DM. If you get an automated DM from your own brand, that is what happened.
2. That person already used up their one private reply
Meta allows one private reply per comment, ever. Not one per day, not one per campaign.
This catches almost everyone during testing. You comment PRICE, it works. You tweak the message, comment PRICE again on the same post from the same account, and nothing arrives. The automation is fine. That commenter has already had their reply.
Symptom: it worked the first time and never again for that person on that post.
Fix: comment from a different account, or on a different post. There is no way to reset it.
The same rule means fixing an automation cannot rescue old comments. If your rule was misconfigured on Monday and you fix it on Wednesday, everyone who commented on Monday is spent. Their comment is used.
3. The keyword did not match the way you think
Two different things go wrong here, and they look identical.
Whole-word matching. A well-built tool matches price as a whole word, so it does not fire on "surprise". If yours matches substrings instead, you get the opposite problem: false triggers everywhere. Check which yours does before assuming the keyword is wrong.
Punctuation and case. Price! and PRICE should both match price. Emoji and stray characters usually should not break it. If your tool is doing a literal comparison, a comment of price? may miss.
Symptom: the automation fires for some comments and not others, with no obvious pattern.
Fix: comment the keyword alone, lowercase, nothing else. If that works, your matching is stricter than you assumed and the keyword list needs widening.
4. The rule is not watching that post
Most tools offer several scopes and they behave differently:
- All posts: fires anywhere.
- Selected posts: fires only on the posts you ticked. A post published after you made the rule is not included.
- Next post: arms itself against the next thing you publish, then binds to it. If it has already bound to a post from last week, your new post is not covered.
Symptom: the automation works on one post and not another.
Fix: open the rule and confirm which post IDs it holds. This is the one that catches people who set up a rule, then post a reel, then wonder why the reel is not covered.
5. Your access token expired
Now we are in the second half, where the trigger fires but the send fails.
Instagram access tokens are long-lived, not permanent. They last around 60 days and must be refreshed. When one expires, everything looks normal in your dashboard, because the tool cannot know its token is dead until it tries to use it.
Symptom: the automation worked for weeks and stopped everywhere at once, on every post, on the same day.
That symptom is diagnostic. A configuration mistake affects one rule. An expired token affects everything simultaneously, which is why "it all stopped at once" almost always means the token.
Fix: disconnect and reconnect the Instagram account in your tool. This is also why "reconnecting fixes it" appears in every guide: it silently replaces the token.
6. You hit the 750 per hour ceiling
Meta allows 750 private replies per hour per Instagram account for comments on posts and reels. That is a platform limit, not a tool setting.
A reel that takes off can pass 750 comments in an hour easily. Everyone past the limit gets nothing, and unless your tool queues them, they get nothing later either.
Symptom: it worked for the first wave of commenters and stopped for the rest, during a post that was performing unusually well. The worse symptom: it worked all week and failed on your best day.
Fix: check whether your tool has an hourly cap setting and whether it queues or discards the overflow. Discarding is common and rarely disclosed.
7. Meta has restricted the account's messaging
Meta sends a messaging_policy_enforcement signal when it is unhappy with an account's message patterns. Sending stops, and Instagram does not email you about it.
Symptom: sends fail across the board with no configuration change and a working token.
Fix: stop the automations rather than retrying. Sustained failed sending during a restriction extends it. Check whether your tool surfaces this signal, because most do not, and it arrives as a webhook that a tool has to be listening for.
Three silent failures nobody reports
These produce no error anywhere, which is what makes them expensive.
A webhook that was never subscribed. Connecting an Instagram account and subscribing to its webhook fields are two separate API calls. If the second one fails, the tool looks connected, shows your handle and your posts, and never receives a single comment. Everything appears healthy. The only way to tell is to check the account's subscribed fields directly, and almost no interface shows you them.
The account moved workspaces. If the same Instagram account was connected to a second workspace, inbound events go to whichever one the lookup returns, which is usually the newest. Your automations sit in the other one, perfectly configured, receiving nothing.
The comment webhook is genuinely unreliable. In our own production logs we recorded stretches where Meta delivered comment events with an empty changes array, meaning the notification arrived carrying nothing. The comment existed on Instagram. The webhook did not describe it. A tool that relies purely on webhooks has no way to know this happened; one that also polls the comments endpoint periodically will catch it. Ask your provider whether they poll as a fallback, because if the answer is no, they are trusting a delivery mechanism that we have watched fail.
The fastest path
- Did the public reply appear? Splits the problem in half.
- Are you testing from your own account? Use a different one.
- Has that person already commented on that post? Their one reply is used.
- Did everything stop at once, everywhere? Reconnect the account.
- Did it stop mid-way through a busy post? You hit 750 per hour.
Most cases are 2 or 3, and both are working as designed rather than broken.
A note on testing
Because a private reply is one per comment, every test burns a comment. Set up properly before you start:
- one throwaway Instagram account that has never interacted with yours
- one post you do not mind filling with test comments
- the keyword written down, so you do not mistype it and blame the tool
Get the automation right on paper first. You have fewer attempts than you think.
If you want to see whether the underlying platform limits explain what you are seeing, every published figure is collected in Instagram DM automation limits, each one quoted from Meta's own documentation.
Questions people ask
Why is my Instagram comment-to-DM automation not sending?
The commonest cause is testing from the account that owns the post, which every tool deliberately refuses to DM. After that, the most frequent causes are that the person has already used their one permitted private reply for that comment, an expired access token, or hitting Meta's limit of 750 private replies per hour.
Why did my Instagram automation work once and then stop for the same person?
Meta permits exactly one private reply per comment, ever. Once someone has received the automated DM for a given comment, commenting again on the same post will not produce another. Test with a different account or a different post.
Why did all my Instagram automations stop working at the same time?
Everything failing simultaneously across every post almost always means an expired access token. Instagram tokens are long-lived rather than permanent, lasting about 60 days, and nothing warns you before they expire. Disconnecting and reconnecting the account issues a fresh one.
Can I DM someone who commented last week after I fix my automation?
No. The one-private-reply-per-comment rule means a comment left while your automation was broken is spent. Fixing the automation does not make those comments available again, and there is no way to reset them.
Why did my automation stop halfway through a viral post?
Meta caps private replies at 750 per hour per Instagram account for comments on posts and reels. A post performing unusually well can pass that inside an hour, and everyone beyond the limit receives nothing unless the tool queues the overflow, which many do not.
My tool shows my Instagram account as connected but nothing arrives. Why?
Connecting an account and subscribing to its webhook fields are two separate API calls. If the subscription failed, the tool still shows your handle, avatar and posts while receiving no events at all. Nothing in the interface indicates it, so the subscribed fields have to be checked directly.
Stop losing leads to the follow-up gap
Kredoo captures leads from Meta and Google Ads, then follows up on WhatsApp automatically. Live in 5 minutes.
Get Started