Kodo Analytics logo

About Kodo Analytics

Kodo (鼓動) is Japanese for pulse or heartbeat — the steady rhythm of signal underneath the daily noise of a fantasy slate.

Independent fantasy baseball analytics. Built to surface the signal your roster needs — buy-low candidates, save-streamer adds, two-start pitcher matchups, lineup-spot movement, prospect call-ups, platoon deployment, and a Yahoo OAuth-connected suite for managing your own league — and to do it with transparency about where every number comes from.

What this site does

A daily-refreshed analytics platform for 12-team standard mixed fantasy baseball leagues (Yahoo / ESPN / Sleeper). Every page is data-anchored — no vibes-based rankings, no unattributed hot takes. When a signal says BUY-LOW you can click through to see the xStats gap that drove it.

Find Value

Today's buy-low / sell-high board, hot streaks, cold spells — all backed by xStats vs actuals.

Hitting lenses

Quality of contact, stolen-base watch, playing-time trends, platoon watch + deployment.

Pitching lenses

Two-start pitchers, velocity watch, Stuff+ Lab with per-pitch arsenal scores.

Bullpen

Closer grid, leverage rankings, save streamer, rest watch — operator-curated blocklists keep swing-arms out.

Prospects

Rankings, call-up watch, recent call-ups, prospect buy-low / sell-high, MiLB stat leaderboards with L7/L14/L30 windows.

My League (Yahoo)

Connect your Yahoo league for matchup view, team analysis, optimizer, free agents, trade analyzer, and auto adds.

Lineups + schedule

Today's lineups, depth charts, pitcher calendar, weekly schedule with home-road splits.

Articles + cards

Daily morning briefing, top adds, player deep dives, two-start previews — plus shareable 1080×1080 social cards.

Where the data comes from

Every stat, projection, and signal traces to a public source we ingest on a fixed cadence. We don't scrape competitor sites and we don't rely on subjective rankings — when in doubt, source the number.

Game logsScheduleProbable pitchersLineupsTransactionsIL placements40-man rosters

The authoritative source for every counting stat and roster move.

Exit velo + launch anglexwOBA / xBA / xERABarrel% / Hard-hit%Whiff% / CSW% / K%Per-pitch arsenalCatcher framing (CSAA)Fielding OAAMiLB Statcast

Pitch-level + batted-ball data. Underlies every xStats-driven signal.

Steamer RoS projectionsZiPS RoS projectionsCurrent-season wRC+Current-season WAR

Two-system projection blend (55% Steamer, 45% ZiPS) plus the canonical wRC+ + WAR leaderboard back-fill. We do NOT pull park factors, wOBA, or in-season FIP from FanGraphs — those are computed in-house.

Yahoo Fantasy OAuth
League rosterOwnership % (6h snapshots)Scoring categoriesMatchups + standingsFree-agent poolBuzz / trending adds

Used only with your explicit OAuth consent. Credentials never leave the OAuth flow; we only see what Yahoo's API exposes.

~90 curated X / Twitter handlesInjury newsTransactionsLineup confirmationsRole changes (closer flips)

Rule-based classifier filters game-recap noise out before tweets surface in the feed.

Overall Stuff+Location+ / Pitching+ / Composite+Per-pitch arsenal breakdownDaily snapshot history

Computed from raw Statcast pitch data — scored relative to MLB-pitcher mean (100 = average). Snapshot history table enables true L21-vs-season deltas.

The models behind the signals

Six engines feed the signals you see across the site. Each one turns raw data into a single, trustworthy call — and each is built to stay quiet unless the data genuinely warrants attention.

Buy-low / sell-high engine. Finds players whose results don't match their underlying quality of contact. For every hitter and pitcher, we compare what actually happened (wOBA, AVG, ERA, WHIP) against what should have happened given their batted-ball and pitch data (the "x" versions: xwOBA, xBA, xERA, xFIP). A big enough gap in either direction fires the signal — a hitter outperforming his xStats is a sell-high, one underperforming is a buy-low. Two guardrails keep it honest: a percentile cap limits output to roughly the top 10% of each pool, so "BUY-LOW" never gets stamped on half the league, and sample-size weighting filters out 10-plate-appearance noise.

Leverage proxy (ALI). Measures how high-stakes each reliever's innings actually are. We compute an average leverage index — a standard measure of how much the game is on the line in a given moment — from real usage patterns: saves, holds, blown saves, inherited runners, and outs recorded. This powers the closer grid, the save-streamer card, and the "deserves it vs. has it" flag, which fires when a setup man's leverage over the last 90 days quietly outpaces his team's named closer — often the first sign of a bullpen change coming.

Stuff+ leaderboard. Grades the raw nastiness of every pitch, independent of results. Built in-house from pitch-level Statcast data — velocity, spin, location, movement — into an overall Stuff+ score plus a breakdown for each pitch in the arsenal. We snapshot it daily, which lets the trends pages and article generator cite true 21-day movement once enough history accumulates (roughly three weeks in).

Projection blend. Our forward-looking forecast for every player. We blend the public Steamer and ZiPS systems with an in-house prior, then weight by playing time and by how stable each stat is at the current sample. The math respects each stat's nature: counting stats (HR, RBI, K) sum, while rate stats (AVG, ERA) are weighted by at-bats or innings rather than crudely averaged. It re-blends every night once the day's game logs land.

Injury update pipeline. Keeps the injury picture current without fabrication. Each morning we hand Claude yesterday's curated injury table plus today's Yahoo IL list, with web search enabled, and get back a clean diff — who's newly hurt, who changed status, what's genuinely new. The hard rule: every cited source must be a real outlet (MLB.com, The Athletic, ESPN, RotoWire, or a verified beat writer). Any row carrying news but no traceable source is automatically scrubbed before it ever reaches the page.

Catcher framing nudge. A small but real adjustment most tools ignore. Using Statcast's called-strikes-above-average (CSAA) — how many extra strikes a catcher steals with his glove — we nudge a pitcher's projection by up to ±0.5 K/9 when a strong (or weak) framer is locked into the starting role behind him.

How the articles work

Every article on the site is a collaboration between Claude (Anthropic) and the site creator. Neither writes alone — the model handles assembly + writing speed, the operator handles editorial judgement + accuracy. The four stages every article passes through:

01Data fetchAutomated

Pipeline pulls season + rolling stats, Statcast peripherals, depth charts, injuries, transactions, and beat-reporter tweets into structured data blocks.

02Claude draftsLLM

Claude reads the data block + a strict prompt that forbids inventing any name, stat, date, or quote not in the data. Verdict tiers + section structure are fixed per article type.

03Operator reviewHuman

Every draft lands in admin as status=draft. The site creator reads it, edits title / summary / body, removes anything overplayed, and presses publish. No article auto-publishes.

04Post-validatorsAutomated

Post-publish validators flag news-without-source rows, broken player links, and claims not derivable from data. Whole article invalidates if a hard rule fires.

The result: deep dives skew higher-touch — the operator drafts more of the prose; daily briefings skew higher-automation — Claude drafts most of the text, the operator edits and decides what actually ships.

Article types

Morning BriefingDaily

Top 15-20 storylines from yesterday's slate.

Top AddsDaily

Yahoo's biggest add-rate movers, each with opportunity + AAA context.

Streamer of the DayDaily

Single SP pick under 50% owned, graded the next day.

Player Deep DiveAd hoc

Long-form profile: arc, splits, xStats, arsenal, verdict.

Two-Start PitchersWeekly

Sunday — every 2-start SP for the week tiered Start / 50-50 / Bench.

Call-Up ReportWeekly

Recently promoted + doorstep prospects with role context.

Buy-Low / Sell-HighWeekly

9-player tiers by xStats vs actuals gap, hidden value section.

Injury ReturnsWeekly

Monday — near-returns + recent activations + fresh IL hits.

Playing-Time TrendsWeekly

Saturday — L7 vs L30 PA/G shifts per hitter.

Closer Role UpdatesBi-weekly

Closer grid changes, rising setup arms, save speculators.

Platoon WatchWeekly

Splits-exploitable adds + bench-against risks.

Hot / ColdDaily

L7 / L14 movers anchored to xStats so it isn't all BABIP noise.

Who runs this

Kodo Analytics is a one-person project, built and maintained by Brandon Landry — an economics-trained analyst and long-time fantasy baseball player. The codebase, models, ingestion pipelines, editorial review, and articles are all the work of one operator — no investors, no advertorial placements, no aggregated feeds from third parties dressed up as original analysis.

The economics background shapes how the site approaches signal extraction: prefer real-data signals over narrative, weight by sample size, treat uncertainty explicitly, and never claim a number you can't source.

If you spot a mis-attributed stat, want a feature, or have a question about methodology, the fastest path is email — see below.

Independence + fair use

Kodo Analytics is an independent analytics tool. Not affiliated with, endorsed by, or sponsored by Major League Baseball, MLB Advanced Media, MLB Properties, or any MLB club. Team names, abbreviations, logos, and player names are used solely for identification under nominative fair use. All trademarks and copyrights are the property of their respective owners.

Statistical data is sourced from the public MLB Stats API and Baseball Savant. Cited tweets are linked back to the original author's post — we don't republish tweet content beyond brief quotes for editorial context. Comment moderation uses Anthropic's Claude API; user-submitted comment content is never sold or used for training.

Get in touch

Updated daily. Independent fantasy baseball analytics. Back to home →