The goal
Turn one known company into a market research starting point
Category searches work when you already know the taxonomy. Anchor-based discovery starts from something more natural: a company that represents the market you want to understand.
The result is a ranked competitive set for analyst review. It can seed a market map, competitor monitor, partnership scan, or comparable-company list.
Discovery, not classification
A high rank means strong taxonomy overlap. It does not prove that two companies have identical products, buyers, pricing, or technical approaches.
Ranking model
Let Dealroom rank, then expose the evidence
The similar-companies endpoint ranks candidates using weighted overlap across six categorical dimensions. The API owns that ordering, so your application does not need to invent a similarity score.
| Dimension | What it helps capture |
|---|---|
| Sector | The market or problem area |
| Sub-industry and industry | More specific commercial context |
| Technology | The technical approach or enabling layer |
| Client focus | The type of customer served |
| Income stream | How the company earns revenue |
The downloadable script intersects the returned tags with the anchor tags only to explain the result. It preserves the API ranking unchanged.
Data retrieval
Fetch the anchor, then its ranked peers
Use the company UUID, not its name, as the stable identifier. Fetching entity detail first gives you the tags needed for an inspectable output.
anchor = client.get(
f"/data/entities/{company_id}",
{"currency": "USD"},
)["data"]
response = client.get(
f"/data/companies/{company_id}/similar",
{
"filter": filter_value,
"limit": 12,
"include_total": "true",
"currency": "USD",
},
)
The endpoint is force-sorted by similarity. Pagination supports up to 1,000 candidates across offset and limit, with a maximum page size of 500.
Candidate control
Filter before the similarity ranking runs
The endpoint accepts the full company filter DSL. Filters define the eligible candidate pool; similarity determines the order inside that pool.
filter_value = (
"and(hq_location[eq]:34,"
"is_startup[eq]:true,"
"company_status[eq]:operational)"
)
Add funding, founding year, employee count, or any other supported company filter when the research question requires it. Leave the filter out when you want the broadest possible peer set.
Explanation layer
Show why a result belongs on the review list
A rank without context is hard to trust. Match returned tags to the anchor by type and ID, then display the shared names beside each company.
anchor_keys = {tag_key(tag) for tag in anchor_tags}
shared = [
tag for tag in company_tags
if tag_key(tag) in anchor_keys
]
Keep this explanation separate from the ranking. The shared tags are evidence available to your application, not a reproduction of Dealroom's internal weighting.
Real output
Inspect Cerrion's competitive landscape
Dealroom-ranked European startups with the shared taxonomy made visible.
Loading the competitive landscape...
Snapshot generated from the Dealroom API. Re-run the script for current rankings and company data.
Research discipline
Keep similarity separate from competitive truth
Use the ranked set as an efficient research queue and keep these constraints attached:
- Taxonomy overlap does not prove direct product competition.
- Filters change the candidate pool before ranking.
- Shared tags do not reveal the private weights used by the model.
- Tags and headline company metrics can change as coverage improves.
- Commercial positioning still needs product, customer, and market validation.
Complete example
Download the landscape generator
The file includes OAuth2 authentication, bounded retries, optional company filters, tag explanations, Markdown output, and structured JSON.