Document intake that shows its work

DocuFlow pulls documents from the inboxes, folders and records they already land in, reads every field against the page it came from, and hands your team only the ones that need a person.

See a review

Review inbox

Documents the automation rules held back for a person. Work top-down: highest priority, then longest waiting.

Awaiting review38
Oldest waiting4 hoursOpen
Auto-approved today214
Failed1
Assigned to meUnassignedAllPrior authorizations17Referrals11+2 queues
SortPriorityDue soonest
Prior authorizations17DueWaitingConf.Flags
  • aetna-pa-whitfield.pdf2 pages · Prior authorization18m overdue4 hours ago71%3 flagsDA
  • UHC_precert_MRI_lumbar.pdf3 pages · Prior authorizationin 42m2 hours ago84%1 flagPR
  • fax_20260918_0912.tif4 pages · Prior authorizationin 1h 50m1 hour ago62%5 flags
  • Cigna PA - infusion - Okafor.pdf2 pages · Prior authorizationin 3h 5m38 minutes ago88%1 flagMW
Referrals11DueWaitingConf.Flags
  • Referral: cardiology consult1 page · Referralin 5h22 minutes ago93%1 flag
  • referral_ortho_hendricks.pdf2 pages · Referralin 6h 10m9 minutes ago79%2 flagsJO

jkmovespacepreviewopenuupload

aetna-pa-whitfield.pdfNeeds review
FieldsTimelineComments2AskData
Find a field…
All 24Flagged 3Empty 1
Patient
First name
Jordan
98%
Last name
Whitfield
98%
Date of birth
1968-04-17
97%
Member ID
W2918847301
96%
Health plan
Aetna Choice POS 11
  • Not in Payer plans.Use Aetna Choice POS II
71%
Requesting provider
Name
Elena Marsh, MD
93%
NPI
1457382916
94%
Phone
214-555-0187
88%
Fax
empty
  • Required for a fax reply. Read it from the page or ask the office.

It starts where the paperwork already lands

Connect a shared mailbox, a SharePoint library, a Teams channel or a Salesforce object once. Sources poll on their own, and any system can call a source's hook to say look now.

Every value, pinned
to the page it came from

Each field comes back with the box it was read from and a confidence built from the model, the OCR and how well the two agree. A second model can check the first one's work. Your reviewer confirms with Enter and moves on, instead of retyping a form into another form.

Learn more
Prior authorizations

aetna-pa-whitfield.pdf

Needs review18m overdue3 flagged
100%1/ 2
1 / 2
31
2

Prior Authorization Request Form

Medical services · Complete all sections. Incomplete requests will be returned.

FAX 1-888-555-0142

Page 1 of 2

Request typeXStandardUrgent (expedited, 72 hours)Received 09/18/2026 08:14
1 · Member information
Member nameWHITFIELD, JORDAN A
Date of birth04/17/1968
Member IDW2918847301
Group #081244
Health planAETNA CHOICE POS 11
2 · Requesting provider
Provider nameELENA MARSH, MD
NPI1457382916
Phone(214) 555-0187
Faxillegible
SpecialtyORTHOPAEDIC SURGERY
3 · Service requested
CPT / HCPCS29881
DescriptionARTHROSCOPY KNEE W/ MENISCECTOMY
ICD-10M23.221
DiagnosisDerangement, post. horn medial meniscus, R knee
Start date10/06/2026
Place of service22 · Outpatient hospital
4 · Clinical information

Pt reports R knee pain and locking x 5 months. Failed 8 wks PT and NSAIDs.

MRI 08/22/2026: complex tear, posterior horn medial meniscus. McMurray (+).

Requesting outpatient arthroscopic partial medial meniscectomy.

E. Marsh
09/17/2026

Included

Grounded extractionevery value carries its page, its box and the words it was read from
Second readera second model checks the first, per queue
Read from a regiondraw a box on the page and the field is read from exactly there
Line itemstables as an editable grid, pasted in or drawn row by row
Keyboard firstarrows to move, Enter to confirm, E to edit, ⌘Enter to approve
Splits and duplicatespackets split into their parts, repeats caught by fingerprint

Only the referrals,
not the whole mailbox

Intake rules decide what gets in at all. They read the sender, subject, body and attachments of an email, or the name, folder and age of a file, and anything the fields cannot say you can ask a model. Try it runs the rules against the real folder and imports nothing.

Learn more
Source · Intake mailboxOutlook · priorauth@northwindhealth.org

Which emails to pull

Leave empty to take every email in the folder. Conditions read the subject, sender, body and what is attached; a model can answer anything the fields cannot.

AllAnyof these must be true
  • Has attachmentsis yes
  • and
    From addressdoes not containnoreply@
  • and
    Ask a modelanswer is yes
    Is this a prior authorization request, or a reply to one we sent?
    Only when at least70% sure, otherwise the answer counts as no.

Which attachments to keep

Applied to each attachment of an email that got through above. Inline images, like signature logos and pasted screenshots, are never pulled.

When several attachments match

Every attachment that matchesOnly the first matchOnly the largest match
Try itnothing is imported

Try it

Reads the most recent items and shows what these rules would take. Nothing is imported.

Of the last 15 emails, this source would bring in 6 documents.

  1. PA request: MRI lumbar spine, member W5521093847Lakeside Orthopedics <intake@lakesideortho.example>PA_MRI_Lumbar.pdf · 412 KBimage001.png · 6 KBmatches
  2. RE: Additional clinicals for case 88213Dr. Priya Shah <pshah@valleycardio.example>clinical_notes_0912.pdf · 1,204 KBmatches
  3. Your September statement is readyBilling <noreply@officevendor.example>skipped
  4. Lunch and learn ThursdayMarcus Webb <mwebb@northwindhealth.org>skipped
  5. Fax from 12145550199 (4 pages)Fax gateway <fax@northwindhealth.org>fax_20260918_0912.tif · 880 KBmatches

Included

Outlook, SharePoint, OneDrive, Teamsone connection, any number of watched folders
Attachment pickingevery match, only the first, or only the largest
Message bodieswhen the email is the document, bring the email in
Hook addressa Salesforce Flow or a script can trigger a poll immediately

Checked against your data,
not just the page

Rules run after every extraction: patterns, ranges, dates, expressions across fields, a call to your own endpoint, and matches against reference data you upload or sync. A near miss arrives with the closest real value, one click away.

Learn more
Validation rulesPrior authorizations

Rules run after every extraction. Errors block approval; warnings flag the field for the reviewer.

OnRuleKindLevel

Member ID format

/^[A-Z]\d{10}$/

Patternerror

Plan is one we contract with

payer-plans · fuzzy ≥ 85%

Match data setwarning

Ordering provider is in network

provider-roster · normalized

Match data setwarning

Start date not in the past

today → today+180

Date rangeerror

Units match the CPT code

service.units <= lookup("cpt-limits", service.cpt).max

Cross-field checkerror

Eligibility check

https://eligibility.northwindhealth.org/v1/check

External lookupwarning
Data setsNorthwind Health
Data setKey columnRowsSource
Provider rosterprovider-rosternpi48.2kSynced hourly12 minutes ago
Payer planspayer-plansplan_name1,146Synced hourly1 hour ago
CPT limitscpt-limitscpt10.9kUpload3 days ago
Membersmembersmember_id412kSynced hourly6 hours ago

Not in Payer plans.Use Aetna Choice POS II

Included

Eleven rule kindsfrom a required field to an external lookup
Reference dataCSV, Excel or a synced SharePoint file, matched exact, normalized or fuzzy
Enrichmentfill fields from the row a value matched
Errors and warningserrors block approval, warnings flag the field for a person

Rules that run themselves,
and say why

When a document reaches a point in its life, check its conditions and act: approve it, route it, assign it, set a deadline, send it to a system of record. Every evaluation is logged with the values it compared and what each action did.

Learn more

Automations

Auto-approve clean prior auths

OnExtraction finishedPrior authorizationsmatched 1,284 of 1,902
RuleActivity 1,902

If

Leave this empty to act on every document that reaches the trigger.

AllAnyof these must be true
  • Lowest field confidenceis at least90 %
  • and
    Validation errorsis at most0
  • and
    Health planis in data setPayer plans

Then

Actions run in order. One that cannot run is recorded and the rest continue.

  1. ApproveApprove the document without a reviewer.
    NoteEvery field at or above 90%, plan on file, no rule errorsShows on the document's timeline so the decision is explainable.
  2. TagAdd or remove tags.
    Add
    straight-throughTag and press Enter
  3. Run a destinationDeliver the document through one of the queue's destinations.
    DestinationSalesforce · Case decision
Activity1,902Auto-approve clean prior auths
  1. UHC_precert_MRI_lumbar.pdf41 ms

    Conditions

    • Lowest field confidenceis at least90%· was94%
    • andValidation errorsis at most0· was0
    • andplan.nameis in data setpayer-plans· wasAetna Choice POS II

    Actions

    • Approved: every field at or above 90%, plan on file
    • Tagged straight-through
    • Delivered to Salesforce · Case 00188213
  2. fax_20260918_0912.tif12 ms

Included

Seven triggersfrom a file landing to a document waiting too long
Eighteen actionsdecide, route, change the data, tell people, send it on, ask a model
Dry runtest a draft against documents you already have, changing nothing
Eleven templatescomplete rules that open turned off
Loop guardno rule acts on one document more than eight times an hour
Never in the waya rule that fails is recorded and the document keeps moving

Questions a person
answers in a second

Is this urgent? Which queue does it belong to? What is the referring NPI? A condition or an action can be a question in your own words. The model's answer and its reason go into the run log, and below the confidence you set, nothing happens.

Learn more
Rule · Sort the fax lineDocument received · Every queue
  1. Ask AI to classifyPut a question to a model with a list of answers, then route or tag by the one it picks.
    AskWhat kind of request is this fax? Look at the form title and who it is addressed to.The model reads the file name, where it came from and everything already extracted.
    Answers
    Prior authorization→ stay putpa
    Referral→ Referralsreferral
    Medical records request→ Records requestsroi
    Something else→ stay puttriage
    One row per answer. Each can send the document to a queue and tag it.
    Only if
    75% sure or more
    Below this the model's answer is recorded in the run log but nothing is changed.
  2. Ask AI for a valuePut a question to a model and write its answer into a field.
    FieldReferring provider NPI
    AskWhat is the referring provider's NPI?
Askaetna-pa-whitfield.pdf
1 questionNew conversation

Has the patient tried conservative treatment, and for how long?

Read 2 pages, located all 2 citations · 3.8s
Yes. The clinical notes say the patient completed eight weeks of physical therapy and took NSAIDs without relief1, and that the knee has been locking for five months2.
1p1Failed 8 wks PT and NSAIDs.2p1R knee pain and locking x 5 months
Clinical summary
Ask about this document…

Included

Confidence flooran unsure answer is written down, never acted on
Classify and routeeach answer can move the document and tag it
Fill a fieldonly when it is empty, in the format you ask for
Ask the documentanswers from these pages only, with citations that jump to the words

A rule never acts on a guess. Below its confidence floor, the answer is written down and nothing else happens.

Confidence floorsCondition tracesDry runs

Prompt and answer text is not stored unless you switch it on. It is your patients' paperwork.

Cost per callSeparate trace permission90-day retention

Off the Case,
and back onto it

A Salesforce source watches one object and pulls the files attached to matching records, classic attachments included. A destination writes what was extracted onto any object you map, finds parent records by searching for them, and can put the original file back on the record.

Learn more
Destination · SalesforceNorthwind Health Cloud
CaseCase
What to doCreateUpdateUpsert

Changes a record that already exists.

Field mapping

What each Case field is filled with.

  • SubjectTextSubjectTemplatePA {{service.cpt}} · {{patient.lastName}}As written
  • Status*PicklistStatusFixed textDecision PendingAs written
  • Member IDTextMember_ID__cExtractedMember IDTrim whitespace
  • Requested Service DateDateRequested_Service_Date__cExtractedRequested startDate (YYYY-MM-DD)
  • CPT CodeTextCPT_Code__cExtractedCPT codeAs written
  • DocuFlow LinkURLDocuFlow_URL__cDocumentLink in DocuFlowAs written

Related records

Fill a lookup by searching for the parent, so nobody has to paste eighteen-character ids into DocuFlow.

AccountId find the Account whose

NPI__cis exactlyExtractedProvider NPI
If nothing matchesstop and report it

Try it

Builds the record against the most recently processed document in this queue and checks it against Salesforce. Nothing is written.

Using aetna-pa-whitfield.pdf, this would update one Case keyed on 5003h00000QxT2kAAF.

  • Case.BusinessHoursId is required and nothing fills it. Salesforce sets it from the org's default hours.

Salesforce would accept this record.

Lookups

AccountId: found Lakeside Orthopedics by NPI__c

The record

{
  "Subject": "PA 29881 · Whitfield",
  "Status": "Decision Pending",
  "Member_ID__c": "W2918847301",
  "Requested_Service_Date__c": "2026-10-06",
  "CPT_Code__c": "29881",
  "AccountId": "0013h00000Lk9QpAAJ"
}

Included

Any objectstandard or custom, create, update or upsert
Lookups by valuefind the Account whose NPI matches, not an eighteen-character id
Line items as child rowsa repeated table becomes records under the parent
Try itbuilds the record and asks Salesforce about it, writing nothing

The rest of the desk,
already there

Deadlines that count business hours and holidays. Assignment by turn or by lightest load. Notifications for mentions and breached SLAs. A command palette that searches inside extracted values, and throughput counted in the database so it stays true at any volume.

Learn more
Business hoursCentral Time
DayOpen
Mon8:00 AM – 6:00 PM
Tue8:00 AM – 6:00 PM
Wed8:00 AM – 6:00 PM
Thu8:00 AM – 6:00 PM
Fri8:00 AM – 5:00 PM
SatClosed
SunClosed

Holidays

Thanksgiving DayNov 26

Notifications⇧N

Notifications

AllUnread 2

Today

  • SLA breached: aetna-pa-whitfield.pdfPrior authorizations · due 18 minutes ago18 minutes ago
  • Priya Raman mentioned you@Dana can you confirm the plan name on this one?40 minutes ago
  • Assigned to you: UHC_precert_MRI_lumbar.pdfRound-robin · Prior authorizations2 hours ago
Command palette⌘K
W29188esc

Documents

aetna-pa-whitfield.pdfMember IDW2918847301
Needs review
whitfield_mri_referral.pdfMember IDW2918847301
Approved

Actions

Show all documents matching “W29188
Queue · Work managementPrior authorizations

Service level

How quickly documents in this queue should be handled, from the moment they arrive.

72hours

Assignment

Who picks up new work.

Analyticslast 14 days

Auto-approved

76%

3,412 of 4,488 approved

Median processing

14.2 s

p95 41.8 s

Documents per day

By final status

approvedneeds reviewrejectedfailed

It learns your forms
from your corrections

When reviewers keep fixing the same field, DocuFlow proposes a short instruction for it, and nothing reaches the extraction prompt until someone accepts it. Evaluate scores any change against a golden set of approved documents, field by field, before it ships.

Learn more
Schema · LearningsPrior authorizations

Learnings 1 to review

Per-field guidance distilled from reviewer corrections (212 recorded, 9 new; distilled every 25). Only accepted learnings are added to extraction prompts. Measure their effect

  • plan.nameproposedfrom 9 corrections · 2 hours ago

    Plan names end in Roman numerals (II, III). A "11" or "111" at the end of a plan name is a misread numeral, not a number.

  • patient.memberIdacceptedfrom 14 corrections · 3 days ago

    Aetna member IDs start with W followed by ten digits. Ignore the two-digit suffix printed after a dash on older cards.

  • service.startacceptedadded by hand · last week

    When only a month and year are given, use the first of the month and leave the field flagged.

EvaluatePrior authorizations · golden set of 120

Runs

Tick two runs to compare them.

RunField acc.Docs correctStraight-throughCost

With learnings, 2 new

2 hours ago · 120 docs

97.8%88.3%81.7%$4.12

Baseline, schema v7

yesterday · 120 docs

95.1%79.2%72.5%$4.06

Flash as first reader

3 days ago · 120 docs

93.4%74.2%68.3%$1.18

What every model call cost,
and why it was made

Each call is filed against the work that caused it: extracting a claim, a rule asking a question, a reviewer asking the document. See spend by day, model, queue and document, and open any run to read it call by call.

Learn more

AI cost

24 hours7 days30 days90 days

Every model call the workspace made: what it cost, how long it took, and what it was for.

Spend

$163.83

last 30d

Model calls

82,565

41 failed

Median call

1.9 s

p95 8.4 s

Tokens in

611.2M

402.9M cached

Tokens out

18.4M

2.1M thinking

Spend per day

Cost of every model call, by the day it was made.

By model

Which model the money went to, and how fast it answers.

ModelCallsMedianCost
gemini-3.1-pro-preview18,4426.1 s$132
gemini-3.8-flash41,2081.9 s$29.80
gpt-oss-120b22,9150.9 s$2.41

By kind of work

What the models were asked to do.

Extract aetna-pa-whitfield.pdf

Extraction · pipeline

Cost

$0.0884

Took

16.3 s

Calls

4

Tokens

38.1k / 2.2k

Document aetna-pa-whitfield.pdf
Queue Prior authorizations
Statusok

4 calls, in order

  • Classify pages1.2 s$0.0021
  • Extract fields · page 16.8 s$0.0412
  • Extract fields · page 25.9 s$0.0388
  • Second reader · 4 low-confidence fields2.4 s$0.0063
    Modelgemini-3.8-flashvertex
    Tokens6,120 in · 214 out · 5,880 cached
    Finished becausestop

    Prompt and answer text is not recorded on this deployment.

Included

One ledgerspend is recorded once, so the headline and the breakdown agree
By queue and documentwhich forms cost the most to read, and why
Its own permissionthe per-call record is a separate grant from the totals
Nothing that blocksrecording never slows or fails a document

Access you can explain
to an auditor

Permissions are module and action pairs, granted to people, teams and API keys across the workspace or inside one queue. A clinical reviewer can approve prior authorizations and never open a claim. Every change is logged with who made it, when, and from where.

Learn more
Settings · RolesNorthwind Health

Clinical reviewer

Nurses who review prior authorizations and referrals. Can approve, cannot export or delete.

Documents9/11queue
readreadAllcreateupdatedeleteapproverejectexportassignreprocesscomment
Queues1/4queue
readcreateconfiguredelete
Validation rules1/2queue
readedit
Data sets1/2
readmanage
Usage1/2
readtraces
Audit log0/1
read
Activityevery change, who made it, from where
WhenActorActionTarget
2 minutes agoDADana Alvarezdocument.approvedaetna-pa-whitfield.pdf
9 minutes agoFax gatewaydocument.uploadedfax_20260918_0912.tif
1 hour agoMWMarcus Webbrole.updatedClinical reviewer
3 hours agoPRPriya Ramanautomation.updatedAuto-approve clean prior auths
yesterdayMWMarcus WebbapiKey.createdEpic interface engine
yesterdayDADana Alvarezmember.invitedj.okafor@northwindhealth.org

Included

Queue scopegrant a role in the queues a team works, and nowhere else
Custom rolesstart from a built-in role and narrow it
Sign-inMicrosoft Entra from any tenant, or a six-digit email code
Encrypted credentialsoutbound secrets are encrypted at rest and never sent back

An API that is safe
to retry

Send an Idempotency-Key and retry as often as the network makes you: the first answer is replayed for 24 hours. Every response carries a request id and your remaining budget, every error a stable code to branch on, and every webhook a signature.

Learn more
Terminal~/northwind/intake-bridge
$ curl https://docuflow.example/api/v2/documents \
-H "Authorization: Bearer dfk_live_…" \
-H "Idempotency-Key: fax-20260918-0912" \
-F queue=prior-authorizations -F file=@fax_20260918_0912.tif
HTTP/2 201
x-request-id: 3f1c9e2a-6b0d-4c8e-9a51-2b7f0c44d1e8
x-ratelimit-limit: 600
x-ratelimit-remaining: 597
{"documents":[{"id":"cmu8q2x1r000ljw09","duplicate":false}]}
# the connection dropped; send the same request again
HTTP/2 201
idempotent-replay: true
# same key, different file
HTTP/2 422
{"error":"This Idempotency-Key was already used with a
different request body.","code":"idempotency_conflict"}
API & keysNorthwind Health
NameKeyScopesLimitLast used
Epic interface enginedfk_live_7Hq2••••••••3 scopes1200/mina few seconds ago
Fax gatewaydfk_live_Pz81••••••••2 scopes600/min2 minutes ago
Warehouse nightly exportdfk_live_c0Wm••••••••2 scopes120/min9 hours ago

Access for Fax gateway

documents:createdocuments:readdocuments:approvequeues:read

A key can do what its creator can do, narrowed to these scopes. It never holds members, roles or other keys.

Included

Scoped keysa key holds its creator's access, narrowed, and never more
Rate limits per keyremaining budget on every response, 429 with Retry-After
Signed webhooksHMAC with a timestamp on every delivery
OpenAPIgenerated from the schemas that validate each request

Built at a healthcare desk,
ready for any stack of paper

A queue is one kind of document: its fields, its rules, where it comes from and where its data goes. Prior authorizations and claims run beside credentialing packets and vendor invoices, each with its own reviewers, deadline and threshold.

Queues

Each queue is one document family: its extraction schema, validation rules, sources and where approved data goes.

6 active queues

Show archived

Prior authorizations

Payer prior-auth requests: member, provider, service, diagnosis.

17 to review
Documents
9,412
Approved 7d
1,371
Confidence
94%
Review below threshold · 90%3 sources · 2 destinations

Referrals

Inbound referrals from partner practices, email and fax.

11 to review
Documents
6,208
Approved 7d
902
Confidence
92%
Review below threshold · 88%2 sources · 1 destination

Claims (CMS-1500)

CMS-1500 claim forms with service lines.

7 to review
Documents
22,730
Approved 7d
3,118
Confidence
96%
Review below threshold · 92%1 source · 2 destinations

Credentialing

Provider credentialing packets: licenses, DEA, board certs, CVs.

3 to review
Documents
1,044
Approved 7d
118
Confidence
89%
Always review1 source · 1 destination

Vendor invoices

Vendor invoices and bills with line items.

Clear
Documents
5,381
Approved 7d
740
Confidence
97%
Auto-approve1 source · 1 destination

Records requests

Release-of-information requests and authorizations.

2 to review
Documents
2,190
Approved 7d
301
Confidence
93%
Review below threshold · 90%1 source · 0 destinations

Common queues

Utilization managementprior authorizations, referrals, appeals
Revenue cycleCMS-1500 and UB-04 claims, EOBs, itemized bills
Provider operationscredentialing packets, licenses, board certifications
Health informationrecords requests and patient authorizations
Financevendor invoices, statements and receipts
Beyond healthcareinsurance claims, loss runs, bills of lading, contracts

Bring the forms your team still retypes

A working session on your own documents: one queue, your fields, your rules, and a count of what would have gone straight through.