Skip to main content

How do I track close checklist sign-off using Slack reactions?

Post each close checklist item as its own message, then have the responsible person react to it with an agreed emoji to signal sign-off. Loopfour's Slack integration reads that back via reactions.get, which returns a users array naming who reacted — but Slack's own docs warn that array can be incomplete, so treat it as a strong signal, not a guaranteed audit trail.

Zuny FesterBy Zuny Fester, Head of Operations and Marketing
Reviewed by Zuny Fester
Published Last reviewed Editorial policy

Part of the finance integrations guide.

What posts the itemsendMessage (chat.postMessage) — one message per checklist line
What signals sign-offA reaction added via reactions.add, read back via reactions.get
What reactions.get returnsA users array per reaction, plus a count
What Slack's own docs admitThe users array "might not always contain all users that have reacted"
Duplicate protectionreactions.add returns already_reacted if the same user reacts twice with the same emoji

Why checklist items work better as separate messages

A reaction attaches to one specific message, identified by its channel and timestamp — there's no way to react to "line 4 of a 10-line checklist" if all 10 lines live in a single message. Posting each close checklist item as its own message via sendMessage gives every item its own reaction target, which is what makes per-item sign-off trackable at all.

Reading sign-off back

Slack's own API documentation for reactions.get describes the response shape directly: each reaction object carries a name, a count, and a users array of the people who added it. A workflow polling for close sign-off can check whether the agreed emoji (say, a checkmark) is present on a given item's reactions array, and who's listed in its users field.

The gap worth designing around

Slack's own documentation for reactions.get includes a specific caveat: the users array in the reactions property "might not always contain all users that have reacted," even though count is described as accurate. That means checking presence of the emoji (did anyone sign off) is reliable; checking exactly who is named in users for an audit trail is not guaranteed by the API's own stated behavior. If who signed off matters for compliance purposes, don't rely on the users array alone as the system of record — log it, but treat count and the emoji's presence as the dependable part.

Next step

Map the finance workflow with the most exposure and prove the automation path.

Bring the invoice, contract, payment reconciliation, or customer finance workflow you have to defend at audit. Loopfour can map the trigger, controls, integrations, and approval loop.

Book a workflow review

Worked example

A 12-item close checklist tracked as 12 messages

A controller's close checklist has 12 line items. A workflow posts each as its own message in a #month-end-close channel via sendMessage, then polls each message's reactions.get once a day during close week. Item 7 ("Bank reconciliation complete") shows a checkmark reaction with count: 1 and users: ["U04ABCDE"] — the AR lead. The workflow marks it signed off and moves on. Item 9 shows count: 0 for three days straight, which is exactly the signal a close-progress dashboard needs: not who's behind, but what's behind.

Frequently Asked Questions

Yes — reactions.get's users array can list multiple people for the same emoji on the same message. If sign-off should come from one specific role, the workflow needs its own logic to check who's in that array, not just whether the reaction exists.

The reaction disappears from that item's reactions array and the count drops — Slack doesn't keep a record of a reaction having once existed and been removed, so a workflow polling periodically could see an item flip from signed-off back to not-signed-off.

A workflow can also require a specific text reply ("done") or a button click via an interactive message instead of a reaction — both generate an explicit, logged interaction payload rather than relying on the reactions endpoint's documented incompleteness caveat.

Sources

Related

How-to

What should be on a month-end close checklist?

A complete close checklist covers subledger lockout, bank and balance-sheet reconciliations, accrual entries, intercompany revaluation and elimination if applicable, inventory review if applicable, consolidated review, and period lock. Each task should have a clear owner and a place in the dependency order, not just a due date.

Read more

Topic

Integrations

Every finance automation vendor publishes an integrations page: a grid of logos, a claim of "seamless" connectivity, and not much else. That page answers a marketing question — does this vendor touch…

Read more

How-to

How do I set up interactive Slack approval buttons for invoice approval?

Post the invoice as a message with an interactive button block, then respond to the click by opening a modal with the trigger_id Slack sends in the interaction payload — within three seconds, before any lookup or validation. Loopfour's Slack integration supports this through sendMessage (with blocks) and openModal, but the modal call has to happen first, not last.

Read more

Diagnostic

What breaks when two people react to the same close checklist item?

Nothing breaks mechanically — Slack allows multiple users to add the same reaction to one message, and reactions.get returns all of them in a single users array with an accurate count. What breaks is an assumption: if a workflow expects exactly one specific person to sign off, it can't tell from the reaction alone which of several reactors was the one who mattered.

Read more