Salesforce Dictionary - Free Salesforce GlossarySalesforce Dictionary
Full Campaign Member entry
How-to guide

Adding members to a Campaign and configuring Member Status

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.

By Dipojjal Chakrabarti · Founder & Editor, Salesforce DictionaryLast updated May 16, 2026

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

CampaignIdrequired

The parent Campaign record. Cannot be changed after creation; reparenting requires delete and recreate.

LeadId or ContactIdrequired

Exactly one of these. Populating both raises a validation error. Lead converts to Contact migrate the LeadId reference to ContactId automatically.

Statusrequired

Picklist value from the Campaign's Member Status set. Defaults to the campaign's marked-as-default status if not specified at insert.

HasRespondedrequired

Derived from the Status value's Has Responded flag. Not directly writable; controlled by the chosen Status.

Gotchas
  • 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.

See the full Campaign Member entry

Campaign Member includes the definition, worked example, deep dive, related terms, and a quiz.