← all posts
The Zippy Team

Your DM Buttons Get Tapped. Do You Know Which One Opened the App?

Instagram DM buttons that each carry their own Zippy link — so you see which button actually landed people in the real app, not just which one got tapped. Plus why we still won't let you type a URL into one.

instagramdm automationbuttonsquick repliesin-app browserapp opensemail capture
Zippy the limbless lightning-bolt mascot beside a phone showing an Instagram DM chat with a stack of reply buttons, the top button firing an app icon up out of the screen while the others stay flat and dim
Zippy, the lightning-bolt mascot

Zippy: a button that gets tapped is a vanity metric. a button that opens the app is a sale.

The irony we shipped for months

Zippy exists to stop you typing a link into an Instagram DM. Type mybrand.com/sale and Instagram auto-links it, the tap opens Instagram's in-app browser, and your customer arrives logged out with no Apple Pay and no pixel. So the DM builder refuses a typed link and makes you attach a real one instead.

And then it sent that link… as text. Which Instagram auto-links. Which is the shape we spent all that effort refusing.

It worked — the link was ours, so it sprang the real app and reported back. But it was one tappable thing in a wall of words, and it could only ever answer one question: did the DM work?

Buttons

Now a rule can carry up to three buttons, and each one carries its own Zippy link.

Two ways to grab them — pick whichever suits you 👇

  [ The presets ]   [ Watch the demo ]

Two buttons. Two links. Two separate app-open rates.

That last sentence is the entire feature. Every other DM tool can tell you a button got 230 taps. Only this one can tell you that 96 of those 230 people ended up inside the real app, and that the other button — with fewer taps — put 351 out of 410 there. The one that looks like it's winning is losing.

It's not a new measurement. It's the same Workers Analytics Engine data, the same 90-day window and the same rounding as every other app-open number in Zippy, because a button is just a link and we already measure links. Which is precisely why nobody else can add this next quarter: they'd have to build the measurement first, and the measurement is the hard part.

Three kinds of button

A button that opens a link. The one above. Points at one of your links.

A button that tags them. No link — the tap just tags that person with the button's own words. "Tell me more" tags them tell me more. Then your next rule can answer them differently with the tag condition, and you never wrote a payload or learned a second vocabulary for the same button.

Ask for their email. Instagram offers them their own address; one tap hands it over and it lands in your Audience. Same consent wording as your fallback page, in the message body where they can actually read it — because Instagram caps a button label at 20 characters and won't let us put a label on that one at all. Words nobody can read aren't consent.

Still no URL field

A button has no URL field. Not "we validate it" — there is nowhere to put one. It points at a link you own, exactly like the rule does.

And the label goes through the same guard as the message body, because twenty characters is more than enough room to type bit.ly/x, and Instagram would cheerfully auto-link it into the in-app browser. Type a domain into a button label and Zippy refuses it and shows you which words it meant.

The two places buttons don't show up

Instagram doesn't draw buttons in desktop DMs. And on the DM that answers a comment, Instagram's own documentation only covers plain text — so we send plain text there, rather than ship something unverified into your followers' inboxes and find out the hard way.

Neither one can strand anybody, and that's by construction rather than by care: the link is always in the words too. If your rule has its own link, that's what's in the text. If the only link you attached lives on a button, we put that one in the text. So the worst case on a surface with no buttons is a message with a working link in it — which is exactly what this feature replaced.

We can't detect a desktop reader from a webhook. Nothing in Instagram's payload says which client someone is on. So we didn't build a guess; we built a message that doesn't need one.

What this doesn't do

  • It's not a flow builder. A button has no outgoing edge. There is no next-node, no canvas, no zoom control. Three buttons on one rule is still a form you read at a glance.
  • It won't gate anything. Same law as conditions: a button can change what someone reaches, never whether the link you promised goes out.
  • The app-open number is still a heuristic. Sampled, whole-numbered, with known false readings. Compare two buttons on a clear gap, never on a decimal.

And the honest part

Our Meta app is unapproved, and DM automations are dark. Nothing in this post sends to a real follower today. You can build the rule, see the exact message, and read the docs; you cannot yet go live. We'd rather say that here than let you find out after you've built something.