Click-to-Instagram Direct Ads: How to Set Them Up and Auto-DM Every Tap
What click-to-Instagram Direct ads are, how to create one in Meta Ads Manager, and how to auto-send each ad's tappers a tailored DM or carousel within seconds.
Meta has been quietly making Click-to-Instagram-Direct (CTM) ads the highest-converting paid format for IG creators for about two years. The premise is simple: instead of sending paid traffic to a landing page (where mobile users abandon at ~70%), your ad has a Send Message button that opens a DM thread directly inside the IG app. No webview, no app-switching, no abandoned cart.
For creator-led brands and DTC businesses with strong mobile audiences, keeping the whole conversation inside Instagram removes the biggest drop-off point: the slow mobile landing page.
The catch: when 200 people tap your ad's Send Message button on a Tuesday, they all open a fresh DM thread on your IG handle. If your DM doesn't immediately address what the ad promised, you've burned the warmest part of the funnel. Generic "Hi! Thanks for reaching out 👋" destroys the conversion.
The fix is per-campaign DM routing. Each ad gets its own scripted DM (or carousel). The right thing lands in the user's inbox in under 3 seconds. First, the basics.
What are click-to-Instagram Direct ads?
Click-to-Instagram Direct ads (Meta also calls them click-to-message ads, and many people say "CTM") are regular Instagram or Facebook ads whose button opens a DM conversation with your Instagram account instead of a website. They can run in feed, Stories, Reels and Explore. The person taps Send message, a chat with you opens with a pre-filled greeting, and the conversation starts inside Instagram.
How to create a click-to-Instagram Direct ad in Ads Manager
- In Meta Ads Manager, create a campaign with the Engagement objective (Sales and Leads also support message destinations).
- At the ad set level, set the conversion location to Messaging apps (on some accounts, Message destinations) and select Instagram.
- Choose your audience, budget and placements as usual.
- At the ad level, pick your Instagram account, add your creative, and set the call-to-action to Send message. Optionally customise the greeting and the suggested questions people see when the chat opens.
- Publish. Once it's live, copy the numeric ad ID from Ads Manager; you'll use it to route that ad's tappers to the right DM.
Menu names move around in Ads Manager, but the key choice is always the same: a messaging conversion location with Instagram selected.
Why generic DMs lose the moment
When someone taps a CTM ad's Send Message button, here's their mental model:
- They saw a specific creative — a product, a promo code, a content hook
- They tapped because the ad promised something specific
- They expect the DM to deliver on that promise immediately
If the DM says "Hi! How can I help you today?", the user has to re-state what brought them. They lose the context. They abandon. Conversion drops 60-80% versus a DM that opens with "Hey! Here's the link to the [exact thing the ad promised]."
This isn't a marketing-speak observation. It's measurable in the DM-to-purchase rate per ad in any decent attribution system.
How Meta tells you which ad they tapped
When a CTM ad-tap fires, Meta sends a messaging_referral webhook event to whichever app you have connected. The event includes:
referral.source = "ADS"— confirms this is an ad-driven thread, not organicreferral.ad_id— the numeric ad_id from your Ads Manager- (sometimes)
referral.ads_context_data— post_id, creative metadata, headline
You can look at ad_id and decide which scripted DM to send. The same webhook handles two adjacent surfaces:
- m.me shortlinks — a
m.me/<handle>?ref=PARAMlink firesreferral.source = "SHORTLINK"with yourrefvalue. Useful for cross-channel attribution: put a uniquerefon each link in your email campaigns, on YouTube descriptions, on a Linktree, and route each one differently. - Ice Breaker chips (when the user has no prior thread) — a chip tap fires
referral.source = "ICEBREAKER"with the chip's payload string.
All three sources land on the same messaging_referral webhook. One trigger handles all of them.
Routing logic that scales beyond 1-2 campaigns
The simplest case is one CTM campaign + one DM. That's:
- Set up the ad in Meta Ads Manager (objective: Engagement → Send Message; destination: Instagram Direct)
- Note the ad_id (15-17 digit number)
- Create one automation in your DM tool that fires when
referral.ad_idmatches that number - Done
What about when you're running 5-10 campaigns simultaneously? You need:
- Campaign-specific DMs for the top 3 highest-volume campaigns (each with its own DM and CTAs)
- A catch-all for less-trafficked campaigns and edge cases
ReplyAtlas's Ad / link trigger handles this with a best-match precedence:
- Both
adIdsnon-empty ANDrefMatchmatches → most specific, picks first adIdsnon-empty, norefMatch, ad_id in list → nextadIdsempty,refMatchmatches → nextadIdsempty, norefMatch→ catch-all, fires when nothing else matches
This means you can ship 3-5 highly specific automations + 1 catch-all and the routing just works.
What to put in the DM (templates that convert)
Some patterns we've seen consistently outperform:
For product ads: Lead with the link, then a 2-line follow-up.
Hey {{firstName}}! Here's the link to [exact product from ad]: [your-shortlink]
Worth grabbing while it's still in stock — let me know if you have questions about sizing.
For lead-gen / educational content: Acknowledge what they came for, deliver, soft CTA.
Hey {{firstName}}! Saw you tapped my "[ad headline]" ad 🚀 Here's the [free resource / guide / etc]: [link]
Reply with what you're working on and I'll send the most relevant follow-ups.
For high-touch / consultative sale: Open with a single question that qualifies them.
Hey {{firstName}}! Quick question first — are you looking for [option A] or [option B]? Based on your answer, I'll send the right pricing breakdown.
For e-commerce with a catalog: Skip text, send a carousel.
The carousel-DM combo
Text DMs work, but for product-heavy campaigns the win is sending a carousel instead. Up to 10 image cards, each with up to 3 buttons, each button able to deep-link or open a postback.
Example carousel for an apparel ad:
- Card 1: hero image of the featured product → "Shop the look" button
- Card 2: alt color → "See alt color" button
- Card 3: best-sellers from the same drop → "Browse best sellers" button
- Card 4: customer review screenshot → "Read more reviews" button
- Card 5: size guide → "Find my size" button
Same trigger (Ad / link), same per-campaign matching — just dmFormat: CAROUSEL instead of TEXT. Each button's URL gets click-tracked individually so you can A/B-test which card converts.
More on how carousel DMs work: Carousel DMs.
Pairing with drip sequences for non-converters
Most ad-driven leads don't convert on the initial DM. A short, automatic follow-up recovers some of them.
Drip sequences let you script those follow-ups once and they enroll every ad-tap automatically. The first might be a soft "Hey, did you have a chance to check that link?", the next a stronger CTA or a different offer. Keep follow-ups inside Meta's messaging-window rules (see the FAQ below); a follow-up a few hours later is usually safer than one days later.
Critically, drip stops the moment the lead replies (STOPPED_ON_REPLY) or is marked converted (STOPPED_ON_CONVERSION). So you're not pestering converters or people already in conversation.
What you need to set this up
On the Meta side:
- A Meta Ads Manager account (you're already running ads, so probably yes)
- A click-to-Instagram Direct ad live (see the Ads Manager steps above)
- The numeric ad_id of the campaign(s) you want to route — visible in Ads Manager under each ad
On the tool side:
- An IG Business account connected to a tool that supports the
messaging_referralwebhook (which meansinstagram_business_manage_messagespermission, which means a Meta-approved app) - A DM template (or carousel) drafted
ReplyAtlas's Ad / link trigger is included on paid plans (see pricing). Set up time: about 5 minutes per campaign once your ad is live in Ads Manager.
Common gotchas
The webhook hasn't subscribed. When you (or your tool) connect to a Meta App, the app has to be subscribed to the messaging_referral webhook field at the App Dashboard level. If only the comments field is subscribed, ad-taps don't deliver. Tools usually do this on connect; check the tool's docs.
App in Development mode. While the Meta App is unpublished (pre-App-Review), Meta only delivers test webhooks from the Dashboard's "Test Webhooks" button. Real ad-taps don't fire until the app is approved and flipped to Live. This is the single biggest blocker for new IG-DM tools — Meta App Review is 5-14 business days, plus iteration.
Wrong ad_id. The ad_id is the ad id, not the campaign id, not the ad set id. Easy to confuse in Ads Manager. Numeric, 15-17 digits.
Account in Personal mode. Personal IG accounts don't receive messaging_referral events at all. Switch to Business or Creator and reconnect.
FAQ
What are click-to-Instagram Direct ads?
Ads on Instagram or Facebook whose button opens a DM conversation with your Instagram account instead of a website. Meta also calls them click-to-message ads. You create them in Ads Manager by choosing a messaging conversion location with Instagram selected and a Send message call-to-action.
Does this work with Reels ads?
Yes. Any ad with the "Send Message → Instagram Direct" destination fires messaging_referral regardless of placement (Reels, feed, stories, Explore).
Can I send the DM from the same account I'm running the ad to, or do I need a separate IG account?
Same account. The ad is on your IG handle; the DM lands on your IG handle from the user. No separate sender needed.
How fast does the DM land after the ad tap?
Usually 2-5 seconds. Webhook delivery from Meta to ReplyAtlas: ~1-2 sec. Cloud Tasks dispatch: ~500ms. IG Send API call: ~500-1000ms. Total: well under 5 sec on a normal day.
What's the difference between this and ManyChat's CTM flow?
Mostly pricing and integration. ManyChat is the legacy leader and supports the same kind of ad-to-DM flow. The integration is simpler if you're also using ReplyAtlas for other automation surfaces (carousel DMs, drip, lead pipeline). We're cheaper if you don't need ManyChat's broader Messenger / WhatsApp / SMS reach.
Does the DM have a 24-hour reply window like other auto-DMs?
Yes — the standard 24-hour rule from Meta applies. After 24 hours, you can't send another freeform message to that user unless a Meta message tag applies, and tags such as HUMAN_AGENT have their own approval and strict rules. For most ad funnels, 24 hours is plenty since the conversion happens in the first session anyway.
Can I A/B test different DMs per ad?
Yes — A/B testing is supported on every automation type (50/50 deterministic split, auto-promote winner at ≥100 sends/variant ≥20% CTR delta). Worth setting up for high-spend campaigns.
If you're spending $1k+/month on CTM ads and currently using a generic DM, swapping to per-campaign routing is one of the highest-leverage changes you can make this quarter. ReplyAtlas's paid plans include the Ad / link trigger plus the Carousel + Drip stack the strategy depends on. Start free.
Ready to try it on your own Instagram?
Free Starter plan · 1,000 DMs included · No credit card · Setup in 60 seconds.
Get started — free