Home
Back to Blog
TUTORIALIntermediate

AI Portfolio Monitoring: From Holdings File to Weekly Brief

Turn a holdings file into a weekly exceptions brief with Claude Code. One workflow for two readers: investors tracking stocks against a thesis, and PE teams tracking portfolio companies against budget and covenants, with tested flagging code.

October 27, 202612 min readClaude Code Playbooks
ai portfolio monitoringautomated portfolio reportai investment trackingweekly portfolio briefpe portfolio monitoringholdings tracker claudeclaude code finance

This post contains affiliate links. If you sign up through one, we may earn a commission at no extra cost to you. How we handle this.

Monitoring a portfolio is one job whatever the portfolio holds. You compare what is happening with what you expected, and you look at the differences. A retail investor with twelve stocks does it against a thesis. A PE associate with eight portfolio companies does it against a budget and a credit agreement. The inputs differ, but the structure is the same, and so is the failure mode: reading everything every week, noticing nothing, and finding out about the problem late.

This workflow turns a holdings file into a one-page weekly brief that contains exceptions only. It has three parts: a file of what you own, a file of what you expected, and a scheduled Claude Code run that compares them with what happened. The two tracks below share the structure and differ in the files.

The Pattern: Three Files and a Rule

Investor trackPE track
What you ownholdings.csv: ticker, shares, cost basisList of portfolio companies, ownership, deal date
What you expectedThesis in one line per holding, with a review triggerBudget, KPI targets, covenant terms
What happenedPrices, filings, earnings, newsMonthly financial package from each company
OutputHoldings needing a decision this weekCompanies off plan, with questions for management

The rule that makes it work: thresholds live in a file, flags come from code, and Claude explains. If a holding is flagged because it fell 12% on no news, that is arithmetic against a number you set. Claude's job is to find out why, and to say plainly when it can't.

New Claude workflows for investors, every week

One email a week with the newest playbooks. Free, like everything here.

No spam. Unsubscribe anytime.

Investor Track: Holdings to Brief

The files

ticker,shares,cost_basis,thesis,review_if
MSFT,40,310.00,"Cloud growth holds above 20%","Azure growth below 18% or capex guide cut"
KO,120,58.50,"Steady dividend compounder","Payout ratio above 80% or volume decline 2 qtrs"

The review_if column is the important one. It turns "watch this" into a condition you can test. Write it when you buy, while you're calm, and Claude will hold you to it when you aren't.

The data

Prices, filings and earnings can come from a data API. Our walkthroughs on the FMP API and the Fiscal.ai MCP server cover the connection, and the API comparison helps you choose. If you would rather not wire an API, a portfolio tool does part of this for you. Stock Rover tracks portfolios with performance analytics, dividend income projections and alerts, and you can export what you need within your plan's monthly export allowance. Koyfin is a good screen for watching a list of names and their charts, though its fundamentals can't be downloaded for Claude to read. Our Stock Rover vs Koyfin vs Seeking Alpha comparison covers which fits which job.

The weekly prompt

Write this week's portfolio brief from holdings.csv. For each holding, check what changed since last Friday: price move, filings, earnings or guidance changes, and news. Flag a holding only if (a) it moved more than 8% in the week, (b) its review_if condition may have been triggered, or (c) there is an event in the next 10 days. For every flag, say what the source shows and what you could not verify. Show portfolio concentration by position and sector. If nothing needs attention for a holding, don't mention it. Use the Stock Analysis playbook for any holding that triggered review_if.

For the deeper dive on a flagged holding, the Stock Analysis playbook covers fundamentals, technicals, competitive position and a bull and bear summary. If you want to look at the whole household instead of only the stocks, the Multi-Agent Financial Planner brings budget, retirement, investment and tax perspectives together. Both are analysis aids, not advice. The decisions stay with you.

PE Track: Portfolio Companies to Brief

The monthly package from each portfolio company is the input, and the budget and credit agreement are the yardsticks. The Portfolio Company Monitoring Dashboard playbook defines the output: an executive summary with green, yellow and red KPI flags, an actual-versus-budget variance table, covenant compliance status, trend charts and questions for management.

Flagging is arithmetic, so do it in code. Here are the two functions that carry most of the weight, tested on sample numbers:

def rag(actual, budget, amber=0.05, red=0.10, higher_is_better=True):
    """Green/amber/red from percentage variance to budget."""
    if budget == 0:
        return "n/a"
    var = (actual - budget) / abs(budget)
    if not higher_is_better:
        var = -var
    if var >= -amber:
        return "green"
    if var >= -red:
        return "amber"
    return "red"


def leverage_headroom(net_debt, ltm_ebitda, max_leverage):
    """Return (leverage, EBITDA cushion before the covenant trips, as a fraction)."""
    if ltm_ebitda <= 0:
        return None, None
    min_ebitda = net_debt / max_leverage
    return net_debt / ltm_ebitda, (ltm_ebitda - min_ebitda) / ltm_ebitda

Revenue of 9.2 against a budget of 10 returns amber, and 8.5 returns red. A cost line of 11 against 10 returns amber because the sign flips when higher is not better. With net debt of 60, LTM EBITDA of 20 and a 4.0x covenant, leverage is 3.0x and EBITDA can fall by 25% before the covenant trips. That cushion is the number a deal team wants on page one. A non-positive EBITDA returns None, which the brief should treat as a covenant conversation, not a calculation.

Read this month's packages in packages/ and budget.xlsx. Run the variance and covenant calculations with the functions in monitor.py. Write the portfolio brief: one line per company with its overall flag, then for each amber or red company the variance table, the likely drivers from the package commentary, covenant headroom, and five questions for the next management call. Mark any figure you couldn't tie to the package.

When a company is off plan and the question becomes what to do about it, the Value Creation Plan playbook builds the lever analysis and the 100-day plan, and the Portfolio AI Readiness Assessment scans the portfolio for where automation could move EBITDA.

Rules That Keep the Brief Honest

  • Exceptions only. A brief that lists every position is a report nobody reads. Silence should mean "nothing needs you".
  • Every figure carries a source and a date. A stale price next to a fresh filing is the classic way a brief misleads.
  • "Could not verify" is a result. End the brief with what Claude couldn't check.
  • No recommendation language. The brief says what changed and which condition tripped. It does not say buy or sell.
  • Thresholds change on purpose. If you loosen a threshold because a flag annoyed you, write down why.

Schedule It

A weekly Friday run is a fit for a Desktop scheduled task or a cron job calling claude -p, with the same trade-offs we cover in the morning market note walkthrough: the computer must be awake, the run should have a budget cap, and you check that the file exists. PE teams should also check what their fund documents allow before portfolio company financials go into any AI tool.

This article is for education and isn't investment advice. Plan features and limits come from vendor documentation as of October 2026 and change. Confirm them, and any restrictions on how portfolio data may be used, before you rely on them.