Playbooks · 4 min read
There Is Nothing to Optimize About a DM Open Rate
Start with the part that saves you an afternoon: we cannot tell you your Instagram DM open rate. There is no analytics screen in this product, no read tracking, no dashboard with a percentage on it, and nothing in the three data stores we keep would let us build one.
Which makes "open rate optimisation" a strange thing to sell you, since the first requirement for optimising a number is being able to see it.
The second problem is worse. Even if you could see it, it is not a number your writing moves. A DM gets opened because there is a badge on the app and because DMs are rare enough that people still check them. That is a property of the channel, and it was decided before your message existed. Why the figure is high and what it hides covers the selection effect properly, and whether AI moves it gives the careful answer, which is almost certainly not.
What people usually mean when they ask this
Nearly always, one of two real things. Both are worth optimising and neither is an open rate.
Did the message arrive at all. A surprising share of "low open rates" turn out to be messages that were never sent. That is not a mystery here — a reply that fails a check is recorded with the reason.
Will the account keep being allowed to deliver. This one is real, it is slow-moving, and it is the thing that actually degrades over months if you get it wrong.

Part one: what stops a send
Ten checks run before every reply, in a fixed order: kill switch, connection, takeover, window, dedupe, cooldown, quiet hours, rate budget, credits, content safety. The first failure stops the send and writes the reason against the run.
The reason codes are the diagnosis, and three of them account for most of what people mistake for a delivery problem.
- Window closed. The biggest one, and usually correct behaviour. A comment older than seven days, or a DM thread where their last message was more than twenty-four hours ago. Nothing can be sent there and nothing should be.
- Connection unhealthy. The one to act on immediately. An expired token still shows an account name, so the connections screen looks fine while nothing at all has been going out.
- Quiet hours. Held rather than refused, which is what you asked for. If a large share of your audience is in a timezone you did not set it for, this is silently costing you window time.
A message you cannot see the delivery of is still a message you can see the refusal of. Read the refusals.
Part two: keeping your standing
This is where the phrase "open rate optimisation" comes closest to describing something real, and it is not about the message text.
If a business sends the same forty-word message to everybody who comments, some people report it as spam. Enough reports and delivery degrades regardless of how the tool authenticated, because Meta counts reputation signals separately from permissions. The API is a licence to send. It is not a promise that sending is a good idea.
Four settings exist mostly for this, and all four are worth being deliberate about:
The hourly cap. On a post that travels, it turns two thousand simultaneous sends into a queue that drains over the afternoon. It looks like a limit on your best day and it is insurance against your best day.
Dedupe. One reply per event, so Instagram redelivering a comment does not produce a second message to somebody who already got one.
Cooldown. One person does not receive messages from two of your automations in the same minute.
First-time senders only. Under Advanced. On an account that posts frequently it stops the same follower being greeted under every Reel, which is the fastest way to turn a regular into somebody who mutes you.
The number to watch instead
Replies. Whether people write back is the only unambiguous evidence that a human read the message, and unlike opening, it is genuinely moved by what you wrote. It is also the only thing that restarts the twenty-four hour window, which makes it the difference between one turn and a conversation.
Nothing computes it for you either. You count it in the inbox, once a week, in the ten minutes it takes. The six numbers worth writing down every Friday is the version of that with a template attached, and what actually moves a reply rate is the post to read if you want the writing half.
To be plain about what we do not have
No open rates, no read receipts, no delivery reports, no click tracking, no attribution, no conversion events, no dashboard of any kind. Three stores exist — Activity, Leads, and the credit ledger — and what a row in each one can honestly tell you is documented rather than implied. Anything beyond that, from us or anybody else on this API, is an inference wearing the clothes of a measurement.



