Instagram DM automations
Someone comments a keyword on your post, Zippy DMs them back — and the link in that DM springs the real native app instead of dying in Instagram's in-app browser, so you finally see who actually opened it.
Instagram DM automations
Say "comment LINK" in your caption. Someone comments LINK. Zippy DMs them your link, optionally replies under their comment, and tags them.
That part is table stakes — ManyChat has done it for years. Here's the part that isn't: the link in the DM is always a Zippy link, so the tap springs the real native app instead of Instagram's in-app browser, and the app-open lands in your stats. Every other comment-to-DM tool can tell you how many DMs it sent. Only this one can tell you how many of those people actually opened the app.
DM automations are a Legend feature.
Not connectable yet — Meta hasn't approved us
This whole surface is built, tested, and switched off. There is no Meta app to connect to yet, and App Review hasn't been submitted. Read Instagram setup → What actually works today for the unvarnished status before you plan around it.
Want the outcome today, with no approval from anyone? Keep your existing ManyChat flow and swap the raw URL for a Zippy link — the ManyChat recipe. Same webview escape, same app-open stats, works on any plan, right now.
How do I auto-DM people who comment on my Instagram post?
Once you're connected, in Instagram → New automation:
- Pick the trigger. "Someone comments on my post" is the 90% case.
- Set the keywords.
LINK,PRICES,SEND IT— up to 10, matched case-insensitively. Choose contains (the comment includes one of your words) or is exactly (the whole comment is one of them). Leave the keywords empty and it fires on every comment, which is a real setting and not a mistake. - Optionally pin it to one post so a rule only listens to a single reel.
- Write the DM. Just the words — see below for why you don't type the link.
- Attach the link. Pick one of your Zippy links from the dropdown.
- Optionally add a public reply ("check your DMs 💌") and tags for everyone the rule replies to.
The builder shows you a live preview of the exact message your follower receives and a one-line summary of when it fires, both rendered by the same code the server uses — so what you see cannot drift from what gets sent.
Up to 25 rules per connected account.
What are the four triggers?
| Trigger | Fires when | Typical keyword |
|---|---|---|
| Someone comments on my post | They comment on a post or reel | LINK |
| Someone DMs me a word | They message you directly | PRICES |
| Someone replies to my story | Any story reply comes in | SEND IT |
| Someone mentions me in their story | They tag you in their story | (usually blank — great for UGC thank-yous) |
All four use the same keyword matching and the same DM composer. The difference is which Instagram surface starts them, and — importantly — which reply window Instagram gives you.
Why can't I type a link into the DM text?
Because a raw URL in a DM is exactly the leak this feature exists to plug.
Tap a bare https://… inside Instagram and it opens in Instagram's in-app browser: a
webview where your follower is logged into nothing, Apple Pay doesn't exist, and cookies
are walled off from the pixel you're paying for. The DM landed. The checkout didn't. And
the tap reports nothing back to you.
So the link is attached, not typed. You pick a Zippy link; Zippy appends its short URL to your message at send time. If you paste a raw URL into the DM text anyway, saving the rule fails with a message explaining why, and even if a rule somehow got saved that way the send itself refuses. That's deliberate: we'd rather skip one DM than ship one that can't open the app and can't be measured.
The Deep Link Debugger shows you the difference on your own destination, side by side.
When will Instagram not let my automation send?
Instagram restricts unsolicited messaging hard, and an account it restricts is not something anyone can hand back to you. So Zippy refuses to send whenever the rules are unclear, and tells you rather than failing quietly.
| Situation | What happens |
|---|---|
| They DM'd you more than 24 hours ago | Skipped — Instagram's standard reply window closed |
| The comment is more than 7 days old | Skipped — that's Instagram's private-reply window |
| Another rule already replied to that comment | Skipped — Instagram allows exactly one DM per comment |
| It's a comment on a live video | Skipped — only allowed while the live is running, which we can't verify |
| Instagram didn't tell us when it happened | Skipped — we won't guess our way outside a window |
| You're sending very fast | Skipped — we throttle below Instagram's limit so we stop you before they do |
| Your connection lapsed, or you downgraded | Skipped — with the reason, and nothing is lost |
Every skip is a row in the automation's history with that explanation in plain English — never a raw Meta error code, never silence.
One structural guarantee worth stating: every DM Zippy sends is a reply to a specific person who just interacted with you. There is no way to point this at a list. There is no audience field to fill in. That isn't a policy we promise to follow, it's the shape of the thing.
How do I know if my DM automation actually worked?
Two numbers, and the second one is the whole point.
Sends — how many DMs went out, how many were skipped, how many failed, and how many distinct people you reached. Every comment-to-DM tool has this.
App opens — of the people who tapped the link in that DM, how many landed in the real native app versus the in-app browser versus nowhere useful. Zippy's redirect engine records what happened after the tap, so a rule's report reads:
- opened — they reached the real app. Logged in, cards saved, pixel alive.
- browser — the webview won.
- broken — the hand-off went nowhere useful.
That's the answer to "my DM automation gets clicks but no sales", and it's the number a click counter structurally cannot produce.
App-open rates are a sampled estimate and are labelled as such. A rule whose link has no measured taps yet reports no rate at all rather than a misleading 0%.
One link per rule
Give every automation its own Zippy link. The stats are per-link, so a dedicated link is what turns "did my DM traffic open the app?" into a question with an answer per rule. Tags and folders keep them tidy.
Can I do more with the people who replied?
Yes — that's what the tags are for. A rule stamps its tags on everyone it replies to, so "everyone who commented DROP on the launch reel" becomes a group you can act on rather than a number you watched go by.
From there:
- Audience segments slice the resulting taps by country, device, and outcome — a segment filtered to opened is your true-fan list.
- Email capture turns those taps into contacts you own, off Instagram entirely. Instagram can restrict your reach tomorrow; an email list can't be restricted by anyone.
- Webhooks push
app.opened/app.browser/app.brokento your own stack the moment a DM tap resolves — no polling.
Notes
- Legend plan. Downgrade and your rules go read-only, never deleted. Links you already DM'd keep redirecting forever.
- Nothing is sent to your followers while our Meta app is unapproved — see setup.
- Same rules, both surfaces. Web and mobile read the same trigger copy, the same preview, and the same skip explanations from one source, so they can't tell you two different things.
- Your token is never readable back, not even once. See how Zippy stores your Instagram access.
Related
- Instagram setup — the prerequisites, the permissions, and the honest approval status.
- ManyChat — the version that works today, on any plan, with zero approval.
- Deep Link Debugger — watch a link escape the in-app browser before you attach it to a rule.
- Webhooks · n8n — push the outcome into your own automation.
- Audience segments · Email capture — what to do with the audience a rule builds.
- UTM builder · A/B split testing — attribute and race the links your DMs carry.
- Blog: ManyChat DMs a link that dies in the in-app browser
- Changelog: Instagram DM automations and keyword, story reply & story mention triggers