Precedent M&A transactions analysis with deal multiples and acquisition history
npx skills add https://github.com/openai/plugins --skill precedent-transactions
Build a precedent transactions analysis for the company named in the user's request. If no ticker or company is provided, ask for one before proceeding.
This is the third pillar of valuation (alongside trading comps and DCF) — it answers: what have acquirers actually paid for businesses like this one? The output is two tables: comparable M&A transactions with deal multiples, and the subject company's own acquisition history.
Before starting, read ../data-access.md for data access methods and ../design-system.md for formatting conventions. Follow the data access detection logic and design system throughout this skill.
Follow these steps:
Look up the company by ticker using discover_companies. Capture:
company_idlatest_calendar_quarter — anchor for all period calculations below (see ../data-access.md Section 1.5)latest_fiscal_quarter../data-access.md Section 4.5Identify:
Calculate 4 quarters backward from latest_calendar_quarter. Pull from Daloopa:
These serve as the reference point for comparing deal multiples — what would an acquirer be paying relative to this company's current financials?
Find 8-15 completed M&A transactions from the last 7-10 years involving target companies comparable to the subject. "Comparable" means:
Research sources in priority order:
Use web search to identify deals: "{industry} acquisitions {sub-sector} last 10 years", "{TICKER} comparable M&A transactions", "{sector} deal comps precedent transactions".
Do NOT use: finance blogs, Seeking Alpha, Reddit, anonymous wiki contributions, or aggregators without a traceable primary source.
For each transaction, capture:
For each target company in the precedent transactions table, source LTM Revenue and EBITDA from Daloopa:
discover_companies with the target's ticker or namediscover_company_series with keywords ["revenue", "EBITDA"] and the appropriate period (the last complete fiscal year before the deal announcement)get_company_fundamentals with the discovered series IDsDaloopa is the primary source. Only fall back to other sources when a target is genuinely unavailable in the database.
For each transaction where both EV and financials are available:
Compute summary statistics (excluding N/A values):
If fewer than 3 valid data points exist for a multiple, note that the statistic is not meaningful.
Find deals where the subject company itself was the acquirer. Sources: company IR page, SEC 8-K or equivalent filings, Reuters/Bloomberg/WSJ.
For each acquisition, capture:
Apply the precedent transaction multiples to the subject's current financials:
| Methodology | Percentile | Multiple | Subject LTM Metric | Implied EV |
|---|---|---|---|---|
| EV/Revenue | Median | XX.Xx | $XXX | $XXX |
| EV/Revenue | 25th-75th | XX.Xx-XX.Xx | $XXX | $XXX-$XXX |
| EV/EBITDA | Median | XX.Xx | $XXX | $XXX |
| EV/EBITDA | 25th-75th | XX.Xx-XX.Xx | $XXX | $XXX-$XXX |
Convert implied EV to implied equity value (EV - Net Debt) and implied share price where market data is available (see ../data-access.md Section 2). Compare to current market price.
Context matters more than precision:
Search filings and news for context on the M&A environment:
"{industry} M&A outlook {current_year}" — deal activity trends"{TICKER} acquisition target rumors" — is the subject itself a takeout candidate?Summarize in 3-5 bullets:
Save to reports/{TICKER}_precedent_transactions.html using the HTML report template from ../design-system.md. Write the full analysis as styled HTML with the design system CSS inlined. This is the final deliverable — no intermediate markdown step needed.
The report should include interactive features:
data- attributes and safe DOM methods (createElement, textContent, appendChild) — never innerHTML.Structure the report with these sections:
<h1>{Company Name} ({TICKER}) — Precedent Transactions Analysis</h1>
<p>Generated: {date}</p>
<h2>Summary</h2>
{2-3 sentences: What do precedent transactions imply for this company's valuation? How does it compare to the current market price?}
<h2>Subject Company Overview</h2>
{Exchange, currency, industry, LTM Revenue and EBITDA with Daloopa citations}
{Note: "Revenue and EBITDA sourced from Daloopa where available"}
<h2>Selected Precedent Transactions</h2>
<table>
| Date | Acquirer | Target | EV ($M) | LTM Rev ($M) | LTM EBITDA ($M) | EV/Rev | EV/EBITDA | Consideration |
{data rows with Daloopa-cited financials, footnote superscripts, clickable acquirers}
| 75th Percentile | | | | | | XX.Xx | XX.Xx | |
| **Average** | | | | | | **XX.Xx** | **XX.Xx** | |
| **Median** | | | | | | **XX.Xx** | **XX.Xx** | |
| 25th Percentile | | | | | | XX.Xx | XX.Xx | |
</table>
<h2>Implied Valuation</h2>
<table>
| Methodology | Multiple | Subject Metric | Implied EV | Implied Equity | Implied Price | vs Current |
{valuation bridge using median and range multiples}
</table>
<h2>{Company Name} Acquisition History</h2>
<table>
| Date | Target | Deal Value | Consideration | Strategic Rationale |
{company's own M&A deals}
</table>
<h2>Deal Environment</h2>
<ul>{3-5 bullets on sector M&A trends, control premiums, takeout potential}</ul>
<h2>Sources</h2>
{Numbered footnote list — each deal with press release link, SEC filing, Daloopa data links}
{Data sourced from Daloopa attribution}
All financial figures from Daloopa must use citation format: <a href="https://daloopa.com/src/{fundamental_id}">$X.XX million</a>
Tell the user where the HTML report was saved.
Highlight: what precedent transactions imply about the company's takeout value, how it compares to the current market price, and whether the sector M&A environment supports deal activity.
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Query the CELLxGENE Census (61M+ cells) programmatically. Use when you need expression data across tissues, diseases, or cell types from the largest curated single-cell atlas. Best for population-scale queries, reference atlas comparisons. For analyzing your own data use scanpy or scvi-tools.
Take openai/precedent-transactions from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.