Billing Desk
Turn invoices and receipts into reviewable rows linked to their original documents.
Billing Desk combines document ingestion, structured extraction, a reviewable invoice table, document viewing, and chat. It uses app-managed file storage and a similarity index so uploaded material can support both structured results and document questions.
Process a document
- Create Billing Desk and open the app.
- Upload an invoice or receipt and follow ingestion status.
- Inspect the proposed table or extraction where presented.
- Select the destination table and review the populated rows.
- Select an invoice to compare its values with the original document in the viewer.
After ingestion, choose Generate table in the table list. Review the proposed table name, columns, types, and rationale, then accept the proposal to create the table and start population. Regenerate table requests another proposal; it is different from simply selecting a saved table. The app’s workflows cover ingestion, chat, table proposal, and table population. A table proposal is a suggested structure; populated cells remain values to review. Confirm supplier, invoice identifier, dates, currency, line items, totals, tax, and any other fields your chosen table includes against the source.
Use the workspace
The table list selects the working table. The proposal card helps establish a structure for incoming documents. The invoice grid displays rows and supports the table features available to your app. Selecting a row drives the selected-invoice display and document viewer. The account profile component displays the signed-in user’s account context.
Use chat for questions supported by the ingested material. For a calculation, confirm the rows, currency, and period included in the question. A generated answer can omit a relevant item or misunderstand an unusual layout; use the source links and table evidence to check it.
Manage repeated uploads and corrections
If a run is interrupted, inspect its saved outcome and the table before uploading or populating again. A duplicate file, repeated invoice, and corrected invoice are different cases. Keep source identity and document revision in view when replacing an extraction or revising a cell.
Deleting a table row does not necessarily delete the source file, and removing a document can affect retained evidence. Use the documented document deletion flow when removing source material. Export the records you need separately from an app-definition export.
Adapt the app
Change the table structure and prompts for the documents your team receives. Test on examples with multiple pages, credits, discounts, and nonstandard dates before increasing volume. Billing Desk helps organise and inspect document information; the human review remains part of deciding which rows to use in downstream work.
Parameter reference
These are the starting template’s declared parameters. Your saved app can have its own version of the schema. A default applies when no explicit value is supplied; a required field still needs a valid value.
| Setting | Accepted value | Required | Default | What it controls |
|---|---|---|---|---|
title (title) | string; minimum characters 1; maximum characters 200 | Yes | Not specified | The app title; also woven into the provisioned workflow names. |
title: exposed as an app interface parameter.
Connection slots
| Slot | Required | Initially enabled |
|---|---|---|
platform_store | Yes | Yes |
platform_vectorstore | Yes | Yes |
Choose compatible saved connections for user-supplied slots. Managed slots are supplied by Strive. Disabling an optional slot stops its use without necessarily deleting the saved binding. See connector policy.
Included workflows
| Workflow | Steps in the starting recipe | Trigger |
|---|---|---|
ingest | 19 | on_file_added |
chat | 6 | manual |
propose | 7 | manual |
populate | 7 | manual |
Inspect the saved app’s workflows for changes made after creation. A workflow’s presence does not mean that every interaction runs every workflow.
Output format: invoice
One invoice the model read from an uploaded file: vendor, date, total, currency and tax flattened from its reply (invoice), and the file it came from.
| Setting | Accepted value | Required | Default | What it controls |
|---|---|---|---|---|
document id (document_id) | string or null | No | Not specified | — |
object key (object_key) | string or null | No | Not specified | — |
file name (file_name) | string | Yes | Not specified | — |
invoice (invoice) | object | No | Not specified | — |
vendor (vendor) | value | No | Not specified | — |
date (date) | value | No | Not specified | — |
total (total) | value | No | Not specified | — |
currency (currency) | value | No | Not specified | — |
tax (tax) | value | No | Not specified | — |
Output format: message
One assistant answer in the invoice chat, with the question and how many invoices it saw.
| Setting | Accepted value | Required | Default | What it controls |
|---|---|---|---|---|
role (role) | "assistant" | Yes | Not specified | — |
question (question) | string | Yes | Not specified | — |
invoice count (invoice_count) | integer; minimum 0 | Yes | Not specified | — |
content (content) | string | No | Not specified | — |
Output format: proposal_marker
Marks the proposal run whose table proposals the App shows. Written by the mark step as the run's completion marker.
| Setting | Accepted value | Required | Default | What it controls |
|---|---|---|---|---|
record type (record_type) | "proposal_marker" | Yes | Not specified | — |
Output format: table_proposal
A table the model proposes for the uploaded billing documents: its name and typed columns.
| Setting | Accepted value | Required | Default | What it controls |
|---|---|---|---|---|
record type (record_type) | "table_proposal" | No | Not specified | — |
id (id) | string | Yes | Not specified | — |
table name (table_name) | string; maximum characters 100 | Yes | Not specified | — |
doc type (doc_type) | string | Yes | Not specified | — |
columns (columns) | list of object | Yes | Not specified | — |
key (columns[].key) | string | Yes | Not specified | — |
label (columns[].label) | string | Yes | Not specified | — |
type (columns[].type) | "text" / "number" / "date" | Yes | Not specified | — |
rationale (rationale) | string | Yes | Not specified | — |