Skip to content

How to report outbound activity by campaign

When to use this guide: Use this when you want outbound metrics broken down by sales engagement campaign.

Prefer campaign ID over campaign name. Names can change in your sales engagement platform; IDs stay stable. OutboundSync does not create native Salesforce Campaign or CampaignMember records — campaign metadata lands on OutboundSync custom fields and optional Task Subject tokens.

  • Custom fields enabled on Lead and/or Contact (and optionally Task) so OSLastCampaignId__c / OSLastCampaignName__c are populated. See Which Salesforce fields are updated.

  • For Task Subject filters: activity object is Task, and the Subject template includes {{ campaign_id }} . It is not in the default Subject, so add it before filtering — for example:

    [OS] [{{ os_sales_engagement_platform }} - {{ event_type }} - {{ campaign_id }}] {{ subject }}

    If you would rather not change the Subject, enable Task custom fields and group by OSLastCampaignId__c instead. See Writing to the Task Object.

Option A — Person reports (Lead or Contact)

Section titled “Option A — Person reports (Lead or Contact)”

Best for “whose most recent campaign was X?” — a last-touch snapshot, not a full history of every campaign that touched the person.

OSLastCampaignId__c / OSLastCampaignName__c store only the latest campaign OutboundSync wrote. If someone was later touched by campaign Y, they leave the campaign X cohort. For per-campaign send/reply volume across history, use Option B (Tasks).

  1. Create a Leads or Contacts report (match your webhook person object).
  2. Add columns: Name, Email, OSLastCampaignId__c, OSLastCampaignName__c, OSLastSentTime__c, and any engagement fields you need.
  3. Filter OSLastCampaignId__c equals a specific ID, or group/summarize by OSLastCampaignId__c for a last-touch cross-campaign view.
  4. Optionally require OSLastSentTime__c is set so you only count people reached.

Email-specific campaign fields (OSLastEmailCampaignId__c, etc.) are available when you need to separate email from social last-touch campaign metadata.

Option B — Task reports (activity grain)

Section titled “Option B — Task reports (activity grain)”

Best for “how many sends/replies happened in campaign X?” — each synced event is its own Task, so this is the right path for campaign activity volume.

  1. Create a Tasks report as in Task activity by event type.
  2. Filter Subject contains your campaign ID or group by Task custom field OSLastCampaignId__c if Task custom fields are enabled.
  3. Combine with an event-type Subject filter (for example EMAIL_SENT or EMAIL_REPLY) for campaign send or reply volume.

If Task custom fields are off, the Subject is your only campaign key — make sure {{ campaign_id }} is in the subject template (it is not there by default).

  1. Summarize by Row Count.
  2. Group by campaign ID (field or Subject).
  3. Add the report to a Salesforce dashboard next to your reached and event-type components.

To relate outbound-touched people to pipeline, build a custom report type. Contacts join Opportunities through Opportunity Contact Roles; Leads have no direct link to Opportunities until they convert, so lead-sourced attribution follows the converted contact and account. Filter by OutboundSync fields or related Tasks. OutboundSync does not write Opportunity records — attribution logic stays in your Salesforce report design.