Campaigns That Run Themselves
Describe who you want to reach and what you want to say. Crispy builds the sequence, sends within safe limits, tests message variants, and pauses the moment someone replies so a human can take over. The follow-up that used to eat your week now runs itself.
Create an acquisition campaign called Q2 Outreach sourced from my fintech-vps list
{
"campaign_id": "q2-outreach",
"name": "Q2 Outreach",
"kind": "acquisition",
"created": true
}Show me a launch preview of my gtm-engineers-apr26 campaign with 15 sample messages
{
"sample_messages": [
{
"contact": "Maya Lindqvist",
"message": "Hi Maya, loved your recent post on GTM tooling. Would be great to connect."
}
],
"list_summary": { "total": 240, "eligible": 231 },
"blacklist_hits": 2,
"duplicate_hits": 7
}Launch the gtm-engineers-apr26 campaign now that the preview looks good
{
"campaign_id": "gtm-engineers-apr26",
"enabled": true,
"status": "active"
}12 Tools for Campaigns
Each tool is available as an MCP tool for AI agents or as a REST API endpoint.
Create or Update Campaign
Creates a new campaign or updates an existing one in a single call. Omit campaign_id to create (requires name, kind, and either a list_id or inline contacts) or provide it to update. Choose acquisition for invite-based outreach to new first-degrees or relationship for DM-only outreach to existing connections, with a URL-safe slug auto-derived from the name.
upsert_campaign
Preview Campaign Launch
Renders a read-only launch preview for a campaign before any message goes out. Returns up to 10 personalized first-touch messages (configurable up to 50), a summary of the prospect list, blacklist hits, and duplicate hits. Use it to sanity-check personalization and audience quality before confirming a launch.
preview_campaign_launch
Confirm Campaign Launch
Confirms and enables a campaign by flipping enabled to true, after which the daily cron sends with no further preview gates. The action is idempotent, so re-running it on an already-enabled campaign has no effect. Returns NOT_LINKED if the campaign is not bound to your account.
confirm_campaign_launch
Get Campaign Details
Fetches campaign data for one campaign or lists all of them. Omit campaign_id to list every campaign in your workspace, or pass one with include[] to load the health funnel, action stats, account health, and outreach config in parallel. Returns metadata only by default and supports forced recompute of included slices.
get_campaign
Manage A/B Variants
Manages A/B variants for a specific campaign step. Use action='list' to see variants, 'add' to create a new arm (label plus message_template, with limits split evenly), or 'remove' to retire an arm so enrolled leads fall back to the base template. Target the pre-send sequence or the post-acceptance follow-up step array. Fails if the campaign or step is not found.
manage_variants
Get Campaign Variant Stats
Returns per-variant statistics for a campaign, broken down by step and arm, including sent, accepted, replied, positive_replied, and positive_reply_rate. A positive reply is counted when a contact carries an auto:interested or auto:wants_meeting tag, giving you a clear read on which message variants actually convert. Returns empty when nothing is enrolled in the campaign.
get_variant_stats
Apply Sequence Template
Applies a built-in sequence template to a campaign, copying its follow_up steps as-is into the campaign's follow_up_sequence. The template's follow-ups carry no daily limit and write to the follow-up sequence rather than the main sequence. Fails if the template_name or campaign_id is invalid.
apply_sequence_template
List Sequence Templates
Lists the built-in sequence templates available to apply to a campaign. Each entry returns its name, description, and step count so you can pick a proven outreach structure quickly. Returns an empty array if no templates are found.
list_sequence_templates
Manage Campaign Senders
Manages the pool of sender accounts on a campaign. Use action='list' to see configured senders, 'add' to bring a sender into the round-robin pool (daily limits split evenly across senders), or 'remove' to hard-delete a sender (contacts are reassigned at the next cron, not immediately). Fails if the campaign is not found, the sender is already added, or the sender to remove is not found.
manage_senders
Manage Campaign Outreach
Configures or controls a campaign's outreach engine. With action='setup' you write the ordered steps (warmup actions, the auto-firing invite, then follow-up messages), daily_invites, invite_message, and list_id, while pause and resume toggle sending. Omit steps to preserve existing ones, pass [] to clear them, and note that text DM follow-ups use type='message'.
manage_outreach
Set Enrollment Policy
Update the safeguards that decide which contacts are eligible to enter your outreach campaigns. Set account-wide defaults by omitting campaign_id, or apply a per-campaign override using a tristate of 'skip', 'allow', or null (inherit the default). Toggles cover pending invitations, unsubscribes, blocklist membership, recently messaged contacts, same-sender or cross-sender touches, other active acquisition campaigns, and already-connected profiles. Omit any field to leave it unchanged.
set_enrollment_policy
Archive Campaign
Archives a campaign so it stops accepting new actions while keeping all historical data intact. Use it to wind down outreach without losing reporting, since archiving is fully reversible. Fails with not found if the campaign_id does not exist.
archive_campaign
Use Cases
Here's how teams use Crispy's campaigns tools in their day-to-day workflows.
Launch a full sequence from one prompt
Connection request, follow-up after they accept, then a soft meeting ask, built and scheduled in one go. Preview it before it sends, then confirm.
Example prompt
“Build a 3-step campaign for CTOs at fintech startups in London: connect with a note, follow up after they accept, then ask for a quick call”
Let it follow up so you don't have to
Every step fires on its own schedule within safe limits. The moment a prospect replies, the sequence pauses and the thread lands in your inbox for a human reply.
Example prompt
“Launch the campaign, but pause anyone who replies and label their thread as 'Hot lead'”
Test what actually converts
Run A/B/C/D variants of your opener and let Crispy track which one books the most replies. Promote the winner without rewriting the campaign.
Example prompt
“Set up three variants of the opening message and show me which one is getting the best reply rate”
Run outreach across multiple senders
Spread a campaign across several connected accounts, each with its own safe limits, so you reach more people without putting any one profile at risk.
Example prompt
“Split this campaign across my two connected profiles and keep each one inside its daily limits”
Get started in 3 steps
Sign up
Create your Crispy account. No credit card required for the first setup.
Connect LinkedIn
Link your LinkedIn account from the dashboard. Takes 30 seconds.
Start using
Add Crispy to Claude, Cursor, or any MCP client, or call the REST API directly.
$49/seat/mo. Everything included.
No API call limits. Every tool included. Cancel anytime.
View pricingFrequently Asked Questions
Will a campaign keep messaging someone after they reply?
No. Reply-pause is built in. The moment a prospect responds, that person drops out of the sequence and their thread surfaces in your inbox so a human picks it up. No awkward 'just following up' after they already answered.
How do you keep my account safe while sending?
Every campaign respects your daily limits and warm-up settings. Crispy paces sends across the day instead of bursting them, so activity looks natural and stays within LinkedIn's thresholds.
Can I preview a campaign before it sends?
Yes. Preview the full launch, who gets enrolled, what each step says, and when it fires, then confirm. Nothing goes out until you approve it.
How does A/B testing work?
Add variants of any message step and Crispy tracks reply and acceptance rates per variant. Ask which is winning and promote it, all from your AI chat.
Can I run campaigns for multiple clients or accounts?
Yes. Assign senders per campaign and keep each account's enrollment, limits, and history isolated. Agencies run every client's outreach from one place without credentials chaos.
Related Reading
How to automate LinkedIn outreach with AI agents
A step-by-step guide to building AI-powered LinkedIn outreach workflows using MCP - from prospect search to personalized messages.
ReadThe complete guide to LinkedIn MCP servers
What Model Context Protocol is, why it matters for LinkedIn automation, and how to set up Crispy as your LinkedIn MCP server in minutes.
ReadThe complete LinkedIn API. Ready when you are.
Connect your first LinkedIn profile in under 5 minutes. Every tool, every seat, no feature gates. Safe limits, warm-up, and full permission control built in.