I’ve spent the last few weeks building out a scenario that watches for specific keywords in Instagram comments and automatically triggers a DM reply. The use case is pretty common if you run any kind of content page or offer. Someone comments “guide” or “info” on a post, and instead of me manually replying to every single comment and then DMing them one by one, the whole thing happens automatically within a few seconds of the comment going live.
Wanted to share the full breakdown here since I know a lot of people ask about this, and also because I’m curious how others in this community have approached the same problem, since I feel like I reinvented a few wheels along the way.
Why I avoided scraper based tools
Before building this in Make, I looked at a bunch of third party automation tools that promise Instagram DM automation. Most of them work by simulating browser sessions or using unofficial endpoints that Meta doesn’t actually support. The problem is Instagram has gotten a lot stricter about this over the past year or so, and accounts using these tools have been getting rate limited or outright restricted. So I decided to build everything using Meta’s official Graph API instead, even though it meant more setup work upfront.
The scenario structure
Here’s roughly how I built it out in Make:
- Trigger: A webhook module set up to listen for new comment events on my Instagram posts. This requires the Instagram account to be connected to a Facebook page, and the page needs the right permissions approved through Meta’s app review process if you want this running at any real scale.
- Data capture: Once a comment comes in, the webhook pulls the comment text, the commenter’s username, and the comment ID. I store these temporarily in the scenario so I can reference them in later modules.
- Filter and keyword matching: I built a filter router that checks the comment text against a list of trigger words. Right now I’m running this fairly simple, mostly exact match or contains match, but I’ve seen people mention fuzzy matching for typos, which I haven’t tackled yet.
- Message routing: Depending on which keyword matched, the scenario routes to a different message template. This lets me send different resources depending on what someone is asking for in the comments, instead of one generic reply for everyone.
- Sending the DM: The final module is an HTTP call to the Graph API’s messaging endpoint, which sends the actual DM to the commenter. This is the part that took the most trial and error, mostly around token scopes, page access tokens versus user access tokens, and making sure the message type qualifies under Meta’s messaging policies.
- Error handling: I added a basic error handler that logs failed sends to a Google Sheet so I can see if any DMs failed to go through, usually due to the recipient having DMs restricted from accounts they don’t follow.
Where it got complicated
The biggest headache was understanding Meta’s 24 hour messaging window and what counts as a valid trigger for outside that window. Comment triggered messages have some flexibility here since Meta treats it as the user initiating contact, but I wanted to be careful not to accidentally violate the messaging policies, since getting flagged for that can affect the whole page’s API access, not just the automation.
Token refresh was another annoying part. Long lived page tokens still expire eventually, and if you’re not refreshing them on a schedule, the whole scenario just silently stops working, which happened to me once and I didn’t notice for a few days.
Where I landed
After going through all of this, I ended up testing a dedicated tool called InstantDM, which already has this comment to DM workflow built natively on top of Meta’s official API. It handled a lot of the token management and messaging window logic automatically, which saved me from maintaining that part of the scenario myself. That said, I still think building it manually in Make first was worth it just to understand what’s actually happening under the hood, especially if you ever need to debug why a message isn’t sending.
Would love to hear how others here have structured similar scenarios, especially if you’re dealing with multiple keyword triggers, multi step DM sequences, or routing comments to different Instagram accounts. Also curious if anyone has found a clean way to handle fuzzy keyword matching without overcomplicating the filter logic.

