How to set up Instagram comment-to-DM automation, step by step

Setting up comment-to-DM needs four things: an Instagram Business or Creator account, a connection made on Meta's own authorisation screen, a post to watch and a word for people to comment. After that you write the message they receive, switch the campaign live, and test it from an account that is not your own. This walkthrough covers each step and the settings that quietly change what gets sent.
The step people get wrong is the test. Instagram refuses a private reply addressed to the account that owns the post, so commenting your own keyword sends nothing and a working campaign looks dead.
Before you start
Two prerequisites, neither negotiable. The first is the account type: Meta only allows this kind of automation on professional accounts, so a personal account has to be switched to Business or Creator in the Instagram app first. It is free and reversible.
The second is how you connect. You are sent to Instagram's own authorisation page, you approve a named list of permissions, and Instagram hands the app a token. Nobody asks for your password. HookSend requests four permissions: instagram_business_basic to read your profile and media, instagram_business_manage_messages to send the DM, instagram_business_manage_comments to see the comment that triggered it, and instagram_business_manage_insights to report whether the campaign worked.
Three things commonly go wrong here, and the error wording tells you which. Declining the permission prompt cancels the connection, so start again and accept the whole list. Leaving it half-finished for more than ten minutes expires the login link, which needs a fresh attempt rather than a reload. And an account already linked to another workspace has to be disconnected there first.
Pick the post before you write a word
The trigger comes first, because it changes what the rest of the campaign is allowed to do. Under Trigger Architecture you choose the channel (Post / Reel, Story, Ads or Live), then the target media. Posts have three options.
- Specific post or reel. The grid loads your whole library rather than the most recent page, and you can search captions. A post another campaign already uses is outlined in amber, and its tooltip names that campaign.
- Any post or reel. One campaign covering everything you have published. Sensible for a permanent word like your brand name, risky for a common one.
- Auto-attach to next upcoming reel. The campaign waits and binds itself to the next reel you publish, which is how you set one up before the content exists.
When a comment could match a specific-post campaign and an any-post campaign at once, the specific one wins and the catch-all is skipped, whatever either one's keywords say. That rule matters once you have six campaigns running.
Choose one keyword, not five
The Keyword Match Rule takes a comma-separated list, and its placeholder shows the shape it expects: LINK, DROP, PRICE, VIP. Several words behave as OR, and whichever one matched is recorded against that send.
Case is ignored. Campaign matching is whole-word, so LINK does not fire on “linking”, and emoji and punctuation are stripped out of the comment first, so “LINK!!! 🔥” still matches. The other option, Any message / reply, answers every comment on the post and needs no keyword.
Write the two messages people actually receive
Step 2 of the builder is the DM. The main message carries your link and is the only compulsory piece of copy. Send Opening Greeting First adds a short message ahead of it with a button of its own, which is what makes the exchange read like a conversation rather than a delivery.
Add Tracked Action Button turns the main message into a button template. A second link button is optional, and buttons that hand somebody on to a DM flow or an AI chat share the same slots. Instagram shows three buttons at most, so a campaign with two links has room for one of anything else.
| Field | Limit | Why that number |
|---|---|---|
| Campaign name | 100 | Internal reference, never shown to anybody you DM |
| Opening greeting | 640 | It always ships with a button, and Instagram caps a button template's text at 640 |
| Main DM, with a button | 640 | Same reason. Adding a link or a flow button lowers the ceiling |
| Main DM, no button | 1,000 | A plain text message gets the longer allowance |
| Any button label | 20 | Instagram truncates a longer title on the phone, so it is cut here instead |
| Public comment reply | 1,000 | Up to ten variations, so one sentence does not appear forty times in a thread |
Post public comment reply is worth switching on. It answers under the comment in public, which tells everyone else scrolling that the DM is real, and the variations keep the thread from looking mechanical. It is offered for posts and for ads, though not for a live broadcast, whose comments scroll away with the stream.
The settings that change what gets sent
Most of the toggles in step 2 are optional, and each changes the shape of the conversation rather than only its wording. Four need a paid plan, and the builder shows those with a lock.
| Setting | What it changes | Plan |
|---|---|---|
| Trigger on incoming DMs too | The same keyword also works when somebody DMs it instead of commenting | Every plan |
| Post public comment reply | Adds a public reply under the comment, with up to ten rotating variations | Every plan |
| Send Opening Greeting First | Sends a short intro with a button before the message carrying the link | Every plan |
| Require Follow First | Sends an Open profile button and a verify button, holding the link until they follow | Starter and above |
| Conversational Lead Capture | Asks for an email in the DM, files it under Leads, then sends the link | Starter and above |
| Automated Delayed Follow-Up | One reminder message, 0 to 1,440 minutes after the link | Starter and above |
| Product Carousel format | Replaces the text reply with up to eight swipeable product cards | Pro and above |
Test it from somebody else's account
Press Go Live, then open the post on a second Instagram account and comment the keyword. Your own comments and comment replies are ignored deliberately, because Instagram rejects a private reply addressed to yourself. Testing from the account that owns the post is the most common reason a correct campaign looks broken.
- Comment the keyword from a second account, or ask one person to do it.
- Watch the DM arrive. The opening greeting comes first if you enabled it, then the message with your link.
- Open the delivery log and confirm the row says Sent. It records the comment text and the keyword that matched.
- Tap your own button from the recipient's side, so a broken link turns up now instead of during a launch.
- Comment something that should not match, and check nothing is sent.
One caveat on the last step. If you run Comment Guard, its instant pattern rules fire before the campaign and can hide a comment before any DM is considered, which looks identical to a keyword that failed to match. A hidden comment leaves no log row at all.
What to check after the first real comments
The campaign page shows four numbers: Sends, Clicks, CTR and Failed. Clicks come from the tracked link, so a campaign with no button reports zero and that is accurate rather than broken. The delivery log is where you diagnose everything else, and its statuses are specific.
| Status | What happened | What to do |
|---|---|---|
| Sent | The DM reached them | Nothing |
| Queued | Past the hourly cap, waiting its turn | Nothing. A queued DM is not a lost DM |
| Rate limited | Its turn would fall after Instagram's reply window closes | Retry from the log while the comment is still recent |
| Skipped | The plan's monthly DM allowance is used up | Upgrade, or wait for the billing period to reset |
| Dedup | Another of your campaigns used the one private reply allowed for that comment | Remove the overlap between the two campaigns |
| Failed | Meta refused the send, and the reason sits on the row | Read the error, fix it, retry from the log |
If a reel does unexpectedly well you will see a queue notice on the campaign rather than a wall of failures. Meta documents 750 private replies per hour per Instagram professional account for comments on posts and reels, and accepts a private reply up to seven days after the comment. Past the cap each DM takes the next place in a queue spaced across the hour, and the notice estimates when the last one goes out.
Nothing is dropped past the hourly cap. A DM is abandoned only when its turn would fall after Instagram's seven day reply window has closed, which on an ordinary spike does not happen.
The mistakes that cost people their first week
- Saving the campaign without switching it live. A paused campaign is a complete, correct campaign that answers nobody.
- Two campaigns whose targets overlap, usually an any-post campaign left running underneath a newer post-specific one. Only one of them can send.
- A keyword that also appears in ordinary conversation, so people who wanted nothing get a DM and a few of them report it.
- A link that works while you are logged in and 404s for everyone else, which is why you tap it from the recipient's side.
- Building the campaign on a trial with the follow gate on, then dropping to Free. The campaign keeps running, without that step.
Where to go next
Two other pages here cover what a walkthrough has to skip. If you want copy to paste rather than write, /instagram-comment-to-dm-templates sets out whole campaigns. If you are still deciding whether the feature suits what you sell, /comment-link-automation describes it without the builder detail.
After launch, the setting worth the most attention is the keyword. Everything else here is a field you fill in once, and the word decides who receives a DM at all.
Questions people ask about this
- How do I set up comment-to-DM on Instagram?
- Switch your Instagram account to Business or Creator, connect it through Meta's authorisation screen, then build a campaign: pick the post or reel, type the keyword people will comment, write the DM that carries your link, and switch it live. Test it by commenting the keyword from a second account, because Instagram will not deliver a private reply to the account that owns the post.
- Do I need a Business or Creator account for comment-to-DM?
- Yes. Meta only permits comment-to-DM automation on professional accounts, so a personal account has to be switched over first. The change is free, takes about a minute in the Instagram app, and you can switch back whenever you want. No tool can work around this, whatever its marketing says, because the permission itself is only issued for professional accounts.
- Why is my comment-to-DM automation not sending anything?
- The usual causes, in order: the campaign was saved but never switched live, or the test comment came from the same account that owns the post, which Instagram refuses to private-reply to. After that, read the delivery log. A row marked Dedup means another of your campaigns used the one private reply Instagram allows for that comment, and no row at all usually means the keyword did not match.
- Can one comment trigger two different DMs?
- No. Instagram allows exactly one private reply per comment across every campaign on an account, so when two of your campaigns match the same comment the first sends and the second is logged as skipped with the winner named. The public comment reply is separate and each campaign can still post one, but only a single DM ever leaves.
- How many automated DMs can go out in an hour?
- Meta documents 750 private replies per hour per Instagram professional account for comments on posts and reels, which is well above the 200 figure repeated across most of this niche. A private reply is also accepted up to seven days after the comment, so a tool that queues rather than drops can clear a viral spike over several hours without losing anybody.