Adding Campaign Members is how a Campaign gets its data. You add members one at a time from the Lead or Contact, in bulk from a report or CSV, or programmatically via flow or API. Member Status values have to be set up before adding members or every row defaults to Sent.
- Define the Member Status picklist
From the Campaign record, click Campaign Member Statuses on the related list and add the statuses that match the campaign type. Webinar campaigns typically use Invited, Registered, Attended, No-Show. Mark exactly one as Default and any that count as engagement as Has Responded.
- Add members from a report
Campaign record, Manage Members dropdown, Add Members From Report. Pick a tabular Leads or Contacts report and a starting Member Status. Salesforce inserts up to 50,000 CampaignMember rows in one batch. Reports must include the standard Lead or Contact ID field for the join to work.
- Add members from a CSV
Campaign record, Manage Members, Add Members From File. Upload a CSV with email or external ID, map to Lead or Contact, set the starting status. Salesforce matches existing records first, then optionally creates new Leads for unmatched rows.
- Update status on existing members
From the Campaign Members related list, select rows and click Update Status. The bulk update writes the new status and stamps Response Date if Has Responded is true. Use this after every webinar or event to flip Registered to Attended.
- Add members programmatically
Flow has a Create Records element with CampaignMember as the object. Set CampaignId plus either LeadId or ContactId, plus Status. Bulk patterns use the Update Campaign Member Status action from marketing automation packages.
The parent Campaign record. Cannot be changed after creation; reparenting requires delete and recreate.
Exactly one of these. Populating both raises a validation error. Lead converts to Contact migrate the LeadId reference to ContactId automatically.
Picklist value from the Campaign's Member Status set. Defaults to the campaign's marked-as-default status if not specified at insert.
Derived from the Status value's Has Responded flag. Not directly writable; controlled by the chosen Status.
- A person cannot be a Campaign Member as both a Lead and a Contact on the same Campaign. Convert the Lead first or pick one path.
- Member Status picklists are per-Campaign, not org-wide. Adding members to a new campaign without first configuring statuses lands every row in Sent.
- Campaign.NumberOfResponses lags member-status edits by a few minutes due to async rollup. Refreshing the page does not force recalculation.
- Adding the same Lead to the same Campaign twice raises a duplicate-key error. Use the wizard for dedupe; Data Loader expects unique pairs upfront.
- Campaign Influence records are not created automatically when a member becomes an Opportunity Contact Role. Customizable Campaign Influence has its own attribution logic.