Understanding Signals
Signal Pipeline
Signals flow through Trailspark in a defined pipeline:
- Source
- Staging
- Mapping Rules
- Processing
- Lead Profile
- Evaluation
- Source: Signals arrive through your webhook endpoints (universal, source-specific, batch or bulk), the JavaScript tracking script, and connected integrations. Trailspark detects the sending system from the payload; see Signal Sources.
- Staging: Each signal is checked and stored before anything else happens, and duplicates are dropped. Signals from people who aren't identified yet are held until an identify call links them to a lead.
- Mapping Rules: Your rules match each signal by source, event name and payload fields, and the highest-priority match wins. Signals that no rule matches wait on the Signal Queue tab until you create one.
- Processing: The matched signal creates or updates the lead (by email, CRM ID or product user ID) and links it to an account: by CRM account, product workspace, or email domain. Personal email domains are never used to find an account.
- Lead Profile: The signal appears on the lead's Signals tab under the matching rule's name, and the lead's signal count and last-active time update.
- Evaluation: New activity triggers a fresh Hot, Warm or Cold score for the lead and its account, with the reasoning behind it. Scores also refresh when your ICP or settings change, when account or CRM data changes, and on a routine check.
Signal Sources
Trailspark auto-detects the source from payload structure. Recognized sources:
| Source | How signals arrive |
|---|---|
| Segment | Identify, track, and page events via webhook destination |
| Marketo | Marketing automation events (detected by mktLeadId in payload) |
| HubSpot | CRM events (detected by portalId or hs_object_id) |
| Salesforce | CRM events (detected by sObject in payload) |
| Stripe | Billing events from a Stripe webhook (detected by type and data.object in payload) |
| Heap | Heap Webhooks (beta), one webhook per labeled event; the webhook URL includes ?source=heap |
| Custom / Generic | Any system sending HTTP POST to your webhook endpoint. Falls back to generic if no source is detected |
You can also explicitly set the source via the source-specific webhook URL (/api/signal-staging/webhook/{source}/{apiKey}) or by including an X-Source header or source field in the payload.
Signal Types
When creating mapping rules, you assign a signal type to categorize the signal:
| Type | Use for |
|---|---|
| Page View | Website page visits |
| Form Fill | Form submissions |
| Product Activity | In-product actions |
| Sales Event | Sales interactions |
| Email Open | Email opens |
| Email Click | Email link clicks |
What You See for Each Signal
The Signal Explorer page lists your signals in two tabs:
| Tab | Columns |
|---|---|
| Processed | Signal Name, Source, Lead, Processed At, Rule |
| Failed | Event Type, Source, Status, Error, Failed At |
Signal Name is the name of the mapping rule that matched, and Rule links to that rule. Cards above the tabs count pending, processed and failed signals.
Signal Mapping Page
Navigate to Signal Mapping from the main navigation. The page has two tabs:
- Signal Rules -- View, create, edit, and delete mapping rules
- Signal Queue -- View staged signals grouped by pattern, and create rules from them

Signal Processing States
| What you see | Meaning |
|---|---|
| Counted under Pending Signals | Waiting to be processed. A signal no rule matches stays pending, on the Signal Queue tab, in case you add a rule later |
| Processed tab | Matched a rule and added to the lead |
| Failed tab, Failed badge | Processing hit an error. It is retried automatically, up to 3 times |
| Failed tab, Skipped badge | A plan limit was reached, so the signal is paused; it's picked up again once capacity frees up |
Plan Limits
Each plan includes a monthly ingested-signal allowance and a signal retention window (in days). As you approach the allowance, usage warnings display in the Signal Explorer.
Past the allowance, Trailspark keeps collecting your signals at no extra charge up to twice the allowance and holds them — the Usage page marks them Paused. Paused signals don't update your scores, and they're deleted when the billing period ends. Enabling usage overages in Settings > Billing on a paid plan, or upgrading, resumes them immediately. Beyond twice the allowance, webhook responses return 429 status codes and new signals are rejected until the next billing period.