Repligen Corporation [RGEN]
As of 2026-07-29 · framework v1.5.1
Every number in this memo, its source, and how it was derived. No workbook is shipped: the valuation is a
reverse DCF plus an own-multiple percentile, both of which are single Python scripts reproduced below rather
than a spreadsheet. Scripts live in work/ in the build worktree and are listed in the manifest.
| ID | Document | Accession | Filed |
|---|---|---|---|
| A | FY2025 Form 10-K | 0001193125-26-076528 | 2026-02-26 |
| B | Q1 2026 Form 10-Q | 0001193125-26-208954 | 2026-05-06 |
| C | Q2 2026 earnings 8-K, exhibit 99.1 (condensed BS / IS / CF + non-GAAP reconciliations) | 0001193125-26-318853 | 2026-07-28 |
| D | BioLife merger 8-K + exhibits 2.1 / 99.1 | 0001193125-26-311402 | 2026-07-22 |
| E | Q1 2026 earnings 8-K, exhibit 99.1 | 0001193125-26-205011 | 2026-05-05 |
| F | SEC XBRL companyconcept, CIK 0000730272 — Revenues, RevenueFromContractWithCustomerIncludingAssessedTax, OperatingIncomeLoss, NetIncomeLoss |
— | pulled 2026-07-29 |
| G | 12 further quarterly 8-K exhibit 99.1 releases, Q4-2022 → Q1-2026, for the mention-frequency series and the organic reconciliations | see RGEN_Research.md §3.3 |
— |
| H2 | 8-K Item 4.02 non-reliance on previously issued financial statements | 0001193125-24-221406 | 2024-09-18 |
| H3 | NT 10-Q (late Q3-2024 filing notification) | 0001193125-24-255987 | 2024-11-12 |
| H4 | 10-K/A FY2023 + five 10-Q/A (Q1/Q2/Q3-2023, Q1/Q2-2024), all filed the same day | 0000950170-24-127842 et al. | 2024-11-18 |
| H5 | NT 10-K (late FY2024 filing notification) | 0001193125-25-044191 | 2025-03-03 |
| H | Alpaca /v2/stocks/RGEN/bars (1,509 daily bars, 2020-07-27 → 2026-07-29); /v2/options/contracts; /v1beta1/options/snapshots |
— | pulled 2026-07-29 |
Alpha Vantage: no data. Returned the 25/day rate-limit response on 2026-07-29. No consensus figure is used anywhere in this memo.
FY2025 total revenue 738,256 [A, C]
+ H1 2026 total revenue 398,383 [C]
− H1 2025 total revenue 351,538 [C]
= TTM revenue 785,101
The screen's $763,339k is the same construction one quarter earlier (738,256 + 194,255 − 169,172) and is
arithmetically correct — but 119 days stale at scan date and superseded on 2026-07-28.
US registrants do not tag Q4 separately, so Q4 = FY − (Q1+Q2+Q3). Derived Q4s:
Q4 2021 = 670,534 − (142,837+162,960+178,216) = 186,521
Q4 2022 = 801,536 − (206,400+207,633+200,741) = 186,762
Q4 2023 = 632,362 − (165,380+159,169+141,192) = 166,621
Q4 2024 = 634,439 − (153,182+158,839+154,871) = 167,547
Q4 2025 = 738,256 − (169,172+182,366+188,805) = 197,913
Cross-check, Q4-2025: derived $197,913k against the release's "fourth quarter revenue of $198 million" — ✅ ties.
Cross-check, Q4-2023: it does NOT tie, and the reason is a restatement. The Q4-2023 release (2024-02-21) reported Q4 total revenue of $155,743k and FY2023 of $638,764k. Current XBRL gives FY2023 $632,362k and a derived Q4 of $166,621k. The gap was traced to filing vintage:
FY2023 revenue, 10-K filed 2024-02-22 = 638,764 ← as originally reported
FY2023 revenue, 10-K/A filed 2024-11-18 = 632,362 ← RESTATED, −6,402
FY2023 revenue, 10-K filed 2025-03-14 = 632,362 ← carried forward
FY2023 revenue, 10-K filed 2026-02-26 = 632,362 ← current
That −$6,402k reconciles to the −$6.6m FY2023 aggregate overstatement disclosed in the Item 4.02 non-reliance
8-K of 2024-09-18 (rounding and the royalty/other line account for the residual). Q4-2023 rose $10.9k
thousand-scale against the disclosed +$10.7m. Every revenue figure used in this memo is the post-restatement
series. See RGEN_Research.md §3.0. Anyone rebuilding this from press releases rather than current XBRL
would inherit the pre-restatement numbers and overstate the 2023 base.
FY2025 income from operations 55,167 [C]
+ H1 2026 29,916 [C]
− H1 2025 20,474 [C]
= TTM GAAP EBIT 64,609
TTM GAAP operating margin = 64,609 / 785,101 = 8.23%
Cash and cash equivalents 606,783 [C, 2026-06-30]
+ Marketable securities 203,666 [C]
= Cash + securities 810,449
− Convertible notes, FACE 600,000 [A, note 13]
= NET CASH (face basis) 210,449 ← used throughout
Alternative on carrying value:
− Convertible notes, net carrying 551,046 [C]
= Net cash (carrying) 259,403
Face value is used because the obligation is $600.0m of cash at 2028-12-15 (conversion price $203.06, stock 28.6% below), not the $551.0m discounted carrying amount. This is the conservative and economically correct choice, and it is 2.4% of EV.
Screen's $36,065k = 606,783 (at 3/31: 582,650) + 0 − 546,585. Reproduced exactly; see RGEN_Research.md §1.1.
EV = 145.00 × 56,427,067 − 210,449,000 = 8,181,924,715 − 210,449,000 = 7,971,475,715
= $7,971.5m
EV / TTM Sales = 7,971.5 / 785.1 = 10.15x
EV / TTM GAAP EBIT = 7,971.5 / 64.6 = 123.4x
EV / FY26E adj EBIT = 7,971.5 / 131.0 = 60.9x (guide midpoint $128–134m)
P / FY26E adj EPS = 145.00 / 2.06 = 70.4x (guide $2.03–2.09)
NOPAT = 64,609 × (1 − 0.22) = 50,395
Invested = equity 2,112,032 + debt(face) 600,000
− cash & securities 810,449 = 1,901,583
ROIC (GAAP) = 2.65%
ROIC on FY26E adjusted EBIT 131,000 × 0.78 = 102,180 = 5.37%
Goodwill 1,104,183 + intangibles 357,622 = 1,461,805 = 76.9% of invested capital
3.0y TTM Jun-23 712,052 → TTM Jun-26 785,101 = (1.10259)^(1/3)−1 = +3.30% ← primary
3.5y FY2022 801,536 → TTM Jun-26 785,101 = (0.97950)^(1/3.5)−1 = −0.59%
5.5y FY2020 366,260 → TTM Jun-26 785,101 = (2.14356)^(1/5.5)−1 = +15.00%
9.5y FY2016 104,541 → TTM Jun-26 785,101 = (7.50999)^(1/9.5)−1 = +22.90%
TTM Jun-23 = Q3'22 200,741 + Q4'22 186,762 + Q1'23 165,380 + Q2'23 159,169 = 712,052
The 3.0-year figure is primary because it is the like-for-like construct with what the screen claimed to be
computing (n = min(3, len(revs)−1)). The 5.5y and 9.5y windows both span the COVID boom and are reported
for completeness, not used.
The screen's 30.5% reproduced: (141,236 / 63,443)^(1/3) − 1 = 30.57% → 30.5%, i.e. FY2014 → FY2017.
55,167 (FY2025 OperatingIncomeLoss) / 141,236 (FY2017 Revenues) = 39.06% → 39.1%
15,974 (FY2016 OperatingIncomeLoss) / 104,541 (FY2016 Revenues) = 15.28%
39.06 − 15.28 = 23.78pp → the screen's op_margin_delta_pp of 23.8
work/own_multiple.py. For each of 1,509 daily bars from 2020-07-27:
EV/Sales = (close × shares − net cash) / TTM revenue.Usable window begins 2022-02-23 (the first date on which four consecutive quarters had been published from the series), giving n = 1,111. Percentile = share of days at or below today's 10.15x.
Deliberate limitation, stated: holding net cash constant back-dates today's balance sheet onto 2022 prices. Net cash was larger in 2022 (pre-2023 convert issuance the company had no debt), so the 2022–23 multiples in this series are marginally overstated relative to a true point-in-time build. That biases the current percentile upward — i.e. the true percentile is, if anything, lower than 14.5. The direction of the bias works against the conclusion drawn from it, which is why it is acceptable.
assets/reverse_dcf.py via work/implied_path.py. project_ev is deliberately terminal-only:
revenue_T = revenue_0 × (1 + cagr)^years
terminal_EV = revenue_T × terminal_margin × exit_multiple
PV = terminal_EV / (1 + wacc)^years
Bisection on the single unknown (monotone in every parameter). Terminal value is 100% of EV by
construction, which is why valuation.md makes the reverse DCF mandatory as the primary long-horizon output
here and no forward DCF is run.
Fixed: EV $7,971.5m · revenue₀ $785.1m · 5 years · WACC 10% · terminal margin 18.6% · exit 26.2x EV/EBIT. Solved: required revenue CAGR 27.40%.
work/peers.py, over the 4,018 status == OK records in reports/scan_final/. Growth band ±50% around
12.5% (RGEN's corrected organic rate), i.e. 6.25%–18.75%; ev_ebit restricted to 0 < x < 200 to
exclude negative-EBIT artefacts; SIC2 in {28, 38}; market cap > $1bn. n = 51. Median EV/EBIT 26.2x, median
operating margin 18.6%.
Caveat carried forward, and it matters. That peer set is drawn from the same scanner whose op_margin_pct
this memo has just shown to be corruptible by the annual_series tag-recency defect. Any peer that migrated
its revenue tag has an inflated margin and hence a deflated ev_ebit. The direction of that bias makes the
peer median EV/EBIT too LOW, so a corrected peer set would give a higher exit multiple and a lower
required CAGR. The 26.2x anchor is therefore conservative against the long case in the wrong direction, and
the §3.4 sensitivity extends to 40.0x — where the required CAGR is still 17.06% against 12–13% delivered.
The FAIL survives the caveat with room. This is flagged as a systematic defect requiring a universe rerun,
not repaired here.
work/mention_freq.py. Regex counts over the 15 consecutive quarterly 8-K exhibit 99.1 earnings releases,
Q4-2022 → Q2-2026, each stripped of HTML to plain text. Case-insensitive except OPUS. Release lengths
20,915–30,933 characters, so raw counts are comparable without normalisation; character counts are recorded in
the output for anyone who wants to normalise.
Not transcripts. Earnings-call transcripts were not available in this run. Press releases are a filing-grade primary source and carry the headline bullets and the CEO quote, which is where a retired disclosure shows up first — but Q&A colour is absent and that limitation is stated rather than papered over.
| Why | |
|---|---|
| FY2027+ revenue beyond the guided organic rate | No consensus available. The single FY2027 figure used ($923m) is FY2026 guidance × the guided organic midpoint and is flagged as a house number at every appearance. |
| BioLife pro-forma income statement | The S-4 with pro-forma financials has not been filed. Only the disclosed deal terms, BLFS's own XBRL revenue, and management's stated synergies are used. |
| Synergy realisation | Management's $20m/$30m figures are quoted, never assumed into a target. |
| Segment margins | Repligen reports one segment. |
| Working-capital / cash-flow build | The valuation is multiple-based over 12 months and terminal-only over 5 years; a working-capital build would add false precision to neither. |
| Intangible amortisation runoff schedule | Not disclosed by vintage; and BioLife will replenish the balance materially. |
work/fetch_pr.py # 15 quarterly 8-K exhibit 99.1 releases -> /tmp/rgen_pr/
work/mention_freq.py # the mention-frequency table
work/prices.py RGEN # 1,509 daily bars -> /tmp/RGEN_bars.json
work/own_multiple.py # EV/Sales history + percentile
work/peers.py # growth-matched exit multiple + terminal margin
work/implied_path.py # reverse DCF, both sensitivities
work/target12m.py # 12-month target, standalone and pro forma
work/mkt.py # momentum, realised vol, liquidity, options chain
All read only primary data (data.sec.gov, Alpaca) plus reports/scan_final/ for the peer set.
work/env.sh sources credentials; no credential value is printed by any script.