Skip to content

Portfolio Insights

Portfolio Insights turns the deals you’ve already taken through Memosa into context for the deal in front of you. Instead of treating each memo as an island, it aggregates across your finalized deals to answer questions like “how does this sponsor’s track record look across the deals we’ve seen?” and “where does this deal’s cap rate sit relative to its peers?” The insights surface in the approval review panel and feed the AI’s understanding of your portfolio when it drafts and refines memo content.

Everything Portfolio Insights returns is an aggregate — medians, counts, ranges, and distributions. It never exposes an individual deal’s name, ID, or raw figures. And it never surfaces anything at all until enough deals contribute to keep individual deals anonymous.

Portfolio Insights computes several cross-deal views:

  • Sponsor track record — for a named sponsor, the median cap rate, median LTV, and median target IRR across the deals you’ve seen from them.
  • Asset-class risk patterns — for an asset class, the median cap rate, LTV, and target IRR, plus the observed range (low to high) for cap rate and LTV.
  • Market trend summary — a portfolio-wide roll-up: how many deals, the mix across asset classes, and the portfolio’s median cap rate, LTV, and target IRR.
  • Model quality distribution — how your deals’ model-integrity scores are distributed (under 70, 70–80, 80–90, above 90), with the median.
  • Archetype mix — the spread of deal archetypes across the portfolio (for example stabilized versus value-add).
  • Common red flags — what share of deals carry quality flags, the median flag count, and how flag counts are distributed.
  • Time-to-approval and engagement patterns that describe how deals move through the workflow.
  • Cohort benchmarking — where a specific deal’s metrics fall within its archetype-and-asset-class cohort, expressed as a percentile rank against the cohort median.

These views are what power the “how does this deal compare?” context in the review panel and the portfolio awareness the AI brings to suggestions and brushes.

The privacy floor: nothing surfaces under three deals

Section titled “The privacy floor: nothing surfaces under three deals”

Portfolio Insights enforces a hard anonymity floor. No statistic is returned until at least three deals contribute to it . If a sponsor, an asset class, or a cohort has only one or two qualifying deals behind it, the insight comes back empty rather than as a number that could be traced to a specific deal.

This floor is applied to every view, including each metric inside cohort benchmarking — a benchmark only reports a metric if that metric has at least three samples in the cohort. The result is that an aggregate can never be reverse-engineered down to an individual deal.

Portfolio Insights is scoped to you and, when applicable, to your organization:

  • Your deals. Every query is keyed to your own user identity, taken from your authenticated session — you never see another user’s portfolio, and the scope is never something you can pass in as a parameter.
  • Your organization. When you’re acting within an organization, Memosa verifies your membership and narrows the aggregates to that org’s deals. Deals that predate organization scoping (those with no org attached) are conservatively excluded from org-scoped views.

Reading Portfolio Insights requires Viewer access — any collaborator can see the aggregate context.

Only deals that finalized successfully contribute to portfolio aggregates. A deal whose analysis ended in a degraded state is recorded, but its numeric fields (cap rate, LTV, and so on) are considered unreliable and are excluded from the aggregations — so the medians and ranges you see reflect clean, completed deals.

Portfolio Insights reads from Memosa’s observability warehouse — a record of every finalized deal — rather than recomputing from operational data on each page load. Each finalized deal contributes one row carrying its asset class, sponsor, headline metrics, quality and model scores, archetype, and flag counts. The cross-deal views are computed over those rows, with the three-deal floor and the success-only filter applied before anything reaches you. For the engineering details of that warehouse, see Observability and Infrastructure.

  • src/canvas/services/portfolio_insights_service.pyPortfolioInsightsService: every aggregation method (sponsor track record, asset-class risk, market trend, model-quality distribution, archetype mix, red flags, formula-graph tiers, cohort benchmark) and the per-method enforcement that returns None below the three-deal floor.
  • src/canvas/services/portfolio_insights_queries.pyMIN_DEALS_FOR_AGGREGATE = 3 (the anonymity floor) and the warehouse SQL backing each view.
  • src/canvas/routes/portfolio_routes.py — the portfolio endpoints: Viewer auth, user-identity scoping from the session, and organization-membership verification for org-scoped aggregates.
  • observability-warehouse-consumers.md (native memory) — Portfolio Insights reads deal_finalizations from the warehouse; the N≥3 guard lives in the Python service layer (not SQL); finalization_status = 'success' is the universal filter.