Human in the Loop
What Human in the Loop does
Human in the Loop puts a review checkpoint between extraction and delivery. A run that needs review stops in an awaiting review state after extraction and cleaning: no email is sent, no webhook fires and no Bucket row is written until a named reviewer approves it.
The important word is before. Review is not a correction you apply after bad data has already reached your ERP — the delivery step has not run yet. When the reviewer approves, the run resumes from exactly where it paused, carrying their edits.
- High-value data that must be verified before it moves downstream
- A compliance requirement for a documented manual approval step
- Documents where extraction is usually right but occasionally expensive to get wrong
- New suppliers or new formats, until you trust the flow
Two ways a run gets paused
A run can be sent for review in two ways: the flow-level switch pauses every run, or a conditional action inside a Cleaner pauses only the runs that match a rule. Both can be active at once, and when they are, the two reviewer lists are combined.
| Trigger | What pauses | Best for |
|---|---|---|
| Flow setting | Every run of the flow, regardless of what was extracted. | A document type that always needs sign-off, or a flow you have just built and do not trust yet. |
| Cleaner conditional action | Only the runs where a row matched your rule — for example a total above a threshold or a missing tax ID. | High volume where most runs are fine and you only want eyes on the exceptions. |
Reviewing every run defeats the point of automating extraction. The conditional route is usually the right one: set up a Cleaner with a Conditional Actions field, give it a condition such as total > 10,000, and add the review action. Only matching runs stop.
When a Cleaner triggers the pause, Tavnit records which rows and which fields matched. The review screen flags exactly those cells, so the reviewer starts at the reason the run was held rather than reading the whole table.
Turn on review for a flow
Review is configured per flow, in the flow's own settings. Only an Owner or Admin can change it. Reviewers are picked from your organization's members.
- 1Open the flow and find the Human in the Loop panel in its settings.
- 2Toggle review on.
- 3Select one or more reviewers from your org members.
- 4Process one document and confirm it lands in the reviewers' Human in the Loop queue.
A flow with review switched on and no reviewers assigned will pause runs that nobody can approve. The app warns you when you save in that state — assign at least one reviewer before you send documents through.
When the flow has a Cleaner, the pause happens after cleaning, so the table under review is the cleaned output — converted currencies, reformatted dates, computed columns and all. That is what will be delivered, so it is the right thing to check.
The review queue
Assigned reviewers get an email the moment a run needs attention, and the Human in the Loop page in the sidebar lists everything waiting. It is filtered to runs assigned to you — reviewers do not see each other's queues.
- Summary figures at the top: how many runs are waiting, how long the oldest has been waiting, your role, and how many flows are contributing
- One card per run with the filename, the flow it came from, when it arrived and its status
- Newest first
- A dot on the sidebar icon whenever something is waiting for you, refreshed automatically
Reviewing a run
The review screen is a split view: the extracted table on the left, the original document on the right. You check a value against the source without leaving the page, correct it in place, and approve. The divider is draggable, and on mobile you toggle between the two panels.

| In the data grid you can | How |
|---|---|
| Edit a value | Double-click the cell and type. |
| Change many cells at once | Select by dragging, Shift-clicking, or clicking a column header, then apply one value to the selection. |
| Drop a row from the output | Untick it — excluded rows are not delivered. |
| Add or remove a column | Use the toolbar. A removed column can be restored before you approve. |
| See what triggered the pause | Rows a Cleaner rule matched are flagged. |
| See what you changed | Edited cells stay highlighted until you approve. |
- The document panel handles PDFs with page navigation as well as image files
- Fit-to-width, fit-to-height and manual zoom; drag to pan
- Ctrl/Cmd + and − to zoom, Ctrl/Cmd + 0 to reset
Approving and rejecting
Approving folds your edits into the run and releases it downstream. Rejecting cancels the run and delivers nothing. Both decisions are final for that run: the pause is a one-time gate, not a state you can toggle back and forth.
| Decision | What happens to the run | What is delivered |
|---|---|---|
| Approve | Your edited table replaces the extracted output and the run resumes to completion. | Everything the flow is configured to do, in order: email output, webhook, Bucket export, form filling. |
| Reject | The run is cancelled and your reason is recorded. | Nothing. No email, no webhook, no Bucket row. |
You do not need every assigned reviewer to sign off. The first approval or rejection resolves the run; if a second reviewer had it open, their decision is refused because the run is no longer awaiting review. Refresh the queue to see the current state.
Some downstream steps consume credits when the run resumes. If the balance has run out while the run was waiting, the approval is refused rather than half-completed. Top up and approve again.
Who can review
Only members explicitly assigned as reviewers on a flow can see or act on that flow's paused runs. Being an Admin is not enough on its own — an Admin who is not on the reviewer list does not get the run in their queue and cannot approve it.
- Reviewer lists are managed per flow, by an Owner or an Admin
- A Cleaner's review action carries its own reviewer list, which is combined with the flow's
- A reviewer's queue shows only the runs they are assigned to
See user roles and permissions for what each role can change.
The append-only audit trail
Every action in a review is written to a permanent, append-only log with a timestamp and the reviewer's identity. Entries cannot be edited or deleted, so the record of who changed what — and what the data looked like before they touched it — survives the review.
| Recorded event | When it is written |
|---|---|
| Reviewers notified | The run enters the review queue. |
| Run viewed | A reviewer opens the review screen. |
| Cell edited | A value is changed, with the old and new value. |
| Row added / row removed | The reviewer adds or drops a row. |
| Column added / column removed | The reviewer changes the table's shape. |
| Approved | The decision, the reviewer, and how many edits were made. |
| Rejected | The decision, the reviewer, and the reason given. |
Tavnit stores the output as it was before the reviewer touched it, alongside the approved version. An auditor can compare the extraction against the delivered result without reconstructing it from the event log.
