/ the web was written for people. your software needs events.

Subscribe to what happens.

Evinor turns what happens in the world into structured events — typed, deduplicated, tied to canonical entities. Extracted from what’s reported today, published structured at the source tomorrow. Pushed to your workflows, or pulled by your agents.

Get started — free→
/ SENSORENABLED

Portfolio raises ≥ $20M

WHEN
Investment (funding round)FUND_RAISING
INVOLVING
watchlist “Portfolio” · 42 companies
ONLY IF
amount raised ≥ $20Mreported by ≥ 3 independent sources
THEN
POST https://your-app.example/hooks/evinorSlack #deals
backtest · 30 days · 14 matcheskeyId …8b9f1a3d:1
/ RECENT DELIVERIES
POST https://your-app.example/hooks/evinor  attempt 1 · 200 OK
Content-Type: application/json
X-Evinor-Signature: 8/FaI+Q/E4js5FwvALpBv9KSCyJ51ANwdlX2FTwRQgU=
{  "protocolVersion": "0.1",  "plane": "data",  "type": "incident",  "messageId": "42a98f3d-3ee0-4518-a8e2-3699af60fa6d",  "subjectId": "54ae056c-9114-4f64-a3a4-c7a2ce36c663",  "idempotencyKey": "e955c2e0-4d57-4767-a333-f2e211d2ff1e",  "timestamp": "2026-09-30T14:21:07.000Z",  "sender": {    "agentId": "evinor-incident-rules",    "keyId": "9c4f5d2a-1b3e-4f8a-a5d6-7e2c8b9f1a3d:1",    "signatureAlg": "hmac-sha256",    "signature": "8/FaI+Q/E4js5FwvALpBv9KSCyJ51ANwdlX2FTwRQgU="  },  "recipients": {    "kind": "incident-rule-action",    "actionType": "GENERIC_WEBHOOK",    "actionId": "44addaa0-8862-4cba-ac50-ba9ae18f2ec7"  },  "provenance": [    {      "sourceKind": "external",      "sourceId": "17bd0509-6d54-4d15-a0c3-3aa2c4d365da",      "sourceName": "Outlet A"    },    {      "sourceKind": "external",      "sourceId": "f5499004-248d-4fff-a476-7f9fd0e9f3a0",      "sourceName": "Outlet B"    },    {      "sourceKind": "user",      "sourceId": "8b2b94ee-25dd-423f-a920-f8fb468a1c78",      "sourceName": "Helio Labs Comms"    }  ],  "payload": {    "eventType": "2de62c11-2546-4df3-ae94-69efe87a8531",    "eventCodeName": "FUND_RAISING",    "occurredAt": "2026-09-30T14:16:07.000Z",    "externalEventId": "5d251524-fe9c-4ec1-ad02-64a86ee202ae",    "details": {      "incidentId": "5d251524-fe9c-4ec1-ad02-64a86ee202ae",      "incidentReportId": "cd39221c-896d-4cb0-aaad-271b9cfc401b",      "templateId": "2de62c11-2546-4df3-ae94-69efe87a8531",      "templateCodeName": "FUND_RAISING",      "templateDisplayName": "Investment",      "generatedSentence": "Helio Labs raised $40M in a Series B led by Northwind Ventures.",      "matchingReportCount": 3,      "reportingOutlets": [        {          "id": "17bd0509-6d54-4d15-a0c3-3aa2c4d365da",          "name": "Outlet A"        },        {          "id": "f5499004-248d-4fff-a476-7f9fd0e9f3a0",          "name": "Outlet B"        }      ],      "roles": [        {          "code": "COMPANY_RAISING_FUNDS",          "textValue": "Helio Labs",          "namedEntityId": "ee3e6b81-80c1-4e88-aba1-af50fd1f5cba"        },        {          "code": "INVESTING_COMPANY_NAME",          "textValue": "Northwind Ventures",          "namedEntityId": "ae7ee645-455f-46ef-a6f2-fe9c10636312"        },        {          "code": "AMOUNT_RAISED",          "textValue": "$40M",          "parsedAmount": 40000000        },        {          "code": "FUNDING_ROUND_TYPE",          "textValue": "Series B"        }      ],      "confidence": {        "score": 0.91,        "band": "HIGH",        "formulaVersion": 2      },      "coverImageUrl": null,      "matchedAt": "2026-09-30T14:21:06.000Z"    }  }}

↑ Example data. This is the envelope your endpoint receives.Select a delivery to inspect it.

/ why

The information exists. The event doesn’t.

Inside software, everything is an event: typed, deduplicated, delivered once. A payment, a deploy, a signup.

Outside it, what happens in the world arrives as prose — the same acquisition told forty ways, by forty outlets, for people to read.

So every team, and now every agent, re-reads the web to find out what changed.

Evinor is the event layer for the real world.

Read the manifesto →
/ The problem

Every team rebuilds the same scrapers, polling jobs, and LLM loops to catch the same changes — paying separately and getting results they can’t trust or reuse.

BEFORE
WITH EVINOR
/ why structured

Agents shouldn’t have to read the news.

WRITTEN FOR PEOPLEEXAMPLE

Helio Labs, the Toronto-based battery-analytics startup, said Tuesday it has closed a $40 million Series B. The round was led by Northwind Ventures, with participation from existing backers, according to a person familiar with the matter. The company, which also goes by Helio, plans to double its engineering team…

WRITTEN FOR SOFTWAREEXAMPLE
FUND_RAISINGInvestment
COMPANY_RAISING_FUNDS
Helio Labs
INVESTING_COMPANY_NAME
Northwind Ventures
AMOUNT_RAISED
$40M → 40000000
FUNDING_ROUND_TYPE
Series B
reportingOutlets
3
confidence.band
HIGH

Deterministic

Branch on a field, not on how a model read a paragraph today.

Cheap to consume

An agent reads a small typed object instead of re-reading articles.

Verifiable

Every event carries its sources and counts; check before you act.

Composable

Filter, join, and act on fields: amount ≥ $20M, entity in your list.

/ How it works

Reported many times. Delivered once.

01

Collect

News coverage from many outlets, plus first-hand reports published directly by companies and people close to the event.

Outlet A
external
Outlet B
external
Outlet C
external
Helio Labs Comms
first-hand
02

Structure

Each happening becomes one typed event with extracted roles, each role linked to a canonical entity.

FUND_RAISING
COMPANY_RAISING_FUNDS
Helio Labs
INVESTING_COMPANY_NAME
Northwind Ventures
AMOUNT_RAISED
$40M
FUNDING_ROUND_TYPE
Series B
03

Match

Your sensors decide what’s worth waking you up for. You set the bar.

watchlist Portfolio
✓
amount $40M ≥ $20M
✓
sources 3 ≥ 3
✓
sensor
match
04

Deliver

Push to a webhook or Slack. Pull through the REST API, TypeScript SDK, or MCP.

push · webhook
200
push · slack
#deals
pull · rest
/v1/events/search
pull · mcp
search_events
/ Why one event is one event

One happening. One event. Delivered once.

Forty articles. One event. One delivery.

Matching and entity resolution happen before anything reaches you. That’s why you can trust the event you receive.

REPORTS
40
many outlets
EVENT
1
FUND_RAISING
DELIVERY
1
per sensor
ALIASES → CANONICAL ENTITY
DatabricksDBXDatabricks, Inc.1 entity
Illustration

Matched across outlets

Coverage of the same happening from many outlets becomes one event, so your workflow runs once — not once per article.

One canonical entity

Watch “Databricks” and you also catch “DBX” and “Databricks, Inc.” If two entity records turn out to be the same company, results follow the surviving one.

Delivered once, safe to retry

Each sensor delivers an event once, with an idempotencyKey that stays the same across retries, so you can dedupe safely.

Evidence travels with it

The event keeps counting sources after delivery: how many outlets reported it, and which ones.

/ structured at read time, and at publish time

Structured twice: when it’s read, and when it’s published.

Today most of what happens is published as prose, so Evinor structures it as it’s read. But the best time to structure a fact is when it’s first published — by the company it’s about, or the person who saw it first-hand. Evinor does both, into the same events.

LANE 1 · READ TIMELIVE · external
coverage
Outlets A–C
read
extraction
structure
4 roles
canonical
2 entities

Extracted from coverage across many outlets, matched into one event.

LANE 2 · PUBLISH TIMELIVE · first-hand
ORGANIZATION
Helio Labs Comms
filed as submitted
structured report
POST /v1/reports{  "event_type_id": "<Investment event type id>",  "happened_at": "2026-09-14T12:30:00Z",  "roles": [    { "role": "COMPANY_RAISING_FUNDS", "entity_id": "5c1d2e3f-…" },    { "role": "INVESTING_COMPANY_NAME", "entity_id": "8a0b7c6d-…" },    { "role": "AMOUNT_RAISED", "amount": { "value": 40000000, "unit": "USD" } },    { "role": "FUNDING_ROUND_TYPE", "text": "Series B" }  ],  "description": "Helio Labs closed a $40M Series B led by Northwind Ventures.",  "grant_id": "<Helio Labs reporting grant id>"}

Filed structured at the source — no parsing, no guessing, attributed to who published it.

↳ BOTH LANES CONVERGE · ONE EVENT
FUND_RAISINGInvestment
Helio Labs raised $40M in a Series B led by Northwind Ventures.
provenance
Outlet Aexternal
Outlet Bexternal
Outlet Cexternal
Helio Labs Commsuser · first-hand
Example data

Publish from the web app, the REST API, or an agent over MCP.

Published under your name, or on behalf of your company.

Subscribers can choose events backed by first-hand reports.

The more of the world that’s published structured, the less of it anyone has to parse.

Publisher revenue share is in the works — talk to us.

/ You set the bar

Decide what’s worth waking you up for.

Low-stakes workflows can fire on the first credible report. High-stakes ones can wait for more independent sources. You choose, per sensor.

Backtest any sensor against the last 7 or 30 days before you enable it. Building sensors and backtesting are free.

/ NEW SENSOREXAMPLE DATA
Event type
Investment
Involving
Portfolio · watchlist+ add any company by name
Roles
amount raised ≥ $20M currency-normalized+ date after / before · entity in list
Min. independent sources
Required outlets
optional · none
Source kind
Destinations
webhook · https://your-app.example/hooks/evinor slack · #dealsn8n · Zapier · Make via webhook
BACKTESTWould have fired 14 times in the last 30 days
/ Event catalog

What Evinor detects

Event types are schemas on one engine, not separate products — the catalog grows without rebuilding anything.

LIVE

Acquisition

ACQUISITION

One company acquires another.

roles acquiring company · company being acquired · value
LIVE

Investment

FUND_RAISING

A company raises a funding round.

roles investors · company raising · amount raised · round type
LIVE

Layoff

LAYOFF

A company cuts jobs.

roles company · employees affected · % of workforce · reason · category of employees
LIVE

Leadership Change

LEADERSHIP_CHANGE

Someone takes up or leaves a leadership role.

roles company · role title · incoming person · outgoing person · reason
LIVE

IPO

IPO

A company lists on a stock exchange.

roles company · valuation · amount raised · stock exchange
LIVEnewer · noisier to detect

Partnership Announcement

PARTNERSHIP_ANNOUNCEMENT

Two companies announce a partnership.

roles two partner companies · value · duration
LIVEnewer

Product Launch

PRODUCT_LAUNCH

A company launches a new product, version, feature, capability, content, or access change.

roles company · product · launch type
Coming soon

Package vulnerability

Coming soon

Security breach

Coming soon

New job opening

Coming soon

Insolvency / bankruptcy

Coming soon

Product recall

Coming soon

Lawsuit filed

Coming soon

Regulatory action

/ Push or pull

Be told, or ask.

Your agent can search what already happened and be told what happens next. Evinor delivers the event; acting on it happens in your workflow or agent.

PUSH

A sensor fires. You get a signed POST.

Delivered to your webhook, or as a Slack message. n8n, Zapier, and Make work today through the signed webhook; native integrations are coming soon.

idempotencyKey 0d7f2b6e-55c1…same on every attempt
#1503 Service Unavailable↻ retry in 30 s
#2200 OK✓ delivered
PULL

Search what already happened.

Same filter vocabulary as sensors, up to a year back, from the REST API, the TypeScript SDK, or MCP so an agent can query it directly.

POST /v1/events/search
lookback_days73090180365
newest first · cursor pagination · paging is free
bash
curl https://api.evinor.ai/v1/sensors \  -H "Authorization: Bearer $EVINOR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "name": "Series B+ in our portfolio",    "filter": {      "event_type_id": "<Investment event type id>",      "involved_entity_list_ids": ["<Portfolio watchlist id>"],      "min_reports": 3    },    "actions": [      { "type": "generic_webhook",        "generic_webhook": { "url": "https://your-app.example/hooks/evinor" } }    ]  }'
/ why now

Agents are starting to act, not just answer.

Software that acts unattended needs inputs it can trust and branch on — not paragraphs it has to interpret.

Extraction finally works.

Language models made it practical to turn prose into typed events at scale — the read-time half of this couldn’t exist a few years ago.

Agents can plug in.

With MCP, any agent can search what happened and file what it knows, through one connection.

/ Delivery you can build on
signatureHMAC-SHA256 over the canonical envelope
secretsPer-sensor signing secret, rotatable
idempotencyStable idempotencyKey across retries
retriesAutomatic, with exponential backoff
transportHTTPS only
observabilityPer-sensor delivery log in the app
/ Why not just…

Build it yourself, or call a research API?

CapabilityEvinorDIY scrapers + LLM loopsPer-request research APIs
One event per happeningYes: Matched across outlets before it reaches youNo: Every team re-detects and re-dedupesNo: Re-researched on every request
Canonical entitiesYes: Aliases resolve to one entity you can key onPartly: Fuzzy matching downstreamPartly: Varies
You set the barYes: Per-sensor source thresholds and role conditionsPartly: Build it yourselfNo: Rarely
Push and pullYes: Webhook, Slack, REST, SDK, MCPPartly: Your cron jobsPartly: Mostly polling
HistoryYes: Search up to 365 days backPartly: Only what you storedPartly: Depends on the provider
Cost as you growYes: Detection is shared across subscribersNo: Grows with every team and sourceNo: Grows with every request
/ Start

Subscribe to what happens.

The event layer for the real world.

Get started — free→
Free tier — no card required.