Skip to content

How category-based filters work

Some teams want every send, open, and bounce in their CRM — for attribution, account-based selling, or building a system of record they can re-engage from later. Others only want activity once a lead is qualified, so reps aren’t drowning in noise.

Category-based filters are how OutboundSync supports the second pattern. Activity for a lead is held until the SEP reports a category you’ve allowlisted — a positive reply, a booked meeting, whatever you define as qualified — and then the full history releases into your CRM.

It works across the SEPs OutboundSync supports, including Smartlead, EmailBison, and Heyreach, with HubSpot, Salesforce, Close, and Attio on the receiving end.

First, review this flowchart that shows how it works:

Flowchart: SEP sends a webhook payload. If it isn't a LEAD_CATEGORY_UPDATED payload, OutboundSync holds it in queue and waits. If it is, OutboundSync records the new lead_category_id and checks it against your allowlist. On a match, every queued payload for that campaign and lead is released to your CRM endpoint; otherwise the payloads stay held.
How OutboundSync holds and releases webhook payloads based on lead category.

Every payload OutboundSync receives carries three identifiers from your SEP: webhook_id, campaign_id, and lead_id. The same lead can sit in different categories across different campaigns, so we key the held payloads on all three.

The lifecycle has three stages:

1. Arrive and hold. When the SEP sends a payload like SENT_EMAIL or OPEN_EMAIL, OutboundSync stores it against the webhook_id + campaign_id + lead_id triple and marks it unsent. Nothing reaches your CRM yet.

2. Category check. Only a LEAD_CATEGORY_UPDATED event can set or change a lead’s category. When one arrives, OutboundSync records the new category for that lead and campaign, then checks it against the allowlist you configured in the webhook’s category-based filter settings.

3. Release in order. On a match, OutboundSync pulls every held payload for that webhook_id + campaign_id + lead_id, queues them with a short staggered delay so they hit your CRM in the order they happened, and marks them sent. Payloads that have already been released aren’t sent again.

What happens if the category changes later

Section titled “What happens if the category changes later”

Categories aren’t one-shot. If a lead is later moved into a different allowlisted category — or out of one entirely — that update is stored and applied to any payloads that arrive afterward. Already-released payloads are not retroactively retracted.