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.
Prerequisites
Section titled “Prerequisites”-
Custom fields enabled on Lead and/or Contact (and optionally Task) so
OSLastCampaignId__c/OSLastCampaignName__care 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__cinstead. 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).
- Create a Leads or Contacts report (match your webhook person object).
- Add columns: Name, Email,
OSLastCampaignId__c,OSLastCampaignName__c,OSLastSentTime__c, and any engagement fields you need. - Filter
OSLastCampaignId__cequals a specific ID, or group/summarize byOSLastCampaignId__cfor a last-touch cross-campaign view. - Optionally require
OSLastSentTime__cis 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.
- Create a Tasks report as in Task activity by event type.
- Filter Subject contains your campaign ID or group by Task custom field
OSLastCampaignId__cif Task custom fields are enabled. - Combine with an event-type Subject filter (for example
EMAIL_SENTorEMAIL_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).
Chart and dashboard
Section titled “Chart and dashboard”- Summarize by Row Count.
- Group by campaign ID (field or Subject).
- Add the report to a Salesforce dashboard next to your reached and event-type components.
Opportunity influence (optional)
Section titled “Opportunity influence (optional)”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.
Next step
Section titled “Next step”- Run a webhook test payload to confirm campaign metadata lands after a test event