Reconstructing managed portfolio holdings from SnapTrade transactions
Rostyslav Kolodij — third-place winner of the SnapTrade student hackathon (Hack Atlantic 2026).
Published October 23, 2026 · SnapTrade

At a glance
- Port Calibrate rebuilds managed holdings from SnapTrade activities when reported positions are missing.
- Stable security identifiers, transaction normalization and account-total checks help make the reconstruction explainable.
- A withdrawal planner turns account data into comparisons based on visible growth assumptions.
What should a portfolio app do when an account has a balance but its positions response is empty? Treating it as an empty portfolio can hide the information a user needs.
Port Calibrate tackles that problem by rebuilding holdings from transaction activity, then checking the result against the account total.
Rostyslav studies at the University of New Brunswick. A car purchase prompted Port Calibrate: which account should fund a withdrawal, and how might that affect future growth?
An empty positions response needs context
In Rostyslav’s observed Wealthsimple connection, managed accounts returned no positions even though their activity history contained buys and sells. His integration findings document that specific behavior; it is not a claim about every managed account or brokerage.
The app uses reported positions for self-directed accounts. For the managed accounts that need it, a separate pipeline reconstructs holdings from the available activity history.
Rebuild holdings before estimating their value
Reconstruction starts with retrieving and sorting transaction activity. The app identifies each security, normalizes quantities and combines the events into holdings.
Three implementation details make that process more reliable:
- Retrieve every available page. The data adapter throws an error if its page limit would truncate the history.
- Use a stable security identifier. The app prefers FIGI share-class identity, allowing an observed GLOV-to-GSWO ticker rename to remain one holding.
- Normalize transaction signs. Buys add units and sells remove them, even when source quantities arrive with different sign conventions.
After rebuilding quantities, the app looks for prices and converts currencies. It prefers live quotes where available and labels last-trade prices as a fallback. Missing prices or unavailable currency conversion produce warnings.
The reconstruction functions are separate from the live SDK adapter. That lets automated tests and the sample-data demo use the same core calculation code.
Check the result against the account total
Port Calibrate compares reconstructed holdings plus cash with the reported account total. If the difference exceeds its chosen three-percent tolerance, the app falls back to a labeled allocation estimate.
Our synthetic test deliberately created a large mismatch and confirmed that fallback. The tolerance is a decision in this prototype, rather than a SnapTrade requirement.
A matching total is a useful diagnostic, but it cannot confirm every security’s quantity. The app warns when history starts after an account opened or securities were transferred in, but it does not yet adjust for stock splits. The project’s findings also identify unresolved price-currency assumptions.
Turn account data into a withdrawal comparison
The reconstruction supports the problem Rostyslav originally wanted to solve: comparing ways to fund a purchase across accounts.
The withdrawal planner works with live accounts and uses sample data only in the public demo. In that demo, the app compares a sample $6,000 withdrawal from cash and TFSA accounts. Its estimates make the assumed growth cost visible alongside the choices.
We independently checked one synthetic scenario: at 2.5% annual growth over ten years, withdrawing $6,000 gives up about $1,681 of modeled growth. The app’s displayed result matched that calculation.
These comparisons depend on their assumptions. For example, the project uses current exchange rates for historical currency amounts and does not track TFSA contribution room. Those details matter when moving from a planning illustration to a personal financial product.
What developers can learn from Port Calibrate
Our independent run passed all 83 automated tests, along with type checks and the production build. Synthetic fixtures also exercised managed-holdings reconstruction, return calculations and mismatch warnings.
The useful engineering lesson is to handle missing data explicitly. Keep brokerage-specific interpretation in an adapter, make reconstruction testable and compare estimates with another source of account context.
The Port Calibrate source code shows that approach in a working student project. Developers building their own portfolio tools can start with SnapTrade’s API documentation and verify the response shapes their target brokerages provide.
Start building for free with SnapTrade
Have an idea for an app powered by brokerage data? Develop and test your integration for free on SnapTrade’s Build plan, with up to five brokerage connections.
