The problem.
Comparing investment products meant visiting different sources and untangling how rates, fees, and taxes were presented. I built Yield to bring that information into a more understandable experience. The comparison interface is only one part of the work: useful results depend on reliable inputs.
Key decisions.
Start with the source.
Each fund and Sacco needed an accurate, reliable source. Different publishers use different pages, formats, and fact sheets, so a single extraction approach was not enough. The pipeline supports HTML and PDF extraction with browser-rendering fallbacks.
Make updates repeatable.
Scraping runs through a scheduled cron entrypoint. Per-source timings and outcomes make failures easier to investigate. Yield-change validation flags suspicious updates, and administrative overrides allow corrections.
Make the comparison understandable.
The experience brings filtering, comparisons, and return calculations together. The calculator presents gross returns, fees, and tax separately so users can understand the calculation rather than just seeing a final number.
How it works.
- Source-specific extraction from fund websites and PDF fact sheets
- Cloudflare browser rendering for sources that need JavaScript
- Scheduled collection with source diagnostics and change validation
- PostgreSQL and Prisma for product data and historical yields
- Search foundations, comparison pages, and interactive return calculations
A polished comparison is only as useful as the data behind it. Source reliability and a clear experience have to be designed together.