Case study
Dune
An AI pipeline that reads county lease filings and drafts acquisition offers for a Permian Basin mineral acquisition firm.
- Role
- AI Software Engineer (Intern) — sole developer
- Domain
- Financial data / asset acquisition
- Status
- In production
Results
- 5–10% → 100%Lease coverage per county batch
- ~12 → ~3Hours per county-month (client-reported)
- ~$0.03Cost per document
Dune
Problem
Every month, each county records a new batch of documents, and somewhere in it are the oil & gas lease memoranda a mineral acquisition firm wants to make offers on. Finding them meant reading the batch by hand, pulling the owner and tract details into a spreadsheet, and mail-merging letters. That took long enough that most of each batch never got read at all.
What I built
A five-phase pipeline, built solo:
- Classify — screens every document in a county’s batch and surfaces the leases. New counties slot in as a new index reader, not a rewrite.
- Extract — reads each lease with the Claude API’s vision model into a validated schema.
- Store — loads into PostgreSQL on Supabase, idempotently, so a re-run can’t duplicate anything.
- Communicate — drafts an offer letter for each lessor from a template.
- Review — a Streamlit app where the owner approves letters and exports them, ready to mail.
It is designed to fail closed: anything ambiguous — a duplicated tract description, a trustee signature, a document that isn’t really a lease — is quarantined for a person instead of being sent. Nothing leaves without the owner’s sign-off.
It also runs without me: a batch dropped in Google Drive is picked up by a scheduled GitHub Actions job and processed end to end on managed services, so it doesn’t depend on my laptop being open.
Impact
In production. The first fully unattended monthly run completed in August 2026, and the system now reads every document in a batch where the owner used to sample 5–10%, cuts the monthly work per county from about 12 hours to about 3 (his estimate, stage by stage), and costs about three cents a document to run. Every letter waits for the owner’s approval before anything is mailed.
Stack
- Python
- Claude API (vision/OCR)
- Supabase (PostgreSQL)
- Streamlit
- GitHub Actions
- Google Drive API