Skip to content

Check the campaign’s own state first, then the page it is bound to, then the execution history. Four causes are worth ruling out before anything else: the campaign is switched off, the graph you edited was never saved, the campaign is bound to a different page than the one being commented on, or the message never matched the condition. The execution history then separates a campaign that never started from one that started and failed.

  • The campaign open on the canvas, so you can see the Active toggle, the page in the header, and the Executions view.
  • The page listed on Accounts, so you can see whether its stored access is still working.
  • Someone other than the page itself to comment or send the DM. AFP ignores events whose sender is the page, so commenting as the page never starts an execution.

Work down this list rather than jumping to the section that sounds like your problem. It is ordered by how much each check costs you: the first seven are answered by looking at the canvas, and the rest need the execution history or a second test.

#CheckHow to tellFix
1The campaign is offThe Active toggle reads off in the canvas header or on the campaign listSwitch it on. AFP matches incoming events only against active campaigns
2Your edits were never savedThe canvas still shows unsaved changesClick Save. Only the version saved last starts new executions
3The saved graph has no trigger nodeReopen the campaign — the canvas loads the saved version, so what you see is what runsAdd a trigger node and save
4The campaign is bound to another pageThe page named in the canvas header is not the page you commented onRebind the campaign to that page and save
5The event came from the page itselfYou commented or replied while posting as the pageComment from a personal account, or ask someone else to
6The trigger type does not match the eventA comment trigger with a DM sent to the page, or a DM trigger with a commentUse the trigger that matches the event you are producing
7The trigger is scoped to one postThe trigger’s post setting names a specific post instead of all postsComment on that post, or switch the trigger back to all posts
8The message did not match the conditionAn execution exists and ends without sending anythingWiden the match, or connect the condition’s No Match output to something
9That person already has an execution in progressAn earlier execution for the same person is still active on this campaignWait for it to finish, or use a different account
10The trigger runs once per personThe trigger’s once-per-person setting is on and this person has triggered it beforeTest with a different account
11The page’s stored access has expiredAccounts flags the page, or the profile that owns it, as expiredRe-authorise the profile, then retest

Why is an active campaign still not firing?

Section titled “Why is an active campaign still not firing?”

An active campaign only fires through the graph version you saved last. AFP looks for trigger nodes that belong to the campaign’s current version, so a trigger that exists only in an unsaved canvas or in an older version never starts anything.

Switching the toggle on from the campaign list applies immediately and does not check the graph. A campaign whose current version holds no trigger node matches nothing while still reading as active, which is the most misleading state a campaign can be in.

Switching a campaign off does not stop events reaching the page. Other campaigns on the same page keep working, and every campaign whose trigger matches an event gets its own execution — so a page carrying several campaigns can look half-broken when only one of them is off.

The campaign also has to match the platform of the page. AFP derives that from the page itself when you save, so a campaign moved between a Facebook page and a standalone Instagram account picks the platform up from the new page rather than keeping the old one.

Is the campaign bound to the page you are testing on?

Section titled “Is the campaign bound to the page you are testing on?”

A campaign is bound to exactly one page, and AFP matches an incoming event against the campaigns on the page that produced it. Commenting on a page the campaign is not bound to produces no execution at all — not a failed one.

The page name in the canvas header is the whole answer. Compare it with the page you commented on before looking at anything else, because this cause and a genuinely broken graph look identical from the outside: nothing happens.

Rebinding a campaign to a different page leaves the graph untouched. The nodes, their settings and their connections all survive the move; only which page’s events reach the trigger changes.

Accounts is where an expired page shows up: the page, and the profile that owns it, are flagged as expired instead of active. AFP stores the access it was granted for each page, and once that access stops working every action the campaign tries to take on that page fails.

An expired page produces failed executions rather than missing ones. The execution starts, reaches the first node that has to reach Facebook or Instagram, and records an error on that node instead of sending.

Page typeHow to restore access
A Facebook page, or an Instagram account reached through oneRefresh the access on the Facebook profile that owns the page. AFP sends you to Facebook to consent again, and clears the expired flag when you come back
A standalone Instagram business accountRefresh the access on that account. AFP sends you to Instagram to authorise it again, and stores the new access when you come back

Declining the consent screen leaves the page exactly as it was, still flagged as expired. Connect a page covers what each status on Accounts means.

Why did the condition send the execution down No Match?

Section titled “Why did the condition send the execution down No Match?”

A condition routes every execution down one of two outputs — Match or No Match — and an output with nothing connected to it ends the execution there. A condition that takes No Match on a graph where only Match is wired up produces an execution that completes without sending anything.

That is the shape to look for in the execution history: an execution that visited the trigger and the condition, completed, and never reached the send-DM node.

What the condition is set toWhy a real message can miss it
Contains, or exactThe text you commented does not contain, or is not exactly, the phrase configured on the node
A keyword listThe comment contains none of the list’s keywords
A keyword list with the match reversedThe comment contains one of the keywords, which the reversed match sends down No Match

A keyword list you deleted while a condition still pointed at it causes the opposite problem. With no list to look up, the condition stops filtering and matches everything, so the campaign replies to messages it should have ignored. A list left with no keywords in it behaves the same way.

Match comments with keyword lists covers editing a list and what a reversed match does.

Open the campaign and switch the canvas to the Executions view. It lists the 20 most recent executions for that campaign, newest first, with tests and real executions together. Each row carries whether it is a test, whether it is still active, the recipient, when it started, when it completed, the node it is currently sitting on, and an error message if it has one.

Selecting an execution overlays it on the canvas: the nodes it visited are marked as visited, the node it stopped on is marked as current, and everything it never reached is dimmed. Each visited node also records what the action did, or the error it raised — which is how you tell a DM node that sent from a DM node that failed.

An execution overlaid on the campaign canvas: the nodes it visited are highlighted, the node it stopped on is marked current, and the nodes it never reached are dimmed

Open the Executions viewIs there an executionfor that comment?Never triggered: workthrough the checklistIts stateRan to the end of a branch:check which branch it tookFailed mid-run:the action could not be sentWaiting: parked on acondition or on a delayEnded early:read the error message None at all One exists Completed, no error Still active, erroron the last visited node Still active, no error Failed, with an error
What you seeWhat it meansWhat to do
No execution for the time you commentedThe event never reached the campaignGo back to the checklist — nothing in the graph is at fault
Completed, no error, and the send node dimmedThe execution took a branch that ended before the send nodeLook at which output the condition took
Still active, with an error on the last visited nodeAn action failed. AFP records the error and does not continue past that nodeFix the cause, then start a fresh execution. This one does not resume by itself
Still active, current node is a conditionThe condition is waiting for a reply that has not arrivedReply from the account you tested with, or wait
Still active, current node is a delayThe delay has not elapsed yetWait, then refresh the panel
Failed, with an error about retries being exhaustedAFP retried the step and it kept failingCheck the page’s access on Accounts, then retest

An execution left stuck on a failed action does not stay active forever. AFP fails it after an hour if it was waiting on a scheduled step, and after seven days if it was waiting for a reply.

The list does not refresh itself. Use the refresh control on the panel to re-pull an execution that is still active. Execution states lists every state an execution can end in.

How do I run a test execution from the canvas?

Section titled “How do I run a test execution from the canvas?”

A test execution walks the saved graph without contacting Facebook or Instagram, which separates a broken graph from a broken connection in one click.

  1. Open the campaign on the canvas and click Save if anything is unsaved. A test runs the saved version, not what is on screen.
  2. Click Test.
  3. Type the message the execution should treat as the incoming comment or DM. Leave it empty and the execution behaves as though the text were test.
  4. Click Run test.
  5. The canvas switches to the Executions view with the new execution at the top. Click it to see the path it took.

Every action node records what it would have done instead of doing it. No DM is sent, no comment is replied to, hidden or deleted, and no tag is added or removed. A delay node ends the test there and marks the execution complete, so a test tells you nothing about the nodes after a delay.

A test execution provesA test execution cannot prove
The graph has a trigger and the nodes are connectedThat the campaign is bound to the right page
Which branch a given message takes through the conditionsThat the page’s stored access still works
Which nodes are reached, and in what orderThat a real comment matches the trigger’s post setting
That each node’s settings are complete enough to executeThat the message actually arrives

A campaign whose saved version has no trigger node cannot be tested at all: AFP reports the missing trigger instead of creating an execution. That result is itself the answer to check 3 above.

A test that lands on a condition set to wait for a reply parks there and stays active, because no reply can arrive for a test. Read the parked node as “the graph got this far”, not as a failure.

Comment on the page again, from an account that is not the page, with text you know matches the condition. Then check both ends: the DM arrives in that person’s inbox on Facebook or Instagram, and a new execution appears at the top of the Executions view with a completion time, no error, and the send node marked as visited.

One of those two without the other narrows the problem immediately. A completed execution with no DM points at the page’s stored access; a DM with no execution means you are looking at a different campaign than the one that sent it.