The idea
Most small companies track vendor contracts in a spreadsheet someone forgets to update, or nowhere at all. This is a self-hosted app you point at a folder (or an inbox) of vendor PDFs — SaaS agreements, insurance policies, equipment leases — that extracts key terms (renewal date, auto-renewal clause, notice period, price, term length) and puts every contract on a shared calendar with alerts weeks before a deadline that actually matters.
Why build this
Auto-renewal clauses are a deliberate trap: vendors bank on 30-day notice windows nobody tracks. A single missed cancellation window can cost a company thousands, and finance teams at 10-50 person companies rarely have procurement software — that tier is priced for enterprise. Document-extraction LLMs are now cheap and accurate enough to reliably pull structured fields out of messy, inconsistently formatted contract PDFs, which makes this finally buildable by one person instead of requiring a team of contract lawyers annotating training data.
Stack sketch
- Backend: Python (FastAPI) with a Postgres database for contracts, terms, and alert schedules
- Extraction: Claude API with a structured output schema (renewal date, notice period, auto-renew boolean, price, term) run over PDF text pulled via
pypdforunstructured - Ingestion: watched folder via
inotify, plus an email-in address (Postmark inbound) so contracts can just be forwarded - Frontend: server-rendered HTML with HTMX for the contract list, calendar view, and per-contract detail/edit page
- Alerts: scheduled job (APScheduler or cron) that emails/Slack-webhooks reminders at 90/30/7 days before notice deadline
- Deploy: single Docker container, SQLite as a lighter-weight alternative to Postgres for solo/small teams
Scope for v1
- In: PDF upload/forward, LLM extraction of the five core fields, a list view sortable by next deadline, email alerts at fixed intervals
- In: manual correction UI for extracted fields, since contract language varies enough that extraction won't always be perfect
- Out: e-signature integration, spend analytics/reporting, multi-currency normalization, negotiation workflows
- Out: OCR for scanned/image-only contracts in v1 — require text-layer PDFs, add OCR later if requested
Where it could go
Next step is a browser extension or email plugin that flags a contract as "under negotiation" and diffs redlines against the previous version, since renewal time is also when terms quietly get worse. After that, a lightweight approval workflow (finance signs off before a renewal notice deadline passes) would turn this from a tracker into an actual gate, useful for companies under SOC 2 vendor-management requirements.
A second direction is pattern detection across contracts — flagging vendors with unusually short notice windows or above-market price increases year over year — which becomes more valuable as the contract corpus grows.
Watch out for
Extraction accuracy on inconsistent contract formatting is the whole risk: a missed renewal date is worse than no tool at all, since it creates false confidence, so v1 needs a clear "low confidence, please verify" flag on every extracted field rather than silently trusting the model.