Agentic Delivery  ·  15 Years Fortune-100 BI  ·  Self-Funded

Cannabis Markets
Intelligence
Platform

A production-grade analytics platform, built and run by one person directing AI agent sessions in isolated git worktrees. An automated daily-capture pipeline feeds a 96-table Power BI model with 985 measures, plus an AI narrative layer that writes the plain-language read — reconciling 27 data-source families, spread across 50-plus regulator and market endpoints, into one trustworthy picture of the entire US cannabis market every trading day: the five ETFs and vehicles that track it, the operators behind it, and the reform that moves it. It began as a tracker for the market’s single hardest target — a structurally complex, swap-based cannabis ETF — and grew into the whole market.

A self-directed personal project, with no client — a public test case chosen to prove the method. Built without writing a single line of code: every instruction was natural language.

Power BI Semantic Model DAX Python Capture Pipeline Automated Testing Version Control AI Agent Orchestration AI Narrative Layer (Claude) Geospatial Mapping
$1.08B
Category AUM · 5 ETFs · 2026-07-24
11,006
Dispensaries Geocoded
6,236
Automated Tests
985
DAX Measures · 96 Tables
Platform health · live CONDITIONAL
Last pre-publish gate · 2026-07-27
6,174 passing 61 skipped 1 not green of 6,236 test cases collected
32
Audit gates
11
Test layers
320
Test files
248
Pipeline modules
27
Source families
61
Validation write-ups
This panel is not typed by hand. It is read straight from the platform's own validation scorecard — the same artifact the pre-publish gate writes — and it reports whatever that file says, including the tests that aren't green. A scorecard you can only pass isn't a scorecard.
▶  Interactive Report ●  Live · 6 sections
▶  Open the live report →
6 interactive sections · best viewed on desktop
Live Power BI — use the ‹ › bar to page through all six sections. Self-funded personal project · not investment advice.
01

The Agentic Build

One person built this. Then the automation took over — every trading day it captures, reconciles, models, and refreshes itself unattended. Under the hood: a 248-module Python pipeline, a 96-table Power BI model with 985 measures, a 27-source reconciliation engine, and an AI narrative layer. How one person built something this size in weeks is the point of this case study: I ran it like an enterprise delivery team — many AI agent sessions working in parallel in isolated git worktrees, to written engineering standards, with one standing independent validator that the builder is never allowed to be — and I was the orchestrator.

Parallel build agents. Each worked in an isolated workspace, building entire components of the reporting product simultaneously without stepping on each other — the capture pipeline, the semantic model, and the visual layer advancing at once.
Research agents. Ran the deep groundwork in parallel — tracking state and federal cannabis legislation, mapping each operator's regulatory status, and hunting down dispensary registries across roughly 40 states, each with its own regulator, format, and quirks — alongside reporting standards and edge cases, surfacing the swap-conversion behavior before it could surface as a wrong number.
Live model operations. I directed agents to inspect, build, and audit the Power BI semantic model directly — the same way you'd have an engineer review a production system, not a screenshot.
An unattended daily orchestration. Every trading day, roughly a dozen independent capture stages pull the sources in sequence, each gated on success and freshness; curate and reconcile follow; then language-model passes write the daily read, the per-company briefs, and the weekly themes. A blocking test gate sits in front of everything downstream — if the suite fails, the model refresh, the reconciliation and the entire publish chain are skipped.
Grounded language-model passes, run cheap. Nine daily model invocations and two weekly ones (Claude Sonnet, Opus and Haiku) write the analysis — the daily read, Today's Take across five funds, the “why it moved,” per-company briefs, and the weekly themes — run overnight through Anthropic's Message Batches API, which halves the cost, with several passes self-gating so an unchanged day costs nothing. Every figure they cite is checked against the reconciled data; anything that can't be grounded is dropped rather than published.
●  Pure Orchestration
I never wrote the code. The 248-module pipeline, the 96-table model, the 985 measures, every visual on every page — all of it was produced by AI agent sessions from natural-language direction. I never built an ETL stage, never hand-authored a measure, never placed a visual by hand. My job was intent, architecture, review, and the go/no-go — the work of directing. What made that hold was not autocomplete and not assistance: it was written engineering standards, isolated workspaces, and a reviewer the builder was never allowed to be.
02

Tying It Together

It starts with basic, public data — the kind anyone can pull. ETF holdings files, SEC filings, market and short-interest data, dispensary registries across roughly 40 states, a hand-built federal and state legalization timeline, congressional roll-call and cosponsorship records, newswires: 27 source families feeding 50-plus regulator and market endpoints, none of them built to agree. The value is in reconciling all of it into one model, where a plain holdings file becomes a complete, day-over-day view of the market. Not new data: ordinary data, reconciled into a view no single feed delivers.

■  ETF Holdings & Facts
The daily holdings file for each of the five cannabis ETFs — each of which overwrites itself with no history — plus published fund facts, the anchor every other source is reconciled against.
■  SEC Filings
N-PORT monthly portfolios, 13F institutional holdings, XBRL company fundamentals, and 8-K / 10-K / 6-K / 40-F event feeds — pulled straight from EDGAR.
■  Market & Short Interest
Underlying and benchmark prices and quotes, plus short interest from FINRA, FINRA Reg SHO daily volumes, and Canada's CIRO — three regulators, two countries.
■  News & Sentiment
Three newswires — GlobeNewswire, PR Newswire, Business Wire — each targeting different holdings, plus a sentiment feed: the catalysts behind the moves.
■  Dispensary Registries — ~40 States
Roughly 40 separate state regulators — each scraped on its own, arriving as JSON, CSV, HTML, and even PDF, then geocoded — normalized into one licensed universe of 13,197 locations, of which 11,006 are geocoded store-by-store. It is a deliberate lower bound: 40 of 51 jurisdictions publish a usable roster, and Oklahoma reports only a state licence count (1,355) with no storefront addresses.
■  Congress & Cannabis Votes
Congressional roll-call votes on cannabis from the U.S. House Clerk — four landmark House votes, 2019–2022 — mapped to the members who cast them, with cosponsorship history and an explicit coverage flag for members who have never had a floor vote.
■  Legal Sales, §280E & Reform
State-by-state legal-sales figures, a hand-built legalization timeline, and §280E tax-burden numbers pulled from each operator's 10-K footnotes — the policy forces priced into the market.
■  Reference & Synthesis
Wikidata company demographics, historical shares outstanding recovered via the Internet Archive's Wayback Machine, and a Claude synthesis layer applied only to numbers already reconciled.
●  Where the Work Is
None of these were built to agree. The hard part isn't fetching them — it's the reconciliation: matching a swap leg to its equity leg, resolving CUSIP and issuer identity across sources, and tying every figure back to the fund's own facts, so one model holds and every number traces to where it came from.
03

The Discipline

This is the part most AI work skips, and it's the whole point. Speed without governance produces confident, wrong numbers. The tracker is built on enterprise-grade controls.

An idempotent pipeline. Re-run it against unchanged source data and it produces byte-identical output — so a change in the numbers is a real change in the data, never an artifact of the pipeline itself. Re-fetchable caches are explicitly excluded from that contract, and the exclusion is written down.
6,236 automated tests. Every parsing, classification, and tie-out rule is guarded — 6,174 passing, 61 skipped, 1 not green, reported live at the top of this page — so a change in upstream behavior surfaces as a failing test rather than a silent error in the numbers. The scorecard is published exactly as the gate writes it, red rows included.
Audit-drift tracking, reported honestly. The live model is reconciled against its specification and the drift is counted, published, and carried on the record rather than closed out — which is why the standing gate verdict above reads CONDITIONAL and not PASS. The DAX-layer comparison needs a live desktop session, so it is run deliberately, not continuously, and the verdict says so.
A human in the loop on anything ambiguous. Borderline cases are flagged for review, never silently force-classified. A flagged item costs seconds; a wrong number costs a correction.
Defensive parsing. When an upstream file format shifts, the pipeline flags the drift instead of quietly mis-reading it.
An independent read-only reviewer. A purpose-built validator — its file-editing tools withheld, so it can redline but never touch the deck — re-checks numbers, names, colors and formats across pages against ground truth and returns a go/no-go. It is invoked deliberately, on every change that touches a measure, a projection, a curated file, a headline number or a layout, because the rule it exists to enforce is that the implementer never certifies its own work.
32 audit gates, across an 11-layer test taxonomy. Capture, parsing, classification, source reconciliation, cross-file checks, fund-facts identities, and the headline numbers each have their own gate. A failing test suite is blocking — it skips the refresh and the whole publish chain. A gate that comes back CONDITIONAL or NO-GO is published as such, above, rather than quietly cleared.
A three-date freshness tripwire. Each file's capture time, its server timestamp, and its internal as-of date are cross-checked — any divergence flags a stale or misdated source before it can poison a day. Its known blind spot is on the record too: a Friday-evening or weekend miss isn't surfaced until Monday.
The check is public. The platform's own Trust & Proof section publishes the live scorecard — 6,236 tests, 99.0% passing, 32 gates, 27 traced source families — so the claim that this output is checked is something a visitor can inspect, not take on faith. The checks themselves are deterministic tests, not an AI opinion.
04

The Product & What It Surfaces

A multi-page Power BI analytics platform — backed by an automated daily-capture pipeline, fully version-controlled, and refreshed on its own every trading day. It is organized as six navigable sections that move from the market down to the mechanics: The Industry, The Vehicle, The Companies, Smart Money, and Trust & Proof, all opening from an Overview home. Its flagship lane is still the hardest one — a structurally complex, swap-based ETF whose true position is disclosed only as a self-overwriting daily file and dozens of filings — but that is now one section of a much larger picture.

The Industry. Where the law stands and where the stores are: a store-by-store map of 11,006 geocoded dispensaries, drawn from a 13,197-location licensed universe and published as a lower bound (40 of 51 jurisdictions rostered; Oklahoma reports a licence count only), legal status across all 51 US jurisdictions (25 adult-use), state-by-state legal sales of roughly $29.6B in 2024, and a “what reform unlocks” model for the day §280E is lifted.
The Vehicle. How the money actually reaches cannabis, across all five ETFs — total-return swaps vs. directly-held shares, the swap counterparties, the cash position, and every swap-to-physical conversion as it happens (12.26M shares across 6 clean conversion events, plus 5 more where a conversion and a trade landed on the same day and are labeled as such), the exact event a naive day-over-day read gets wrong. MSOS alone runs 73% swap to 27% directly-held, and reconciles to the cent at $873.3M.
The Companies. The operators behind the tickers: $10.03B in combined annual revenue (25 SEC filers, each at its latest filed fiscal year), a scale-vs-profitability scatter, corporate-ownership trees, MSOS-vs-S&P performance, and the multi-state operators whose stores are mapped one by one.
Smart Money. Who's buying and selling — 158 insiders on record selling, 10b5-1 pre-scheduled selling plans tracked to the share, the 13F institutional holder base, and how the House has voted on cannabis (four landmark votes, 2019–2022; 1,090 yea to 572 nay) — with members who have never had a floor vote flagged rather than assumed.
Trust & Proof. The differentiator, made inspectable: a live scorecard of 6,236 automated tests (99.0% passing, and the ones that aren’t are shown too), 32 audit gates, 27 traced source families, and the gate verdict itself — CONDITIONAL when it is conditional — the product proving its own numbers, in public.
The daily written read. Threaded through every section — Today's Take, per-company briefs, and weekly themes — a grounded, plain-language take on what moved and why, generated each day from the reconciled numbers by Claude, with sources and no invented figures.
05

Why This Market

I built this for a market I invest in. I own MSOS, and the questions that pulled me in are ones the whole sector shares: where the money actually goes, which operators are uplisting or changing exchanges, and what the broader U.S. cannabis market is doing day to day. Those questions surface constantly, with no single good source for the answers — so I built the platform I wanted, and made it sector-wide.

It's also one of the hardest reporting targets I could find. These operators are federally illegal under Schedule I, so exchanges won't list them and U.S. custodians won't hold their shares — the ETFs reach them through a mix of total-return swaps and directly-held shares. The funds disclose all of it, every day — but it lands as a spreadsheet that overwrites itself with no history, where the same company can appear in a swap line and an equity line at once. The raw truth is public; what's missing is a way to see it — a naive day-over-day read of that file misreads a swap-to-physical conversion as two trades that never happened.

What the platform gives you is the picture the disclosures don't: how a dollar travels — from your account, into a fund, through the swap or the shares, and out to a federally-illegal operator you couldn't buy directly. And it's a moving target: as rescheduling progresses and these operators become custody-eligible, the funds convert swaps into real shares, name by name — every conversion tracked as it happens.

●  The Point
I built this because I wanted it to exist — real transparency on a market I invest in, where the questions are only getting louder. It was also where I learned to direct AI agent sessions to build production Power BI at this depth — a capability barely a couple of months old. That it doubles as proof of a method that holds on a brutally hard target is the part that travels.
06

Why This Matters for Your Business

The fund is my problem to solve. The method behind it is what transfers to yours.

I can stand up trustworthy, automated reporting for your business — fast, to a standard you'd be comfortable putting your name on — because I deliver with AI agents and the governance to keep them honest.

Book a Discovery Call →