The Data Flow
Before exploring each concept individually, here’s the end-to-end picture of how data moves through Stairoids:Signals
A Signal is a discrete engagement event — a single, timestamped record that says “this thing happened, involving this account and/or contact.” Signals are the atomic unit of data in Stairoids. Every piece of intelligence and every automation is ultimately built on top of them.Anatomy of a Signal
Every signal shares a common structure regardless of where it came from:| Field | Type | Description |
|---|---|---|
id | string | Unique identifier assigned by Stairoids at ingestion time. |
type | string | A namespaced event type such as page_visit, email_open, deal_stage_changed, or linkedin_connection. |
account | object | The company associated with this signal, identified by domain (e.g., acme.com). |
contact | object (optional) | The individual associated with this signal, identified by email address. |
properties | object | Arbitrary key-value metadata specific to the signal type (e.g., {"page": "/pricing"} or {"stage": "Proposal"}). |
score | integer | The weight Stairoids assigns to this specific signal type, used to update the account and contact’s engagement scores. |
created_at | ISO 8601 timestamp | When the signal was received by Stairoids. |
Signal Types
Stairoids ships with a library of built-in signal types mapped to common GTM tools, and you can also define custom signal types for anything your stack emits that doesn’t fit a standard category. Examples of built-in types include:page_visit— A contact visited a page on your website.email_open— A contact opened a marketing or sales email.deal_stage_changed— A HubSpot deal moved from one pipeline stage to another.linkedin_connection— A prospect accepted a LinkedIn connection request.form_submission— A contact submitted a form on your site or in a tool.
Signal Intelligence
Signal Intelligence is the scoring and correlation engine at the heart of Stairoids. Raw signals on their own are useful, but their real value emerges when Stairoids combines them across sources, over time, and across multiple contacts at the same account.How Scoring Works
Every time a signal arrives, Stairoids updates two engagement scores: one for the account and one for the contact. Scores are computed using three inputs:- Type weight — Each signal type carries a configured weight reflecting its intent value. A
page_visitto/pricingweighs more than anemail_openof a newsletter. You can customize type weights in Settings → Signal Weights. - Recency — More recent signals contribute more to the current score. Stairoids applies a time-decay function so that older signals fade in influence without disappearing from history.
- Frequency — Repeated signals of the same type from the same contact within a short window are aggregated to prevent score inflation from spam or bot traffic.
Score thresholds — the values at which Outgoing Automations fire — are fully configurable per automation rule. There is no global “hot lead” threshold; you define what the numbers mean for your business.
Incoming Automations
Incoming Automations are the mechanisms that bring signals into Stairoids. There are three ways signals can enter the platform:Native Integrations
Connect tools like HubSpot, HeyReach, or LinkedIn Sales Navigator directly. Stairoids polls or listens via webhook for qualifying events and converts them to signals automatically using pre-built mappings.
Inbound Webhooks
Generate a unique webhook URL in Stairoids and point any tool that supports outbound webhooks at it. Stairoids parses the payload and maps it to a signal type using a rule you define.
Direct API Calls
POST /v1/signals directly from your own application or backend. This is the most flexible path and is ideal for custom in-house tools, product usage data, or events that don’t come from a third-party integration.Outgoing Automations
Outgoing Automations are rules that Stairoids evaluates in real time after every signal ingestion. When a rule’s conditions are met, Stairoids executes one or more actions against your connected tools.Anatomy of an Outgoing Automation
Every outgoing automation is composed of:| Component | Description |
|---|---|
| Trigger | The condition that activates the rule. Triggers can be based on signal type, signal properties, account score thresholds, or contact score thresholds. |
| Filters | Optional additional conditions that must also be true (e.g., “only if the account is in the Enterprise segment”). |
| Actions | One or more operations to perform on a connected tool — enroll a contact in a sequence, update a CRM field, send a Slack notification, create a task, and so on. |
| Deduplication | Controls how often the automation can fire for the same contact or account (e.g., “at most once per 7 days”). |
Accounts and Contacts
Stairoids tracks two entity types that signals are attached to:Accounts
An Account represents a company. Stairoids identifies accounts by their domain (e.g.,acme.com). When a signal arrives with account.domain, Stairoids looks up or creates the account record and appends the signal to its engagement timeline. Account profiles include:
- Firmographic data (name, industry, size) — populated automatically via enrichment if configured.
- A running engagement score updated with every signal.
- A full timeline of every signal associated with any contact at that domain.
- All active and past outgoing automation executions tied to the account.
Contacts
A Contact represents an individual person. Stairoids identifies contacts by their email address. Contacts always belong to an account (the domain portion of their email is used to associate them automatically). Contact profiles include:- The contact’s own engagement score, distinct from their account’s score.
- A personal signal timeline.
- Enrichment data pulled from connected tools or enrichment integrations.
Workspaces
A Workspace is the top-level organizational unit in Stairoids. All data — signals, accounts, contacts, automations, and integrations — lives inside a workspace and is fully isolated from other workspaces. Workspaces are designed for two primary use cases:- B2B agencies — Create one workspace per client to keep data, automations, and integrations completely separated. Each workspace has its own API keys, settings, and user access controls.
- Internal business units — Large organizations can use separate workspaces for distinct business units or product lines that operate independent GTM programs.
Putting It All Together
Here’s a concrete example that ties all six concepts together:-
A contact at
acme.comvisits your pricing page. Your website fires aPOST /v1/signalscall withtype: "page_visit"andproperties.page: "/pricing". This is a direct API call — an Incoming Automation. -
Stairoids creates the signal, assigns it a type weight of
15, and updates Jane’s Contact score and theacme.comAccount score in real time. Signal Intelligence detects that this is the third pricing page visit from this account in seven days and boosts the account score accordingly. -
The account score crosses
75— the threshold you defined in an Outgoing Automation rule. Stairoids fires the action: it enrolls Jane in a HeyReach LinkedIn outreach sequence and posts a “Hot account alert” message to your#sales-signalsSlack channel. - Your rep sees the Slack alert, opens the Account profile in Stairoids, reviews the full signal timeline, and jumps into the HeyReach sequence — all without manually checking a single tool.