ReplySparrow Docs

A full outbound play from one prompt

Create a list, a source agent for your ideal customer, and a campaign, then activate it.

Why

A full outbound play is three pieces linked by one list: a source agent finds leads that match your ideal customer and adds them to the list, and a campaign reaches out to everyone on that list. Set it up once and it keeps sourcing and contacting new leads every day. See Core concepts for how the pieces fit together.

With the MCP server, one prompt builds it:

"Create a source agent that finds Heads of Sales at French SaaS companies of 51 to 200 people who engage with our competitor's posts, with a LinkedIn campaign from my seat. Show me everything before you activate it."

The assistant chains sender_accounts_list (to find your LinkedIn seat), agent_create (the agent, its signal sources, and a ready-made campaign, created as a draft), and agent_update with status: "active" once you approve. The MCP agent tools don't take a list; when you want to choose the list and write the sequence yourself, use the API calls below.

Send Authorization: Bearer YOUR_API_KEY. The base URL is https://app.replysparrow.com/api/v1. The key needs the campaigns:write and campaigns:read scopes, plus account:read to list email seats and contacts:read to read the leads.

1. Create the list

POST /lists creates the list that links the agent and the campaign.

MCP tool: list_create

curl --request POST \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "name": "Heads of Sales FR" }' \
  "https://app.replysparrow.com/api/v1/lists"

The response (201) is the list. Keep its id, here 9f8e7d6c-0000-4000-8000-000000000002.

2. Create the source agent

POST /agents describes your ideal customer and the signals that make a lead worth contacting now. list_id is the list from the previous step; without it, the agent gets a new list of its own.

MCP tool: agent_create, and agent_source_add to add signal sources.

curl --request POST \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "Heads of Sales FR",
    "list_id": "9f8e7d6c-0000-4000-8000-000000000002",
    "target_job_titles": ["Head of Sales", "VP Sales"],
    "target_industries": ["Software Development"],
    "target_company_sizes": ["51-200"],
    "target_locations": ["France"],
    "target_company_types": ["Private Company", "Startup"],
    "exclude_service_providers": true,
    "min_lead_score": 70,
    "signals": [
      { "type": "competitor_engagement", "values": ["https://www.linkedin.com/company/globex/"] },
      { "type": "keyword_engagement", "values": ["sales pipeline"] },
      { "type": "tech_stack", "values": ["hubspot"] },
      { "type": "job_change" }
    ]
  }' \
  "https://app.replysparrow.com/api/v1/agents"

signals are where the agent looks for leads. The values format depends on the type: LinkedIn company pages for competitor_engagement, topics for keyword_engagement, technologies for tech_stack, list ids for existing_list, and none for job_change or top_active. The full table is on Create a source agent. An agent without signals is accepted but has nothing to run.

Each lead is scored from 0 to 100, and only the ones at or above min_lead_score (default 60) are imported into the list. Lead finding is included in your plan.

The response (201) is the agent. Keep its id, here 5b0f3c2e-8a8e-4bd1-9a51-6f1f3c0f2a10. It starts finding leads right away, unless you send "paused": true. Outreach stays off until the next steps.

3. Find your LinkedIn seat

LinkedIn steps are sent from a connected LinkedIn seat. The API has no LinkedIn seat listing yet: GET /campaigns returns your campaigns, and linkedin_account_id on any of them is the id to reuse. For email steps, GET /email_seats lists your mailboxes; a seat's id is the email_account_id.

MCP tool: sender_accounts_list, for both LinkedIn and email.

curl --header "Authorization: Bearer YOUR_API_KEY" \
  "https://app.replysparrow.com/api/v1/campaigns"

4. Create the campaign

POST /campaigns defines the outreach. list_ids holds the list from the first step. A new campaign starts inactive, so you can review it before anything is sent.

MCP tool: agent_create with create_default_campaign, as in the prompt above; workflow_add_step edits the sequence.

curl --request POST \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "Heads of Sales FR",
    "channel": "linkedin",
    "list_ids": ["9f8e7d6c-0000-4000-8000-000000000002"],
    "linkedin_account_id": "acc_123",
    "tone": "conversational",
    "steps": [
      { "type": "connect", "connect_note": "Hi {{first_name}}, happy to connect." },
      { "type": "message", "delay_days": 2 },
      { "type": "message", "delay_days": 4 }
    ]
  }' \
  "https://app.replysparrow.com/api/v1/campaigns"

Steps run in order. delay_days on a step adds a wait before it, or use a separate delay step. With "ai": true, the default, the agent writes each step for each contact, with your text as the fallback; "ai": false sends your message as written, with variables such as {{first_name}}, {{company}}, and {{key|fallback}} filled. A connect_note holds up to 300 characters. Without steps, the campaign gets the default sequence for its channel. 1st-degree connections are excluded unless you send "exclude_first_degree": false.

The response (201) is the campaign. Keep its id, here 5b0c6c1e-8a43-4f7e-9d7d-1f8a2b3c4d5e.

In ReplySparrow, a source agent and its campaign are the same agent with the same id. Instead of creating a separate campaign, you can give the agent from step 2 its sequence and sender with PATCH /campaigns/{id}, using the agent's id, then activate it.

5. Activate it

PATCH /campaigns/{id}/status starts the daily outreach. Activating needs a sequence and a LinkedIn or email sender. Sending happens within the senders' daily limits and working hours.

MCP tool: agent_update with status: "active", which starts lead finding and outreach. The assistant asks you to confirm first, since this sends real messages.

curl --request PATCH \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "active": true }' \
  "https://app.replysparrow.com/api/v1/campaigns/5b0c6c1e-8a43-4f7e-9d7d-1f8a2b3c4d5e/status"

A 400 with sequence_required or sender_required says what is missing. Sending { "active": false } later stops new steps; messages and invitations already sent are not retracted, and lead finding is not affected.

6. Follow the results

  • GET /agents/{id}/logs shows what the source agent did: leads found and leads imported per signal run (MCP agent_get).
  • GET /contacts?list_id=9f8e7d6c-0000-4000-8000-000000000002 lists the leads it added (MCP leads_list).
  • GET /campaigns/{id}/logs shows invitations, messages, and replies (MCP workflow_analytics for the funnel).
  • GET /campaigns/{id}/queue previews the next actions, without sending anything.

Replies land in the LinkedIn inbox: see Sync my LinkedIn Inbox.

Every field is listed on Create a list, Create a source agent, Create a campaign, and Activate or deactivate a campaign.

On this page