Detection difficulty is not uniform across Event types. Every type below carries a maturity chip: Established types have tight, well-bounded detection criteria; Emerging types are noisier to detect. That difference is exactly what the confidence band is for — gate on it, and gate harder on the Emerging types.
codeNames to be stable, and we treat renaming one as a breaking change. Role codeNames may still change before 1.0 — read them defensively and skip codes you do not recognize. The envelope that wraps all of this is documented on Event delivery.roles is a list, not a map. The same code may appear more than once: a round backed by three investors arrives as three INVESTING_COMPANY_NAME entries. Roles that can repeat are tagged repeatable in the tables below. Do not key by code — Object.fromEntries(roles.map(r => [r.code, r.textValue])) keeps the last entry and silently discards the others. Group by code instead.Each role table below has a Typecolumn — the role’s value type, and which parsed companion it carries on the wire:
- NAMED_ENTITY
- An organization or person named in the Event. Carries
namedEntityIdwhen the text resolved to a known entity. - CURRENCY
- A monetary amount. Carries a parsed
parsedAmount; a role that does not parse is dropped rather than delivered unparsed. - NUMBER
- A plain count or percentage. Carries a parsed
parsedAmount, the same guarantee asCURRENCY. - DURATION
- A span of time, validated as text. May carry
parsedAmount, but only sometimes. - CATEGORICAL
- One value from a fixed vocabulary, delivered as an uppercase token in
textValue. No parsed companion. - NONE
- Free text with no parsing — the value is in
textValueonly.
01Acquisition
A company acquires another company.
| Role code | Name | Type | Description |
|---|---|---|---|
ACQUIRING_COMPANY_NAME | Acquiring Company Name | NAMED_ENTITY | The company taking ownership in the deal. |
COMPANY_BEING_ACQUIRED | Company Being Acquired | NAMED_ENTITY | The company that is being taken over. |
VALUE_OF_ACQUISITION | Value of the Acquisition | CURRENCY | The reported price paid for the deal. |
{
"eventCodeName": "ACQUISITION",
"details": {
"roles": [
{
"code": "ACQUIRING_COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "COMPANY_BEING_ACQUIRED",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "VALUE_OF_ACQUISITION",
"textValue": "…",
"parsedAmount": 1000000
}
]
}
}02Investment
A company completes a fundraising round.
| Role code | Name | Type | Description |
|---|---|---|---|
INVESTING_COMPANY_NAME repeatable | Investing Company Name | NAMED_ENTITY | An investor backing the round. A round with several investors yields one entry per investor. |
COMPANY_RAISING_FUNDS | Company Raising Funds | NAMED_ENTITY | The startup that raised the capital. |
AMOUNT_RAISED | Amount Raised | CURRENCY | Total capital secured in this round. |
FUNDING_ROUND_TYPE | Funding Round Type | NONE | The round's stage label, such as Seed or Series A. |
{
"eventCodeName": "FUND_RAISING",
"details": {
"roles": [
{
"code": "INVESTING_COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "INVESTING_COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "COMPANY_RAISING_FUNDS",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "AMOUNT_RAISED",
"textValue": "…",
"parsedAmount": 1000000
},
{
"code": "FUNDING_ROUND_TYPE",
"textValue": "…"
}
]
}
}03Layoff
A company lays off employees.
| Role code | Name | Type | Description |
|---|---|---|---|
COMPANY_NAME | Company Name | NAMED_ENTITY | The employer reducing its headcount. |
AFFECTED_EMPLOYEES_COUNT | Number of Employees Affected | NUMBER | How many roles were eliminated. |
PERCENTAGE_OF_WORKFORCE_AFFECTED | Percentage of Workforce Affected | NUMBER | Share of total staff let go, as a percentage. |
ANNOUNCED_REASON | Reason for Layoff | NONE | The publicly stated rationale for the cuts. |
CATEGORY_OF_EMPLOYEES_AFFECTED | Category of Employees Affected | NONE | Which team or function bore the cuts, such as sales. |
{
"eventCodeName": "LAYOFF",
"details": {
"roles": [
{
"code": "COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "AFFECTED_EMPLOYEES_COUNT",
"textValue": "…",
"parsedAmount": 1000000
},
{
"code": "PERCENTAGE_OF_WORKFORCE_AFFECTED",
"textValue": "…",
"parsedAmount": 1000000
},
{
"code": "ANNOUNCED_REASON",
"textValue": "…"
},
{
"code": "CATEGORY_OF_EMPLOYEES_AFFECTED",
"textValue": "…"
}
]
}
}04Leadership Change
A company's senior leadership changes through an appointment, a departure, or a succession.
| Role code | Name | Type | Description |
|---|---|---|---|
COMPANY_NAME | Company Name | NAMED_ENTITY | The organization whose leadership shifted. |
ROLE_TITLE | Role Title | NONE | The executive position that changed hands. |
INCOMING_PERSON | Incoming Person | NAMED_ENTITY | The individual stepping into the role. |
OUTGOING_PERSON | Outgoing Person | NAMED_ENTITY | The individual departing the role. |
REASON | Reason | NONE | The publicly stated rationale for the move. |
{
"eventCodeName": "LEADERSHIP_CHANGE",
"details": {
"roles": [
{
"code": "COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "ROLE_TITLE",
"textValue": "…"
},
{
"code": "INCOMING_PERSON",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "OUTGOING_PERSON",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "REASON",
"textValue": "…"
}
]
}
}05IPO
A company makes a concrete move toward going public: an exchange filing, a priced offering, or a first day of trading. A filing alone counts, so this Event can arrive long before any share changes hands.
| Role code | Name | Type | Description |
|---|---|---|---|
COMPANY_NAME | Company Name | NAMED_ENTITY | The business seeking or completing a public listing. |
VALUATION | Valuation | CURRENCY | What the company is valued at for the offering. On a filing this is a target or an expectation, not a settled market price. |
AMOUNT_RAISED | Amount Raised | CURRENCY | How much capital the share sale brings in. Sought or projected until the offering actually prices. |
STOCK_EXCHANGE | Stock Exchange | NONE | The exchange named for the listing, such as NYSE. It can be announced before anything trades there. |
{
"eventCodeName": "IPO",
"details": {
"roles": [
{
"code": "COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "VALUATION",
"textValue": "…",
"parsedAmount": 1000000
},
{
"code": "AMOUNT_RAISED",
"textValue": "…",
"parsedAmount": 1000000
},
{
"code": "STOCK_EXCHANGE",
"textValue": "…"
}
]
}
}06Partnership Announcement
Two companies form a strategic partnership or alliance.
Emerging — noisier to detect; we recommend gating on confidence.band = HIGH.
| Role code | Name | Type | Description |
|---|---|---|---|
FIRST_PARTNER_COMPANY | First Partner Company | NAMED_ENTITY | One of the two collaborating organizations. |
SECOND_PARTNER_COMPANY | Second Partner Company | NAMED_ENTITY | The other collaborating organization. |
VALUE_OF_PARTNERSHIP | Value of the Partnership | CURRENCY | The reported financial size of the deal. |
DURATION_OF_PARTNERSHIP | Duration of the Partnership | DURATION | How long the arrangement is set to run. |
{
"eventCodeName": "PARTNERSHIP_ANNOUNCEMENT",
"details": {
"roles": [
{
"code": "FIRST_PARTNER_COMPANY",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "SECOND_PARTNER_COMPANY",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "VALUE_OF_PARTNERSHIP",
"textValue": "…",
"parsedAmount": 1000000
},
{
"code": "DURATION_OF_PARTNERSHIP",
"textValue": "…"
}
]
}
}07Product Launch
A company introduces a product, adds a major new feature, ships a new version, expands what an existing product can do, debuts creative work, or opens a product to a wider audience.
Emerging — noisier to detect; we recommend gating on confidence.band = HIGH.
| Role code | Name | Type | Description |
|---|---|---|---|
COMPANY_NAME | Company Name | NAMED_ENTITY | The organization behind the launch. |
PRODUCT_OR_SERVICE_NAME | Product or Service Name | NAMED_ENTITY | The product or service being introduced. |
LAUNCH_TYPE | Launch Type | CATEGORICAL | Which kind of launch this was, delivered as an uppercase token drawn from a fixed vocabulary rather than free text. |
HOST_PRODUCT | Host Product | NAMED_ENTITY | The existing product that a newly added feature or capability plugs into. Absent when the launch stands on its own. |
COMPANY_SHORT_DESCRIPTION | Company Short Description | NONE | A brief phrase describing what the company does. |
PRODUCT_DESCRIPTION | Product Description | NONE | A brief phrase describing what the product does. |
{
"eventCodeName": "PRODUCT_LAUNCH",
"details": {
"roles": [
{
"code": "COMPANY_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "PRODUCT_OR_SERVICE_NAME",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "LAUNCH_TYPE",
"textValue": "…"
},
{
"code": "HOST_PRODUCT",
"textValue": "…",
"namedEntityId": "…"
},
{
"code": "COMPANY_SHORT_DESCRIPTION",
"textValue": "…"
},
{
"code": "PRODUCT_DESCRIPTION",
"textValue": "…"
}
]
}
}In the samples above, … marks an elided value and any number is illustrative, not real data. namedEntityId, parsedAmount and parsedDate are all optional companions to textValue — present only when entity resolution or value parsing succeeded. parsedAmount appears whenever we parsed a numeric amount. It is guaranteed on the numeric and measurement types (CURRENCY and NUMBER among the roles above), because such a role is dropped rather than delivered unparsed. It may also arrive on a DURATION role, which is validated as text and so carries an amount only sometimes — the samples above do not show that case. A role that was not extracted is absent from roles entirely, never present with a null value.