← all writing
2026-05-23 · 4 min read

How I Replaced My $40/mo ManyChat Auto-DM Setup With Meta's API

Build notes on rebuilding a single comment-to-DM workflow with Meta's Instagram Graph API, webhooks, Notion, and a Cloudflare Worker — for $0/month instead of $40.

This is the setup guide for the ManyChat replacement. The build story lives there.

The Short Version

I was paying ManyChat $40/month for one feature: When someone comments on my Instagram reel, send them a DM with a link. That was it. I was not using a full chatbot flow, complex segmentation, or analytics. I just needed comment-to-DM. So I rebuilt that one workflow myself using:

  • Meta's Instagram Graph API
  • Instagram comment webhooks
  • A small Node script
  • Notion as the setup/config screen
  • Cloudflare Workers to keep it running

It is not plug-and-play. ManyChat is still easier if you do not want to touch APIs. But if you are technical and only need this one workflow, it is very doable.

What It Does

For each reel, I can set:

  • The comment keyword to listen for
  • The DM text to send
  • The link URL
  • The button label
  • An optional public reply like "Check your DMs"

Then, when someone comments on that reel, the system sends the public reply and private DM automatically.

The New Workflow

Before, with ManyChat:

  1. Open ManyChat.
  2. Find the reel.
  3. Add the keyword or "any comment" trigger.
  4. Write the DM.
  5. Add the link.
  6. Activate the automation.

Now:

  1. Fill the DM details in my Notion content calendar.
  2. Post the reel.
  3. Run one command in my terminal:
npm run ig-autodm:attach

That command finds my latest reel, attaches the Notion row to it, and the automation runs from there.

The Pieces I Had To Set Up

1. Meta App

I created/configured a Meta developer app that has access to my Instagram account. The app needs permissions for Instagram comments/messages and page metadata. The exact permissions depend on your account/app setup, but the important idea is:

  • Read Instagram media/comments
  • Receive comment webhooks
  • Send private replies
  • Manage comments/replies

2. Webhooks

The webhook is what tells my system: "Someone just commented on this reel." Meta sends the comment event to my webhook URL. My code checks whether that reel has an active DM setup in Notion, then decides what to send.

3. Notion Config

Notion became the UI. Each reel has fields like:

  • ig_media_id
  • dm_trigger_keyword
  • dm_message_text
  • dm_link_url
  • dm_link_title
  • comment_reply_text
  • dm_status

This means I do not need to build a dashboard. I already plan content in Notion, so the auto-DM setup lives there too.

4. Local Testing

Before making it permanent, I ran the webhook locally and tested comments against it. This is where most of the annoying setup happened:

  • Getting the webhook URL accepted by Meta
  • Verifying the app settings
  • Making sure the token had the right access
  • Testing whether comments actually triggered the webhook

5. Cloudflare Worker

Once the local version worked, I deployed the webhook to Cloudflare Workers so it could run all the time. That means my laptop does not need to stay open for the auto-DM to work.

The Bug I Absolutely Should Mention

The first real test created a loop. Someone commented. My bot replied, "Check your DMs." Meta then sent a webhook for my bot's own reply. My code treated that as a new comment, replied again, and kept going. I got 15+ repeated replies before I killed it. The fix was to ignore:

  • Comments from my own Instagram user ID
  • Comments from my own username
  • Comments where Meta does not provide a reliable sender
  • Comments that exactly match my configured public reply text

I also added tests so I do not accidentally recreate that loop later.

What This Replaced

ManyChat was charging me $40/month. This setup costs me $0/month on Cloudflare's free tier. That is $480/year saved for one half-day build.

What I Would Not Recommend

I would not recommend this if:

  • You are non-technical
  • You need a full visual automation builder
  • You need support, analytics, audience segmentation, or complex flows
  • You do not want to deal with Meta developer settings

ManyChat is easier. That is the value of ManyChat. But I only needed one workflow, and I was comfortable debugging it.

What I Would Recommend

I would recommend this if:

  • You are technical or agent-assisted
  • You only need comment-to-DM
  • You already use Notion or another database to plan content
  • You are comfortable with Meta developer apps and webhooks
  • You want to remove a small recurring bill from your creator stack

The Real Takeaway

Even if AI does not make you money immediately, it can save you money. This did not create a new revenue stream overnight. It just removed one annoying monthly bill from my stack. That counts.

Rough Build Checklist

  • [ ] Create or configure a Meta developer app.
  • [ ] Connect the Instagram account.
  • [ ] Make sure the app has the permissions needed for comments and private replies.
  • [ ] Add a webhook endpoint for Instagram comments.
  • [ ] Create the Notion fields for per-reel DM setup.
  • [ ] Write a script that reads the latest reel and attaches the matching Notion row.
  • [ ] Write webhook logic that checks the reel/comment against the Notion config.
  • [ ] Send a public reply if configured.
  • [ ] Send a private reply DM with the link.
  • [ ] Add self-comment loop protection.
  • [ ] Test locally.
  • [ ] Deploy the webhook to a permanent URL.

Share Note

This is a build note, not a polished public tutorial. Anyone trying this should expect some Meta dashboard friction and should test with a private/test reel first.