Dartzo
How it worksTrackingAnalyticsPricingFAQ
Log inStart free
Delivery

How delivery works

The journey of one comment into one DM — matched, queued, sent, and honestly accounted for at every step.

Someone comments LINK on your reel. A few seconds later they have a DM. In between, Dartzo does five things — and writes down the result of every one of them. This page walks that journey, so when you look at your log you know exactly what you’re reading.

The five steps

  1. The comment arrives
    Instagram sends us a webhook the moment someone comments. We acknowledge it and record it — that’s the received state. Nothing is sent yet; we’ve only promised not to lose it.
  2. We match an automation
    We compare the comment text against the keywords on your active automations for that post. If two automations could both fire, the more specific one wins — the same way, every time. A match moves the job to matched. No match means no DM, and no job.
  3. We queue a job
    Every matched comment becomes a job with a deadline — the last moment Instagram will still accept a reply to it. If we have capacity right now, the job goes out right now. If we don’t, it sits in queued and gets retried oldest-first until it sends or hits that deadline.
  4. We send
    The job flips to sending, we call Instagram, and we wait for the answer. Sends are spaced out by a small random delay (50–250 ms) so a viral post doesn’t land as one wall of requests on Instagram’s door.
  5. We record the outcome
    Every job ends in one of three terminal states: sent, expired, or failed. A failure always carries a reason. There is no fourth outcome where a DM quietly disappears.

What each state means

Your follower's phone
What happens when someone comments
Comments
maya.makesLINK 🙌
arun_rthis is so good

Instagram allows exactly one private reply per comment, which is why the DM arrives once and only once.

1/4
What each status means
queued
Waiting to send
Usually seconds. Held if you're at Instagram's hourly limit.
sent
Delivered
Instagram accepted it.
expired
The window closed
We had 7 days for a comment, 24 hours for a DM.
failed
Instagram refused it
Always with a reason — never a silent drop.
A job moves through these states exactly once.
StateWhat it means for youIs it final?
receivedWe have the comment. Nothing has been decided yet.No
matchedA keyword matched an active automation. This comment is getting a DM.No
queuedWe’re at our sending ceiling for this hour, or sending is paused. The job is waiting its turn and will be retried automatically.No
sendingThe request is in flight to Instagram right now.No
sentInstagram accepted the DM and gave us a message ID. It’s delivered.Yes
expiredThe reply window closed before we could send — the deadline passed, or a Live broadcast ended. We stopped trying and said so.Yes
failedThe send won’t work and retrying won’t change that. The reason is recorded on the job.Yes
unknownThe call to Instagram timed out and we genuinely don’t know if it landed. A follow-up check resolves it to sent or safely retries — we never guess.No
Zero silent loss, and we check it daily
A job is only allowed to sit in a non-final state for so long. Once a day we sweep every job that hasn’t reached sent, expired, or failed, and anything stuck in a transient state for more than an hour raises an alarm on our side. "It vanished" is not a state we accept.

How long we actually have

Instagram decides how long a reply is allowed. We subtract a safety margin from every one of those windows so we’re never trying to squeeze a send through the closing door.

TriggerInstagram’s windowWhen Dartzo gives up
Comment on a post or reel7 days from the comment6 days 18 hours — 7 days minus our 6-hour safety margin
Comment on an Instagram LiveDuring the broadcast onlyAbout 60 seconds, and never past the end of the broadcast
Story reply or story mention24 hours from their message18 hours — 24 hours minus the same 6-hour margin
DM keyword24 hours from their message18 hours — 24 hours minus the same 6-hour margin
Live comments are send-now or never
Instagram only accepts a private reply to a Live comment while the broadcast is running. There is no catching up afterwards, so we don’t pretend there is: a Live reply that can’t go out within about a minute is marked expired immediately rather than queued for hours and quietly missed.

How fast we send

Instagram’s documented ceiling for comment private replies on posts and reels is 750 per hour per account. We deliberately do not start there.

  • We start each account at 200 DMs per hour and pace against that, not against the ceiling.
  • If Instagram signals any kind of throttling, we immediately cut the rate in half — down to a floor of 20 per hour — rather than pushing back and risking your account.
  • After each clean day we recover 10% of the ceiling (75/hour) until we’re back up, never above 750 per hour.
  • Live comments and messaging triggers run on a separate, much faster budget: up to 100 sends per second, because they aren’t competing for the comment-reply allowance.
  • Anything over the current budget is queued, not dropped. Capacity frees up every hour and the queue drains oldest-first.
Why start at 200 when Instagram allows 750?
Because a rate limit is not a target. Sending at the documented maximum is how accounts get flagged. Starting lower and earning your way up costs you a few minutes of queue on a viral post; getting your DM permissions restricted costs you the account.

One comment, one DM

Instagram allows exactly one private reply per comment. Not one per hour, not one per automation — one, ever. That’s Instagram’s rule, not a Dartzo setting, and it can’t be raised.

So we enforce it in three places: one job per comment at the database level, a check before we send, and a check on the way back — if Instagram tells us that comment was already answered, we record the job as sent rather than trying again. If the same person comments five times, they still get one DM.

When a send fails

Your delivery log
PersonKeywordStatus
@maya.makesLINKsent
@arun_rLINKsent
@priya.kGUIDEqueued
@sam_87LINKfailed
Every job, every outcome, with the reason attached.

A failure is a result, not a gap. Each failed job carries a reason you can act on:

ReasonWhat happenedWhat you can do
blockedThe person blocked you, or has messaging turned off.Nothing — this is their choice, and it’s correct that we stopped.
comment_deletedThe comment was deleted before we could reply to it.Nothing. There’s no longer anything to reply to.
permissionA permission Instagram requires for this send is missing.Reconnect the account and grant the requested permissions.
token_invalidYour Instagram connection expired or was revoked.Reconnect the account. Queued jobs resume once it’s healthy.
outside_windowThe reply window closed before the send landed.Usually paired with expired. Nothing to fix on your side.
no_optinA follow-up was waiting on a button tap that never came.Nothing — they simply didn’t tap. The first DM still sent.
unknown_errorSomething we couldn’t classify. We keep Instagram’s exact words on the job.Contact support with the job — the raw error is stored, not lost to a log rotation.

Temporary problems on Instagram’s side aren’t counted as failures. If we get a server error, we retry the job up to 5 times before we call it — enough to ride out a blip, few enough that a real outage is something you see instead of something we hammer at.

Common questions

My post went viral and DMs are showing as queued. Did they fail?
No. queued means we’re pacing to stay under Instagram’s limits — the job is waiting, not lost, and it has until its deadline (nearly 7 days for a post or reel comment) to go out. It will drain automatically as capacity frees up each hour.
Why did a DM expire?
The reply window closed before we could send. For a post or reel comment, that means roughly 6 days 18 hours passed. For a Live comment, it means the broadcast ended. expired is us telling you a send didn’t happen — rather than leaving you to assume it did.
Someone commented three times. Why did they only get one DM?
Two reasons, and both are deliberate. Instagram allows one private reply per comment, and Dartzo additionally sends one DM per person per automation within 24 hours so a repeat commenter never gets spammed.
Can I turn the safety margin off and use the full 7 days?
No. The 6-hour margin exists so a send is never attempted against a window that closes mid-request — the outcome of that is ambiguous, and ambiguous is the one thing we refuse to report.
WhatsApp