OCR Extraction Node
The OCR Extraction node reads uploaded receipts or documents, sends them to the OCR service, and writes structured results into the conversation value bag.
It is typically used between a File Upload node and a List From Carousel node to turn uploaded receipts into prefilled expense items.
Use Case
Use the OCR Extraction node when:
- You want Atlas to extract line items or scalar values from uploaded receipts or documents.
- You want to reduce manual typing by prefilling later steps from OCR results.
- You are building a
Document Intelligenceflow where uploaded receipts should become candidate rows in an item list.
Example scenarios:
- Health or travel claims where users upload receipts and then confirm the extracted expense lines.
- Flows that need merchant name, transaction date, or receipt totals from the first uploaded document that contains them.
- Item list experiences where
[ocr.Items]is used as the prefill data source for aList From Carouselnode.
When not to use:
Do not use it for free-text capture or manual form entry. Use input nodes when the data must be typed directly by the user.
UI Examples
- TellUs
- WebChat
Backend-only logic item. It does not render its own TellUs UI.
Backend-only logic item. It does not render its own WebChat UI.
Behavior
When the OCR Extraction node is executed, it performs the following actions:
- Reads
FullUploadedFilePathsto get the uploaded files from an earlier step. - Inspects conversation property keys with the
ocr-prefix to decide which fields to request from OCR. - Sends each uploaded file to the OCR service.
- Merges
Itemsfrom all processed files into one JSON array. - Stores scalar values such as
Total,MerchantName, andTransactionDatefrom the first file that returns them. - Writes the extracted values to the value bag without the
ocr-prefix. - Sets
ResulttoOk,NoDataFound,SearchDataNotProvided, orException.
Behavior flow
Additional behavior notes:
Items,MerchantName, andTransactionDateare always requested because they are used to enrich each extracted receipt line.- Files that fail to download or return no OCR payload are skipped while the remaining files continue to process.
- If an extracted item already contains
MerchantNameorTransactionDate, the existing values are preserved. - OCR results below
80%confidence are discarded automatically. - The node is backend-only and does not render a customer-facing UI of its own.
Multiple files
When more than one file is uploaded, each file is scanned independently:
Itemsare collected from every file and merged into one flat list.- Scalar fields are taken from the first file that returns a value. Later files do not overwrite those keys.
- Each item is enriched with
MerchantNameandTransactionDatefrom its own receipt so the source context stays correct.
Node Metadata
| Property | Description |
|---|---|
| Node class | OcrExtractionNode |
| Runtime role | Backend logic item |
| RequireUserResponse | No |
Input Properties
| Property | Description |
|---|---|
| FullUploadedFilePaths |
Set this to the upload node's structured file output, for example This is the only direct node input. The rest of the extraction behavior is controlled by conversation property keys with the |
Conversation Properties
The node also reads conversation property keys prefixed with ocr- to decide which fields to extract. The value of the conversation property is not used. Only the key matters.
| Property key | OCR field requested | Notes |
|---|---|---|
ocr-Items | Items | Triggers item list extraction. Always merged across files. |
ocr-Total | Total | Receipt total amount. |
ocr-Subtotal | Subtotal | Receipt subtotal. |
ocr-TotalTax | TotalTax | Total tax amount. |
ocr-MerchantName | MerchantName | Store or merchant name. |
ocr-TransactionDate | TransactionDate | Date of the transaction. |
ocr-TransactionTime | TransactionTime | Time of the transaction. |
ocr-CountryRegion | CountryRegion | Country or region on the receipt. |
ocr-ReceiptType | ReceiptType | Receipt type classification. |
Items, MerchantName, and TransactionDate are always requested even if no matching ocr- conversation properties are declared, because they are needed to enrich extracted receipt lines.
For the downstream table pattern, see Item List Prefill.
Output Properties
| Property | Description |
|---|---|
| Items | JSON array of extracted receipt line items merged from all processed files. Each item typically includes Example: Items from all processed files are merged into one list. Each item is enriched with merchant and date values from its own receipt. |
| Total | Receipt total amount from the first processed file that returns a value. Available when the |
| Subtotal | Receipt subtotal from the first processed file that returns a value. Available when the |
| TotalTax | Receipt total tax amount from the first processed file that returns a value. Available when the |
| MerchantName | Merchant or store name stored as a plain string. This value is also used to enrich each extracted item record with the merchant name from its source receipt. |
| TransactionDate | Transaction date stored as a plain string. This value is also used to enrich each extracted item record with the date from its source receipt. |
| TransactionTime | Transaction time from the first processed file that returns a value. Available when the |
| CountryRegion | Country or region detected on the receipt. Available when the |
| ReceiptType | Receipt type classification returned by the OCR service. Available when the |
| Result | Execution status for the OCR extraction step. Supported values:
|
All extracted values are written to the conversation value bag without the ocr- prefix. Scalar outputs are stored from the first file that returns them. Items is merged across all processed files.
Scalar Output Examples
| Value bag key | Example value |
|---|---|
MerchantName | "Demo Store" |
TransactionDate | "2026-05-07" |
Total | "129.90" |
Editor Example
This reference flow shows the OCR extraction step between file upload and item list prefill.
Example setup:
FileUpload node variable: receiptUpload
OCR Extraction node variable: ocr
FullUploadedFilePaths = [receiptUpload.UploadedFileData]
Conversation properties:
ocr-Items = ""
ocr-MerchantName = ""
ocr-TransactionDate = ""
ocr-Total = ""
After processing, the value bag can contain:
Items = "[{\"Description\":\"Wireless Mouse\",\"TotalPrice\":\"29.90\",\"MerchantName\":\"Demo Store\",\"TransactionDate\":\"2026-05-07\"}]"
Total = "129.90"
MerchantName = "Demo Store"
TransactionDate = "2026-05-07"
Result = "Ok"
Typical downstream item list prefill:
{
"prefillData": "[ocr.Items]",
"prefillTableDefinition": "[{\"title\":\"Description\",\"value\":\"Description\",\"isSummable\":false},{\"title\":\"Amount\",\"value\":\"TotalPrice\",\"isSummable\":true},{\"title\":\"Date\",\"value\":\"TransactionDate\",\"isSummable\":false},{\"title\":\"Merchant\",\"value\":\"MerchantName\",\"isSummable\":false}]"
}
In the item sub-flow, input nodes can use Start.Description, Start.TotalPrice, Start.TransactionDate, and Start.MerchantName as default values after a user picks a suggested OCR row.