Product Reports Resources Pricing Login Book a demo

Cookbook 03 · Due diligence

Generate a Company 360 investment brief

Start with one company UUID. Join eight Dealroom evidence streams into a readable brief that shows its sources and keeps missing data visible.

Python 12 minutes 8 API calls Intermediate
python company_360_brief.py 8 sources joined
# Company 360: Cerrion

Headquarters   Kloten, Switzerland
Founded        2021
Employees      52 (+79.3% YoY)
Total funding  $23.1M across 5 rounds
Latest round   Series A · $18.0M · Nov 2025
Valuation      $72.0M · estimate
Hiring         15 active openings
5funding rounds
23known investors
91.4Signal rating

The goal

Replace profile tab hopping with one evidence packet

A company profile is useful for exploration. An investment discussion needs a stable packet that a colleague can read, save, and challenge. This cookbook turns one Dealroom company UUID into Markdown or structured JSON.

Build a first-pass brief for Cerrion, the top-ranked company from Cookbook 01, using company facts, funding, valuation, investors, team, financials, web traffic, and headcount data.

The output separates reported facts from estimates and unavailable fields. It does not manufacture a narrative where source coverage is thin.

A brief, not a verdict

The script assembles evidence for review. It does not score an investment, infer ownership, or replace commercial, legal, technical, and reference diligence.

Evidence plan

Give each question one source

The entity detail record carries the company identity and headline metrics. Typed company subresources supply the relationships and time series.

QuestionEndpoint
What is the company?GET /data/entities/{id}
How has it been financed?GET /data/companies/{id}/funding-rounds
What valuations are recorded?GET /data/companies/{id}/valuations
Who invested?GET /data/companies/{id}/investors
Who is on the current team?GET /data/companies/{id}/team
What financial history is available?GET /data/companies/{id}/financials
Is web attention changing?GET /data/companies/{id}/web-traffic
Where and how is headcount distributed?GET /data/companies/{id}/headcount-breakdown

Request monetary fields in one currency before comparing them. This example uses USD throughout.

Data retrieval

Use the company UUID as the join key

Names change and can be ambiguous. A Dealroom UUID is stable and routes directly to every typed company resource.

company_360_brief.py
root = f"/data/companies/{company_id}"

company = client.get(
    f"/data/entities/{company_id}",
    {"currency": "USD"},
)["data"]

funding = rows(client.get(f"{root}/funding-rounds", {"limit": 100}))
valuations = rows(client.get(f"{root}/valuations", {"limit": 100}))
investors = rows(client.get(f"{root}/investors", {"limit": 100}))
financials = rows(client.get(f"{root}/financials", {"currency": "USD"}))
traffic = rows(client.get(f"{root}/web-traffic"))
headcount = rows(client.get(f"{root}/headcount-breakdown"))
team = rows(client.get(f"{root}/team", {"is_past": "false"}))

The downloadable client refreshes its OAuth2 token after a 401 and retries rate limits and temporary server errors with bounded backoff.

Normalization

Keep unknown different from zero

Private-company records are naturally uneven. An undisclosed round is not a zero-dollar round. Missing R&D is not zero R&D. Preserve nulls until the final presentation layer.

display helpers
def money(value):
    if value is None:
        return "not disclosed"
    if abs(value) >= 1_000_000:
        return f"${value / 1_000_000:.1f}M"
    return f"${value:,.0f}"

For time series, sort by year and month before selecting the latest row. For headcount, select every item from the latest available month, then rank by percentage.

Brief assembly

Lead with facts, then expose the caveats

The default command prints Markdown for a memo, Notion page, or model context. The JSON option retains the full source records for your own renderer.

.env
DEALROOM_CLIENT_ID=your_client_id
DEALROOM_CLIENT_SECRET=your_client_secret
DEALROOM_USER_AGENT=your-company-brief/1.0
terminal
pip install authlib requests python-dotenv
python company_360_brief.py
python company_360_brief.py --company YOUR_COMPANY_UUID
python company_360_brief.py --company YOUR_COMPANY_UUID --json

Use the Markdown output for human review. Use JSON when a downstream application needs to render its own memo, store source evidence, or run additional checks.

Real output

Inspect the generated Cerrion brief

Built from the same eight endpoints used in the downloadable example.

JSON

Loading the Company 360 snapshot...

Snapshot generated from the Dealroom API. Re-run the script for current data before making a decision.

Diligence discipline

State what the data cannot prove

A defensible brief includes its blind spots. Keep these constraints attached to the output:

  • Profit and R&D depend on available company filings and are often null.
  • Web traffic is an external estimate, not company-reported product usage.
  • Recorded valuations may be estimates. Preserve the estimate flag.
  • Shareholder names, ownership percentages, and cap-table data are not exposed.
  • Funding records and current team relationships can change as coverage improves.

Complete example

Download the brief generator

The file includes OAuth2 authentication, retry behavior, eight API calls, normalization, Markdown rendering, and structured JSON output.