OutFlo campaigns can use custom variables; they are not limited to standard LinkedIn fields such as first name, company, or job title. Through the OutFlo MCP server, add your own fields to each lead and reference them directly in campaign copy.
For example, a lead sent with an industry field can receive a message containing {industry}. A lead sent with recentTrigger can receive a message containing {recentTrigger}.
The Rule: Put Custom Fields Directly on the Lead
Use outflo_add_lead_to_campaign and place each custom value beside the normal lead fields. Keys must not contain spaces.
{
"campaignId": "CAMPAIGN_ID",
"lead": {
"linkedinUrl": "https://www.linkedin.com/in/taylor-example/",
"firstName": "Taylor",
"company": "Acme",
"industry": "SaaS",
"recentTrigger": "Series B announcement",
"accountTier": "enterprise"
}
}In this example, industry, recentTrigger, and accountTier are custom variables. OutFlo keeps those values with the lead, adds them to the campaign’s API-variable mapping, and makes them available to message templates.
Do not wrap fields in a customVariables object. The correct shape is lead.industry, not lead.customVariables.industry.
Use the Variable in Campaign Copy
Create the campaign with outflo_create_campaign. Put the variable name in single braces in the relevant message field:
{
"name": "SaaS trigger outreach",
"senderUrls": ["https://www.linkedin.com/in/your-sender/"],
"sequence": {
"sequenceType": "classic",
"sequenceSteps": {
"0": {
"actionType": "SEND_MESSAGE",
"messageText": "Hi {linkedin_firstName}, I saw {recentTrigger}. We help {industry} teams improve outbound efficiency."
}
}
},
"variableResolution": {
"recentTrigger": {
"fixType": "fallbackValue",
"fallbackValue": "your team’s recent work"
},
"industry": {
"fixType": "fallbackValue",
"fallbackValue": "growing teams"
}
}
}Use the exact key you supplied on the lead. For example:
- Lead field
industry- Template variable
{industry}
- Lead field
recentTrigger- Template variable
{recentTrigger}
- Lead field
accountTier- Template variable
{accountTier}
| Lead field | Template variable |
|---|---|
industry | {industry} |
recentTrigger | {recentTrigger} |
accountTier | {accountTier} |
Standard LinkedIn and sender variables remain available too, such as {linkedin_firstName}, {linkedin_company}, and {sender_firstName}.
Decide What to Do When Data Is Missing
Each variable used in a sequence can have a missing-data rule in variableResolution:
- Option
skipLead- Result
- Do not send this lead when the value is unavailable.
- Option
sendBlank- Result
- Send the message with an empty value in place of the variable.
- Option
fallbackValue- Result
- Use a specified replacement string.
| Option | Result |
|---|---|
skipLead | Do not send this lead when the value is unavailable. |
sendBlank | Send the message with an empty value in place of the variable. |
fallbackValue | Use a specified replacement string. |
For a custom field that is essential to the message, choose skipLead. When the message still makes sense without the field, use fallbackValue or sendBlank. If you do not specify a rule for a referenced variable, OutFlo defaults to skipping leads that do not have that value.
A Reliable MCP Workflow
- 1.Choose no-space field names, such as
industryorrecentTrigger. - 2.Create or update the campaign sequence with placeholders such as
{industry}. - 3.Set
variableResolutionfor any value that may be missing. - 4.Add leads with
outflo_add_lead_to_campaign, including the custom fields directly onlead. - 5.Verify one lead’s values before scaling the workflow.
The custom fields are lead-specific. That means the same campaign can render a different {recentTrigger}, {industry}, or other custom value for every lead you add through MCP.
