Skip to main content

Architecture

Nous is one stack. Connectors push signals from your GTM tools into Nous, identity resolution matches every signal to one person and one company, and the customer graph holds the result. Your agent reads it back over MCP or REST. The three pieces.
  • Ingestion. Every signal source becomes a stream of events and states with source, method, and observed_at. Nothing is overwritten.
  • Identity Resolution. Every signal is matched to one person and one company using email, LinkedIn URL, domain, phone, and a name plus company fallback.
  • The Customer Graph. The append-only record of every person, conversation, and touchpoint at an account. Every fact carries freshness, confidence, and the sources that produced it.
The output surfaces, the REST API and the MCP server, are thin wrappers around the graph.

Ingestion

Connectors normalise every signal into a fixed shape.
  • kind: 'event'. An interaction happened (interaction.email_sent, interaction.call_held, and so on).
  • kind: 'state'. A fact was observed (title, stage, intent, and so on).
Sources include CRMs (HubSpot, Pipedrive, Attio), outbound platforms (Instantly, Lemlist), Gmail, Outlook, SMTP, LinkedIn via Unipile, meeting capture (Fireflies, Fathom), web identity (RB2B), and any HTTP source via HMAC-signed custom webhooks. Agents themselves are signal sources too. Any POST /v2/observations call adds to the same graph.

Identity Resolution

Identity resolution is what makes Nous a graph rather than another data store. Every inbound signal is resolved to one person and one company using.
  • Entity UUID (if you have one)
  • Email address
  • LinkedIn profile URL
  • Domain (for companies)
  • Phone number
  • Name plus company as a fallback (returns ambiguous when not unique)
The same person in Apollo, HubSpot, and Gmail becomes one entity, not three. Resolve once at the API boundary and the graph handles the rest.

The Customer Graph

The graph is append-only. Nothing is ever updated, nothing is ever deleted. A state with value: null asserts that a fact ended (the person left the company, the deal closed lost) without overwriting history. Two consequences.
  1. The graph self-heals. When a new signal contradicts an older one, derived facts recompute and the belief shifts toward truth.
  2. Every fact is auditable. Trace any fact back to the signals that produced it.
When your agent reads from the graph, every fact carries metadata.
FieldMeaning
freshnessfresh / aging / suspect / expired. How recently observed.
confidence0.01.0. How strongly the underlying signals support the fact.
sourcesThe connectors that contributed.
Your agent reads these on every fact. That’s what lets it decide whether to act now or call /v2/verify first.