Skip to content

Automation node statistics (funnel)

Request

Per-step funnel for an automation — the accurate per-campaign engagement source, matching the web app. For each node you get how many contacts reached each status and the real conversions at that step.

Prefer this over counting trigger_..._accepted tasks for acceptance/reply numbers: the trigger-task count is inflated in follow-up campaigns (contacts that entered already connected), whereas node_conversions.accepted here is the true count. Acceptance rate = node_conversions.accepted / node_statuses.closed on the connection-request node; replies per message node = node_conversions.replied.

node_ids is required — the integer ids of the nodes to report on (from GET /flows/api/flows/{flowUuid} → the active version's nodes[].id). Add a filter (e.g. an executed_at/date range) to scope the period.

Security
bearerAuth
Path
flowUuidstringrequired

Automation UUID.

Bodyapplication/jsonrequired
node_idsArray of integersrequired

Integer node ids to report on.

filterobject or null

Optional date-range / contact filter to scope the counts.

POST
/flows/api/flows/{flowUuid}/statistics/nodes
curl -i -X POST \
  'https://leadgen.grinfi.io/flows/api/flows/{flowUuid}/statistics/nodes' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "node_ids": [
      2,
      3,
      6
    ]
  }'

Responses

Map of node_id → statistics. node_statuses counts contacts by task status; node_conversions holds the real outcomes (accepted, replied, opened, blocked) — an empty array for nodes that have none; node_branches (on rule/trigger nodes) counts how many took each branch.

Bodyapplication/json
property name*objectadditional property
Response
{ "2": { "node_statuses": {}, "node_conversions": {} }, "3": { "node_statuses": {}, "node_conversions": {} } }