create_campaign
Create a LinkedIn outreach campaign by describing your target audience. Finds matching prospects and saves a draft campaign for review, with nothing sent until you launch it.
Instructions
Create a LinkedIn outreach campaign from a natural language description.
Finds people on LinkedIn who match the description and saves a draft;
nothing is sent until campaign(action='launch'). Use it for sales
prospecting, recruiting and candidate sourcing, research and
user-interview recruitment, job-search networking, investor and partner
outreach, vendor scouting and event invitations.
Describe your ideal customers and HeyLead will find them on LinkedIn.
Supports lead generation, prospect discovery, SDR automation, cold outreach,
and targeted B2B sales campaigns with AI-powered ICP-based targeting.
On first campaign, project_brief is asked explicitly (what you are building,
go-live, volume, what a vendor must confirm) — a homepage alone is not enough.
Args:
target_description: Who to target (e.g., "CTOs at fintech startups",
"freelance UX designers in London", "yoga studio owners in California")
campaign_name: Optional name for the campaign.
icp_id: Optional ID of a saved ICP from generate_icp. If provided,
uses the saved ICP's enriched LinkedIn codes for precise targeting
instead of generating a new one.
company_context: Optional. Your website URL or 1-2 sentences about your
product/company. Copied into project_brief when project_brief is omitted.
project_brief: Optional. Full project paste the model sees: what you are
building, go-live, volume, what a vendor must confirm. Required before
launch, resume, or auto-send.
mode: Always autopilot. Copilot mode removed.
company_url: Optional LinkedIn company URL for account-based targeting.
Searches for employees at that specific company matching the ICP.
Example: "https://www.linkedin.com/company/google"
voice_mode: Voice memo mode for follow-ups and replies. "text_only"
(default), "mixed" (alternates text and voice), "voice_only", or "ab_test".
connections_only: "on" to create a DM-only campaign targeting existing
LinkedIn connections. Skips invitations and warm-up — sends DMs
directly to people you're already connected with. Use when user says
"existing connections", "DM my network", "message my connections".
exclude_connections: ON BY DEFAULT for a new campaign: nobody who was
already a 1st-degree connection before this campaign started is
reached — refused at enrolment and skipped at send time rather than
DMed. People who accept this campaign's own invitation still get
the opener. Pass "off" to include existing connections (or turn it
off later in the campaign settings). Defaults off only for a
connections_only campaign. Use "off" when the user says
"include my existing connections"; the old "on" is still accepted
for "don't message my existing connections", "cold only",
"skip people I already know". Cannot be combined with
connections_only, which is its exact inverse.
campaign_type: Prompt family: "outbound" (default) or "job_search".
job_search writes a job-search campaign: the invitation note and
the first DM may name the recipient's company and the role, use
one credible proof point at most and never list a CV. InMail is
not routed by this switch. Pair with connections_only="on" to
write to people the sender is already connected to.
force: True to create the campaign even when the goal <-> ICP audit
returns `mismatch` (the ICP holds no plausible buyer for the goal).
Leave False; a `partial` verdict never blocks, it only warns.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | autopilot | |
| force | No | ||
| icp_id | No | ||
| voice_mode | No | text_only | |
| company_url | No | ||
| campaign_name | No | ||
| campaign_type | No | ||
| project_brief | No | ||
| company_context | No | ||
| connections_only | No | ||
| target_description | Yes | ||
| exclude_connections | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |