Tries

Financial Modeling and DCF Valuation Platform for Investors and Analysts

Tries is a financial modeling platform, a programmable alternative to terminals like Bloomberg and Capital IQ for generating DCF valuations.

Most of an analyst’s time goes into pulling numbers from filings and vendor APIs, normalizing them, and wiring them into spreadsheets. The modeling itself, the part that needs judgment, is a small slice of the work. Tries moves everything upstream of that judgment into infrastructure.

Workflow

A user picks a company, chooses a template such as a standard DCF under an enterprise or equity framework, and sets assumptions like risk free rate and terminal growth. The system fetches canonical data, resolves every formula through a dependency graph, and returns values with full derivation lineage, so any number traces back to the provider field it came from. Analyses export to Excel, PDF, or CSV.

The Tries landing page
Landing page

What makes it more than a data pipeline is that the calculation layer is polymorphic. The same metric, WACC for example, resolves through different equations depending on the company’s industry and the chosen DCF framework, and the dependency graph reshapes itself at runtime to match.

Stack

Area Tools
Frontend Next.js, TypeScript
Backend FastAPI, Python, SQLAlchemy, Pydantic
Data PostgreSQL, RDS Proxy
Infrastructure ECS Fargate, AWS Lambda, EventBridge Scheduler, SQS, S3

Architecture

A FastAPI application in front of PostgreSQL, split into five subsystems. The seam between them is the canonical fact store: the refresh pipeline writes to it on a schedule and the calculation engine reads from it on request, so ingestion can be slow and batched while resolution stays fast.

Tries system architecture, showing the frontend, five backend infrastructure subsystems, and storage
Full system architecture

Refresh Infra

EventBridge triggers a Lambda dispatcher, which fans out one queue message per company and provider, and Fargate workers call the provider APIs and upsert results through RDS Proxy. The workers run on Fargate rather than Lambda because a call spanning several years of statements can exceed Lambda’s timeout.

Refresh pipeline from EventBridge Scheduler through a Lambda dispatcher and SQS queue to Fargate workers and RDS Proxy
Refresh infrastructure

Calculation Infra

Discovers the dependency subgraph for the requested metrics, picks a formula variant at each polymorphic node, and evaluates in topological order so each metric is computed exactly once. Lineage trees are built afterward, which is what makes every value inspectable down to its source.

Calculation infrastructure with a graph assembler, variant resolver, calculation engine, lineage handler, and output caller
Calculation infrastructure

Data Infra

Reads go through a narrow pair of components rather than query logic scattered across services. The query builder decides what to fetch and from where, and the executioner runs it against RDS.

Data infrastructure with a query builder feeding a SQL executioner against RDS
Data infrastructure

Template Infra

A template is a JSON config holding the DCF framework, the required metrics, and the section layout. The assembler validates incoming templates and extracts the metric list the engine asks for.

Template infrastructure taking JSON input into a template assembler
Template infrastructure

Output and Export Infra

A structure provider maps the template to a sheet layout, a file builder fills in the values, and an uploader writes the artifact to S3 and records its key. Downloads are served through presigned URLs, so the bucket stays private and no file passes through the application.

Output and export infrastructure with a file builder and structure provider feeding an S3 uploader
Output and export infrastructure

Status

Tries is in active development at Polymic, where I work on the ingestion, template, and export infrastructure.

If you’re interested in our code, check out Tries repository! 🚀