Troubleshooting
Start with the symptom. Each section names the causes we actually see on live accounts, ranked by how often they turn out to be the answer, and what to do about each one.
Your evidence is the Queue. Every comment that matched an automation gets a row there with a state — sent, queued, failed or expired — and, when something went wrong, the reason beside it, like failed · permission. A DM is never dropped silently: if it didn’t go out, there is a row saying so. The Error reference explains every one of those reasons in full.
My DMs aren’t sending at all
Two fixes resolve most of these, and both are three taps in an app you already have. Reconnecting replaces the stored token and lifts a permission stop; accepting the tester invite is the step people most often believe they have already done.
The same path reconnects an account later — it replaces the stored token and lifts a permission stop.
Instagram renames these menus between app versions. If a label doesn't match exactly, look for the nearest equivalent — the path is the same. Fastest route on a computer: open instagram.com/accounts/manage_access/ while logged in as the right account, and use the Tester Invites tab. On Android the in-app path may read Settings → Website permissions → Apps and Websites.
Nothing is arriving, for anyone. That’s almost always one account-level condition rather than a problem with individual automations — one thing is stopping every send. Work down this list; the first three cover nearly all of it.
- Your Instagram connection expired or was revokedIn the Queue you’ll see
failed · token_invalid, and the app will prompt you to reconnect. Instagram rejected the access token we stored, so nothing can send for this account until you reconnect. It happens after you change your Instagram password, after you remove Dartzo from Instagram’s connected apps, when the long-lived token reaches the end of its life, or when the same account gets connected somewhere else and the old token is invalidated. Reconnect from Connect — that is the entire fix. - Instagram refused the sends on permissionsIn the Queue you’ll see
failed · permission. Meta rejected the send as not permitted for this account and did not say which permission was missing. Because every following send would fail identically, Dartzo stops sending for the account rather than hammering Instagram with attempts we know will be refused. Fix the underlying cause — the next three steps — and reconnect. Reconnecting lifts the stop. - You haven’t accepted the Instagram tester inviteThis is the single most common cause of
permission. While Dartzo is in Meta’s development mode, only accepted testers can be messaged — being invited is not enough, and nothing tells you the invite is still pending. Open Instagram → Settings and privacy → Apps and websites → Tester invites, accept the invite from Dartzo, then reconnect. - Your Instagram account is Personal, not Business or CreatorMessaging permissions don’t exist on Personal accounts, so no automation of any kind can send from one. In Instagram, open Settings → Account type and switch to Business or Creator, then reconnect from Connect.
- Your saved connection predates a permission we now needIf you connected a long time ago, the token we hold may have been issued before we started asking for the messaging and comment permissions we need today. Reconnecting forces a fresh authorisation, which replaces the old token with one that has the right permissions.
Some DMs send, and some don’t
This is the hardest failure to diagnose from the outside, because Meta doesn’t explain it. The refusal comes back as a bare server error with no reason attached, so all you see is that the DM didn’t arrive. Half the comments on a post get answered in seconds and half get nothing, and it looks random.
It looks like this:
- Some comments get a DM within seconds; other comments on the same post, matching the same keyword, get nothing.
- The misses show in the Queue as
failed · unknown_error. - Retrying, rewording the keyword, or rebuilding the automation changes nothing — the next batch fails the same way.
- If you check the DMs of someone who didn’t get yours, you often find they *did* get a message — from the other tool.
Dartzo detects this on its own. When we see another integration sending from your account, a warning banner appears at the top of the app and stays there while it’s still happening. We don’t name the other product: the detection is a strong inference drawn from what your account is sending, not something Meta confirms, and we’d rather warn you accurately than accuse a named competitor in front of you.
The fix is to run one tool, not two. Turn off the other tool’s automations, or disconnect it from your Instagram account. Removing Dartzo from the other tool’s dashboard isn’t always enough — the other tool may still hold its own connection. Open Instagram → Settings and privacy → Apps and websites and remove whichever one you’re not keeping. Once the other tool stops sending, every comment comes through again, and the banner clears itself about a week later without you doing anything.
If there’s definitely no second tool and you’re still seeing a mix, these are the other reasons some comments get a DM and others don’t. All three are working as intended:
- The same person commented more than once. One person gets one DM per automation, deliberately, so the repeat shows as
failed · recipient_capped. That guard is part of what keeps your account from reading as a bot. - The comment was deleted before we could reply — shown as
failed · comment_deleted. A private reply attaches to a specific comment, so if the comment is gone there’s nothing to attach to. Common when a moderation tool is removing giveaway spam. - Two of your automations matched the same comment. Instagram allows one reply, so the more specific automation fires and the broader one doesn’t. A keyword rule always beats an "any comment" catch-all on the same post.
It worked before, and then it stopped
Something changed outside Dartzo. Automations don’t degrade on their own, so when a setup that was delivering stops delivering, one of these is nearly always the cause:
- The connection stopped being validLook for
failed · token_invalidaround the time it stopped. Changing your Instagram password, revoking Dartzo in Instagram’s app settings, or connecting the same account somewhere else all invalidate the token we hold. Reconnect from Connect and it resumes. - Another DM tool was connected in the meantimeIf sends went from reliable to patchy rather than stopping outright, and the misses read
failed · unknown_error, a second tool is now taking the one reply slot per comment. See the section above — this is by far the most common cause of a good setup going patchy. - The post the automation was bound to was deletedAn automation attached to a specific post can never fire again once that post is gone. Dartzo pauses it and shows the reason on the automation rather than letting it sit there looking live. Rebind it to a post that still exists, or delete it.
- The automation was pausedCheck the automation’s status. Dartzo pauses automations for stated reasons — a deleted post, or a runaway loop where one person was being messaged repeatedly. The reason is shown on the automation itself, and resuming it clears the flag.
The Queue says it was sent, but the person never got it
First check whether the Queue really says sent. If the row reads failed with a reason, use the Error reference — the reason names exactly what happened. If it genuinely says sent, Instagram accepted the message and gave us a message ID, and these are the reasons someone can still not see it:
- It’s in their message requests. If the person doesn’t follow you, Instagram files your DM under Requests rather than the main inbox. Most people never look there. This is the usual answer, and it’s why a strong call to action in the post matters more than the DM itself.
- They blocked the account, or don’t accept messages from people they don’t follow. That send is refused rather than delivered, and shows as
failed · blocked. There’s nothing to fix for that individual — the refusal is their choice, correctly honoured. - They deleted their comment. A private reply is attached to a comment. If the comment is deleted before we send, the reply has nothing to attach to and shows as
failed · comment_deleted. - The window closed before we could send. Instagram gives us 7 days from the comment to send a private reply, and 24 hours from someone’s last message to send a follow-up. Past that, sends are refused and land as
expired.
It says expired
expired means Instagram’s messaging window for that person had already closed by the time the send went out. It’s not a failure of your automation, and the message was never sent to the wrong person or sent twice — we stop rather than send outside the window.
| Window | How long | Starts from |
|---|---|---|
| Private reply to a comment | 7 days | The moment the comment was posted |
| Follow-up message | 24 hours | The person’s most recent interaction with you |
Both windows are Meta’s, not ours — see Limits and windows for the full picture. The usual reason a job runs out of time is that it sat waiting: a large backlog on the account, or an account that was paused while the clock kept running. If you paused an account and resumed it a week later, the comments from before the pause may well have expired — expected, not a bug.
If you’re seeing expired on recent comments — hours old, not days — that’s worth telling us about. It shouldn’t happen, and it points at something on our side rather than yours.