Skip to main content
Stairoids emits a structured set of webhook events covering every stage of the signal lifecycle — from the moment a signal is ingested through scoring, account-level aggregation, and automation execution. You can subscribe to any combination of these events per registered endpoint, giving you precise control over which activity triggers logic in your own systems.
Subscribe to automation.triggered to build your own logging or audit trail of all GTM actions Stairoids takes. This gives you a complete, timestamped record of every outgoing action Stairoids fires — useful for compliance, debugging, and reporting.

Event Reference

EventDescriptionWhen it fires
signal.createdA new signal has been ingested into StairoidsWhen any source (API, webhook, or integration) delivers a new signal
signal.scoredA signal’s contribution to the account/contact score has been calculatedAfter each signal is processed through the scoring engine
account.score_changedAn account’s overall engagement score has changedWhen a new signal or score recalculation updates an account’s aggregate score
contact.score_changedA contact’s engagement score has changedWhen a new signal or score recalculation updates a contact’s score
automation.triggeredAn outgoing automation has firedWhen a configured outgoing automation matches a signal and executes its action

signal.created

Fired when a new signal is successfully ingested into your workspace, regardless of the source. Use this event to react to raw intent data in real time — for example, routing high-value signals to a Slack channel or logging them to a data warehouse.
{
  "event": "signal.created",
  "id": "evt_abc123",
  "created_at": "2024-10-15T09:30:00Z",
  "data": {
    "id": "sig_xyz789",
    "type": "page_visit",
    "account": {
      "id": "acc_001",
      "domain": "acme.com",
      "name": "Acme Corp"
    },
    "contact": {
      "id": "con_042",
      "email": "jane@acme.com",
      "name": "Jane Smith"
    },
    "score": 12,
    "source": "website",
    "properties": {
      "page": "/pricing",
      "referrer": "https://google.com",
      "session_id": "sess_88abc"
    },
    "created_at": "2024-10-15T09:30:00Z"
  }
}
FieldTypeDescription
eventstringAlways signal.created
idstringUnique event delivery ID
created_atstringISO 8601 timestamp of the event
data.idstringUnique signal ID
data.typestringSignal type, e.g. page_visit, form_submit, email_open
data.accountobjectAccount associated with the signal
data.contactobjectContact associated with the signal (if resolved)
data.scoreintegerPoint value assigned to this individual signal
data.sourcestringOrigin of the signal, e.g. website, hubspot, api
data.propertiesobjectFreeform metadata attached to the signal
data.created_atstringISO 8601 timestamp of when the signal was received

signal.scored

Fired after the scoring engine processes a signal and calculates its contribution to the associated account and contact scores. Use this event when you want to act on scored — rather than raw — intent data.
{
  "event": "signal.scored",
  "id": "evt_def456",
  "created_at": "2024-10-15T09:30:05Z",
  "data": {
    "signal_id": "sig_xyz789",
    "signal_type": "page_visit",
    "account": {
      "id": "acc_001",
      "domain": "acme.com",
      "name": "Acme Corp"
    },
    "contact": {
      "id": "con_042",
      "email": "jane@acme.com"
    },
    "score_contribution": 12,
    "scoring_model": "default",
    "scored_at": "2024-10-15T09:30:05Z"
  }
}

account.score_changed

Fired when the aggregate engagement score for an account changes as a result of a new signal or a periodic score recalculation. The payload includes both the previous and new score so you can calculate the delta and trigger threshold-based logic on your end.
{
  "event": "account.score_changed",
  "id": "evt_ghi789",
  "created_at": "2024-10-15T09:30:06Z",
  "data": {
    "account": {
      "id": "acc_001",
      "domain": "acme.com",
      "name": "Acme Corp"
    },
    "previous_score": 84,
    "new_score": 96,
    "delta": 12,
    "triggering_signal_id": "sig_xyz789",
    "scoring_model": "default",
    "updated_at": "2024-10-15T09:30:06Z"
  }
}
FieldTypeDescription
data.accountobjectThe account whose score changed
data.previous_scoreintegerThe account’s score immediately before this change
data.new_scoreintegerThe account’s score after this change
data.deltaintegerThe difference (new_score - previous_score). Can be negative for score decay events.
data.triggering_signal_idstringThe signal ID that caused the recalculation, if applicable
data.scoring_modelstringThe scoring model used, e.g. default or a custom model name

contact.score_changed

Fired when an individual contact’s engagement score changes. The structure mirrors account.score_changed but scoped to a specific contact rather than an account.
{
  "event": "contact.score_changed",
  "id": "evt_jkl012",
  "created_at": "2024-10-15T09:30:07Z",
  "data": {
    "contact": {
      "id": "con_042",
      "email": "jane@acme.com",
      "name": "Jane Smith",
      "account": {
        "id": "acc_001",
        "domain": "acme.com",
        "name": "Acme Corp"
      }
    },
    "previous_score": 33,
    "new_score": 45,
    "delta": 12,
    "triggering_signal_id": "sig_xyz789",
    "scoring_model": "default",
    "updated_at": "2024-10-15T09:30:07Z"
  }
}

automation.triggered

Fired every time an outgoing automation successfully matches a signal and executes its action. The payload includes the full context of the triggering signal, the matched account and contact, and details about which automation fired.
{
  "event": "automation.triggered",
  "id": "evt_mno345",
  "created_at": "2024-10-15T09:30:10Z",
  "data": {
    "automation_id": "auto_e5f6g7h8",
    "automation_name": "Push High-Intent Signals to HubSpot",
    "action_type": "hubspot",
    "account": {
      "id": "acc_001",
      "domain": "acme.com",
      "name": "Acme Corp"
    },
    "contact": {
      "id": "con_042",
      "email": "jane@acme.com",
      "name": "Jane Smith"
    },
    "signal": {
      "id": "sig_xyz789",
      "type": "page_visit",
      "score": 12,
      "source": "website",
      "properties": {
        "page": "/pricing"
      }
    },
    "outcome": {
      "status": "success",
      "external_id": "hs_deal_9988"
    },
    "triggered_at": "2024-10-15T09:30:10Z"
  }
}
FieldTypeDescription
data.automation_idstringThe ID of the automation that fired
data.automation_namestringThe display name of the automation
data.action_typestringThe integration the action targeted, e.g. hubspot, pipedrive
data.accountobjectThe account associated with the triggering signal
data.contactobjectThe contact associated with the triggering signal
data.signalobjectA summary of the signal that matched the automation trigger
data.outcome.statusstringsuccess or failed
data.outcome.external_idstringThe ID of the record created or updated in the destination system
data.triggered_atstringISO 8601 timestamp of when the automation executed