UpstrimaTurning messy documents into structured data.
An AI platform for oil and gas, where agents and supervised workflows run on documents that were written for people: daily drilling reports, well data, operational summaries.
How it flows
- model
- deterministic check
- person
- plumbing
- 01
Document
PDF, scan, export
- 02
Ingestion
normalize, keep the original
- 03model
Classification
what did we receive?
- 04model
AI Extraction
against a typed schema
- 05check
Validation
schema + domain rules
- 06check
Confidence / Exceptions
below threshold → route
- 07human
Human Review
only what needs it
- 08
Structured Data
safe to use downstream
Upstrima runs AI agents and supervised workflows for oil and gas engineering teams. Underneath most of them is one of those problems that sounds simple until you actually build it: taking documents that were designed for humans and turning them into data that software can trust.
Reports arrive in different formats and layouts. The real challenge isn't pulling text off a page. The system has to work out what kind of document it received, find the information that matters, produce structured output, validate it, and know when a result is uncertain enough that a person should look at it.
My work focused on the document intelligence and backend side of the product: ingestion, classification, extraction and validation, plus the exception and review paths around them. Each one is built as a reusable processing capability, not a one-off pipeline.

The interesting part wasn't extracting information from the document. The interesting part was figuring out what to do when the model wasn't sure. That's why the workflow included validation, confidence checks, exception paths, and human review before the data reached downstream systems.
The hard parts
Extraction is the easy part to demo. Production is the long tail: a scanned page, a table that breaks across pages, a value that's present but contradicts another one. Every result carries a confidence signal and goes through validation, and anything that fails takes an explicit exception path instead of quietly flowing downstream.
Two reports can carry identical information and share almost nothing visually. Classifying the document first, then extracting against a schema for that document type, keeps the extraction logic from turning into a pile of special cases.
The product chains steps into workflows, so each capability (ingest, classify, extract, validate) has to behave like a good API: clear inputs, typed outputs, predictable failure modes. That's what makes a step safe to reuse in a workflow nobody has designed yet.
Role
Document intelligence & backend engineering
What I built
- Python processing services for document ingestion
- Document classification, so every file is read with the right schema
- Structured and entity extraction into typed outputs
- Validation: schema checks plus domain rules
- Confidence checks and exception handling for uncertain results
- Review workflows that send a person only the fields that need one
- REST APIs that plug processing into the rest of the platform
- Reusable processing steps that workflows can compose
Stack
- Python
- FastAPI
- Document AI
- IDP
- LLMs
- Structured Extraction
- Validation
- PostgreSQL
- REST APIs
- Workflow Automation
