Campaigns

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.

crispy — bash

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

Write

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

Read

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

Write

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

Read

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

Write

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

Read

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

Write

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

Read

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

Caution

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

Write

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

Write

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

Caution

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

1

Sign up

Create your Crispy account. No credit card required for the first setup.

2

Connect LinkedIn

Link your LinkedIn account from the dashboard. Takes 30 seconds.

3

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 pricing

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

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