Appearance
Running AI Analysis
Analysis is where the pile of PDFs turns into a matrix. You click Analyze, the AI reads the contract, and structured values land in the cells. This page walks through what happens under the hood, the controls you have, and the signals to pay attention to once values come back.
How Analysis Works (Short Version)
Term Tracker runs a two-pass extraction on every contract.
Pass 1: structure. The AI reads the whole document and pulls the high-level shape: document type, parties, a section map, and any parent-contract references. Think of it as the AI reading the table of contents and the first page of every section.
Pass 2: extraction. Your template's fields are split into small batches, and each batch runs as its own focused prompt over the full contract. Asking for a handful of fields at a time, rather than every field in one shot, means the model reliably returns each one instead of running out of room on long contracts. If a batch misses a field, that field is automatically re-requested on its own until it comes back. Every batch reads the same cached copy of the contract text, shared across all of Pass 2's requests, so the extra prompts add little cost.
Every extracted value comes back with four things attached:
- The value itself (short; this is what lands in the matrix cell)
- A confidence score, 0 to 1
- The source page it was found on
- The source text: the verbatim excerpt from the contract
All four are visible in the term drawer. The matrix shows just the value.
The Analyze Button: Three States
The button changes its label based on what is actually possible in the current project state.
- Analyze: runs analysis on a single contract. You will see this on the Documents list and on the Contract page.
- Analyze All: batch-queues every contract in the project that has not been analyzed yet. Skips anything already complete.
- Re-Analyze All: force-queues every contract, including already-complete ones. Use this after changing a template's field instructions or activating a previously-inactive field.
Model Selection
Next to the Analyze button, a dropdown lets you pick which model runs the extraction. Default is Claude Sonnet 5. The full list:
- Claude Sonnet 5 (default): near-Opus extraction quality at a lower cost, with a very large context window for long contracts. The right choice for most work.
- Claude Opus 4.8: highest accuracy on the longest or most complex contracts. The slowest and most expensive option.
- Claude Haiku 4.5: fast and cheap. Use for simple or short contracts. It has a smaller context window, so very long documents may be analyzed only in part (see below).
The extraction schema is the same across all models. Switching models does not change what the matrix columns are, only how they get filled in.
How Analysis Runs (Transparent to You)
Every analysis runs the same way, and you do not have to think about it. The job queues to a background worker, and the app polls for status and updates the contract in place while you stay on the page. You do not have to wait on the screen: you will get an email when a contract finishes.
There is no file-size threshold and no inline path to reason about. A one-page order form and a 300-page master agreement follow the identical pipeline, and the only difference you notice is that the longer one takes longer.
Rate Limits
To keep cost predictable, analysis runs are capped:
- Per-user rate: 5 analyses per minute and 30 per hour.
- Per-project rate: 200 analyses per day across all members.
If you hit a limit (this is unusual outside of large bulk re-runs), the row shows a "Rate limit — wait a bit" label and you can retry in a moment. Analyze All counts against the same budget; if the per-day cap would be exceeded by a single big batch, queue it in smaller chunks across days.
Confidence Scores and the 0.7 Threshold
Every extracted value gets a confidence score from 0 to 1. The matrix flags any cell under 0.7 amber. That is your review queue.
Amber does not mean wrong; it means the AI was not sure. A lot of amber cells resolve to "yes, that is right" when you check the source text. Some resolve to a quick override. Either way, amber is where you spend your review time.
Above 0.7 cells are worth spot-checking, but they do not need line-by-line review.
Once you validate a cell, it stops showing amber even if its score is below the threshold, and it drops out of the flag queue. Your sign-off settles the value, so the model's original uncertainty is no longer flagged.
A cell can also be flagged for a structural reason rather than the model's own doubt. If a value does not fit the field's type, such as a date field that comes back with something that is not a date, Term Tracker caps its confidence so it lands in your review queue instead of sitting in the matrix as a settled value. The original text the model returned is kept in the term drawer, so you can see exactly what it produced and decide what the cell should say.
Grounding: Is the Supporting Quote Real?
Every extracted value comes with a supporting quote from the contract, shown in the term drawer. Term Tracker checks that quote against the actual document text. If it appears in the contract, the value is grounded. If it cannot be located, the cell carries a warning that the quote was not found in the document.
A quote that cannot be found is the strongest signal that a value may be invented, so it is the first thing to check. Term Tracker separates three cases: an exact match, a match found after allowing for formatting differences in the extracted text, and a quote it could not locate at all. Only the last is a warning. The first two both mean the supporting quote is real.
When the AI Can't Find a Term
The AI separates two cases that look similar but mean different things:
- Silent: the contract genuinely addresses a point by saying nothing that settles it, such as no exit window or no renewal option. That is a finding, so the cell reads Silent instead of showing a blank. "Silent on assignment" is often exactly the answer you need.
- Not found: the AI could not locate the field in the contract at all. The matrix renders these cells as a dash. The AI returns not-found rather than guessing, so the dash is trustworthy.
Keeping these apart matters for diligence: "the contract is silent on this" is a real answer, while a dash means "the AI could not find it, check for yourself."
When a Job Doesn't Fully Run
A dash is only trustworthy when the job actually finished reading the whole contract. When it could not, the contract row carries a badge so you never mistake a broken run for a real "not found." The states:
- Partial: the contract was longer than the model's read limit, so only the first part was analyzed. The badge reads "first N of M pages." Anything past that point was never seen. Re-run on Sonnet 5 or Opus 4.8 (both handle far longer documents than Haiku), or split the file.
- Incomplete: the model ran out of room to return every field, or dropped some. The badge shows how many fields were not extracted. Those fields are missing from this run, not confirmed absent. Re-analyze to fill them in.
- Unreadable: the file has no extractable text layer and is too large to read as page images (over 20 pages or 20 MB). Smaller scanned or photographed PDFs are now read directly, so only oversized ones land here (see Scanned and Image PDFs below). Split the file, or convert it to a text-based PDF or a DOCX, and re-upload.
- Failed: the run returned no usable result. Re-analyze; if it keeps failing, the file may be corrupt.
The point of these states is a diligence guarantee. A dash means "the AI could not find this" only when the job actually completed. A truncated, unreadable, or failed run is labelled as such instead of quietly showing dashes that read like real answers.
WARNING
Re-Analyze All costs real money. It re-runs every contract in the project with the current model and template: every page, every field, every call. Use it deliberately, after a template change or a meaningful field toggle, not every time you are curious whether the numbers might shift.
Scanned and Image PDFs
A scanned or photographed PDF has no text layer, so ordinary text extraction reads nothing from it. Term Tracker sends these files to the AI as page images instead, so the model reads the pages directly and still extracts your fields. This covers scanned PDFs up to 20 pages and 20 MB. Larger scans fall back to the text path and land in the Unreadable state described above.
Two things work differently for a scanned document:
- Source highlighting is not available. With no text layer, Term Tracker cannot locate the supporting quote inside the document to highlight it. The term drawer still shows the value and its source text, with a note that highlighting is not available for scanned files. Grounding warnings do not apply.
- Everything else runs the same. Confidence scores, the 0.7 threshold, Silent versus not-found, and the flag review queue behave exactly as they do for a text PDF. Source pages are real page numbers, because the model sees the actual pages.
DOCX files always use the text path; this applies only to PDFs.
Auto-Classification on Upload
You do not pick a document type yourself when you upload. Pass 1 runs automatically at upload time to classify the file against the template's document types (MSA, SOW, NDA, Lease, or whatever your template defines). The classification appears as an editable badge on the contract. Correct it there if the AI got it wrong.
Once you correct the badge yourself, that choice sticks: a later re-analysis will not overwrite a manual edit with a new auto-classification.
→ For more detail on the upload flow, see Uploading Contracts.
Flag Review Queue
Every project has a single page that lists every extracted term whose confidence fell below the threshold. It is the project-wide version of the amber cells in the matrix, collected in one list so you can work through them without hunting contract by contract.
How to reach it. Click the Flags stat on the project Overview or on the Documents page. The URL is /projects/:projectId/flags. If nothing is currently below the threshold, the page shows an empty state and you are done.
Each row shows the contract, the field, the extracted value, and the confidence percentage. Click a row to open that contract, where you can read the source text in the term drawer and either accept the value as-is or override it. Accepted values stay where they are; overrides replace the AI value with yours and clear the flag.
The queue updates as analysis runs land and as you work through rows, so coming back later picks up where the project actually stands rather than where it stood when you opened the page.
Threshold is admin-tunable
The cutoff defaults to 0.7 (70%). Admins can change it in Admin → Platform Settings. Lowering it shrinks the queue and raises the bar for what counts as "needs review"; raising it does the opposite.
Exporting the Reviewed Matrix
Two CSV exports come off the Analysis Matrix toolbar:
- Export CSV: the matrix as you see it. Every cell holds the effective value, which is your override where you made one and the AI value otherwise. Cells the AI marked as not found are left blank, so a stale AI guess never leaks into the file.
- Export audit CSV: a long-format record for sign-off. One row per contract and field, keeping the original AI value and your override side by side, along with confidence, the source page, the not-found state, and the validation state.
Use the plain export to hand someone the answers. Use the audit export when a reviewer needs to see what the AI said versus what a human changed.
Powers the Ask Feature
The extracted fields shown in the Analysis Matrix are the same data the Ask feature reads when you ask questions about your project. There is no separate indexing step. As soon as analysis completes for a contract, Ask can reference it.
→ For more detail, see The Analysis Matrix. → For more detail, see Templates & Fields. → For more detail, see Exporting Results.