Run Outbound Creator Campaigns with the Roster MCP and API

10/30/2026·8 min read
Pixel art of a retro computer sending winged envelopes to creators standing on floating platforms
Outbound creator campaigns flip the usual model. Instead of posting a job and waiting for applications, you decide exactly which creators you want and email them first. Roster has an outreach engine built for this, and with the Roster MCP server and API you can run it from Claude or from your own code.

This guide covers what the engine does, how to connect it, and the full loop twice. First in plain English from Claude, then as API calls you can script.

What the Roster outreach engine does

Outreach on Roster runs as a sequence: one email, written once, sent to a list of creators with their details filled in. You do not need to publish a campaign first. Creators reply straight into your Roster inbox, and you take it from there.

Every sequence gives you:

  • Two ways to pick the audience. Either an explicit list of creators you chose, up to 500, or filters over the creator directory (niche, country, city, gender, follower range, engagement), up to 2,000 per sequence.
  • Personalization placeholders. {creator_name}, {creator_username}, {follower_count} and {brand_name} work in the subject and the body.
  • An optional A/B subject line. Half the recipients get each version, so you learn which subject gets opened.
  • An automatic follow-up. It goes out 3, 5 or 7 days later, only to creators who have not replied.
  • Paced sending. Spread sends 300 a day, immediate sends 1,000 a day starting now, or you can schedule a start date. Pacing keeps your sending pattern looking human and protects deliverability.
  • No double emails. Creators you have already contacted are skipped by default.

It is the same engine behind Find Creators, then Outreach in the brand portal. The MCP server and the API give you that engine without the clicking.

Before you start: get a brand API key

Everything below runs on a brand key. Create one in the brand portal under Settings, API & Integrations. Keys start with rsk_, are 44 characters long, and are shown exactly once, so put it straight into a password manager or secrets store.

Brand keys come with every Roster brand plan. Data keys, the read-only keys from the developer platform, can search the directory but cannot send outreach. If you call an outreach endpoint with one you get a 403 with the code BRAND_KEY_REQUIRED.

Option A: run outreach from Claude with the Roster MCP server

Connect the server

Roster hosts the MCP server over Streamable HTTP at https://api.ugcroster.com/v1/mcp, so there is nothing to install. In Claude Code, one command adds it:

bash
claude mcp add --transport http roster https://api.ugcroster.com/v1/mcp --header "Authorization: Bearer rsk_your_key_here"

In Claude Desktop, or any client that launches local servers, use the npm package:

json
{
  "mcpServers": {
    "roster": {
      "command": "npx",
      "args": ["-y", "ugcroster-mcp"],
      "env": { "ROSTER_API_KEY": "rsk_your_key_here" }
    }
  }
}

Our MCP setup walkthrough has screenshots of every step. Once connected, ask Claude which Roster tools it has. You should see preview_outreach_audience, launch_outreach_sequence, list_outreach_sequences and update_outreach_sequence alongside the creator search tools.

Pick the audience

You have two routes, and Claude handles both.

Route one: a hand-picked list. Best when fit matters more than volume. Ask Claude to search and shortlist, and it uses search_creators and get_creator to read profiles:

> Find skincare creators in the US with 10k to 150k followers, at least 3 percent engagement and a contact email. Open their profiles and keep the 60 whose recent posts are about skincare routines, not just product hauls.

Route two: a filter audience. Best for reaching a whole segment. Ask Claude to size it first:

> How many beauty creators in the United States or Canada with 10k to 50k followers could I reach? Spread speed.

Claude calls preview_outreach_audience and tells you how many creators match with an email on file, how many one sequence will reach, how many days it takes at 300 a day, and a few example creators. Nothing is created and nothing is sent at this stage.

Write the email

Ask for copy, then edit it like you would any cold email:

> Write the first email. Under 90 words, plain text, no bullet points. Open with {creator_name}, say in one sentence what we make, offer free product plus a flat fee per video, and ask if they want details. Add a B subject line to test, and a short follow-up after 5 days for anyone who does not reply.

Personal beats clever. The emails that get replies read like one person writing to another, with a clear offer and an easy yes.

Launch the sequence

When the copy and the audience look right:

> Launch it at spread speed to that audience.

Claude calls launch_outreach_sequence with your subject, the B subject, the body, the follow-up and the audience. For a filter audience it also passes the number from the preview. If the audience has grown well past that number since, Roster refuses the launch and asks you to preview again. A sequence can never email many more people than you agreed to.

Claude will show you exactly what is about to go out before it launches. These are real emails to real people, so read that summary.

Watch it and work the replies

The next morning:

> How are my outreach sequences doing? Then show me every unread reply, summarize each one, and draft answers for me to approve.

list_outreach_sequences returns sent, opened, replied and bounced counts for each sequence, and list_conversations brings up the replies. If a sequence underperforms, update_outreach_sequence pauses it while you rewrite, then resumes it. Cancelling is permanent, and the remaining recipients are never emailed.

Turn replies into content

The creators who say yes go straight into the rest of the workflow from the same chat:

> Add the five creators who said yes to my roster, send each one the night routine brief, and create a standard contract for each.

That runs add_to_roster, send_brief, create_contract and send_contract. Shipping is one more line. Once videos go live, track_content pulls in views, likes, comments and shares so you know who to book again. If you prefer creators to apply through a structured form, you can point interested repliers to a Roster campaign. It is optional, not a step you need before outreach.

Option B: run the same outreach with the REST API

The MCP server sits on top of the public REST API, so everything above can be scripted. The base URL is https://api.ugcroster.com/v1, and every request carries Authorization: Bearer rsk_....

Size a filter audience

bash
curl -X POST "https://api.ugcroster.com/v1/outreach/preview" \
  -H "Authorization: Bearer $ROSTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "category": "beauty", "countries": ["United States", "Canada"], "follower_min": 10000, "follower_max": 50000, "send_speed": "spread" }'

The response includes will_receive. Keep it, because the launch needs it.

Launch to the filter audience

bash
curl -X POST "https://api.ugcroster.com/v1/outreach" \
  -H "Authorization: Bearer $ROSTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Beauty creators, US and Canada",
    "category": "beauty",
    "countries": ["United States", "Canada"],
    "follower_min": 10000,
    "follower_max": 50000,
    "confirmed_audience_size": 1840,
    "subject": "Quick collab idea for {creator_username}",
    "subject_b": "{creator_name}, want to try our night routine kit?",
    "body": "Hi {creator_name},\n\nI run partnerships at {brand_name}. We make a three-step night routine for sensitive skin and I think your audience would love it. We send the full kit and pay a flat fee per video.\n\nWant the details?",
    "follow_up": { "delay_days": 5, "subject": "Re: quick collab idea", "body": "Hi {creator_name}, just bumping this in case it got buried. Happy to send the kit either way." },
    "send_speed": "spread"
  }'

Replace 1840 with the will_receive from your preview. The response returns the sequence id, the final recipient count, the daily cap and the estimated number of days.

Launch to a hand-picked list

To email the exact creators you chose, pass creators instead of filters. No preview is needed. Creators without a contact email on file are skipped and counted in skipped_no_email.

js
const API = "https://api.ugcroster.com/v1";
const headers = {
  Authorization: `Bearer ${process.env.ROSTER_API_KEY}`,
  "Content-Type": "application/json",
};

const search = await fetch(
  `${API}/creators/search?niche=skincare&country=US&follower_min=10000&follower_max=150000&engagement_min=0.03&has_email=true&sort=engagement&limit=100`,
  { headers },
).then((r) => r.json());

const shortlist = search.data.filter(isAGoodFit);

const res = await fetch(`${API}/outreach`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    name: "Skincare shortlist",
    creators: shortlist.map((c) => ({ username: c.username, full_name: c.full_name })),
    subject: "Loved your routine videos, {creator_name}",
    body: "Hi {creator_name}, ...",
    follow_up: { delay_days: 3, subject: "Re: your routine videos", body: "Hi {creator_name}, ..." },
    send_speed: "spread",
  }),
});
console.log(await res.json());


isAGoodFit is your own logic: a keyword check on bios, a minimum follower count, or a model reading each creator's recent posts. Note that engagement_min on the search endpoint is a ratio, so 0.03 means 3 percent engagement.

Track, pause and catch replies

GET /outreach lists your sequences with their counts and GET /outreach/{id} returns one. PATCH /outreach/{id} with an action of pause, resume or cancel controls it.

For replies, subscribe once instead of polling:

bash
curl -X POST "https://api.ugcroster.com/v1/webhooks" \
  -H "Authorization: Bearer $ROSTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://yourapp.com/roster-webhook", "events": ["message.received"] }'

Each delivery carries an X-Roster-Signature: sha256=... header, an HMAC SHA256 of the raw body signed with the secret returned when you subscribed. Verify it before trusting the payload. Store the secret right away, because it is only shown in full once. From there, POST /messages answers in the thread, and POST /roster, POST /briefs and POST /contracts take a yes all the way to a signed deal.

Mistakes that sink outbound

  • Skipping the preview. Always size a filter audience first. It catches filters that are far too broad or far too narrow before anyone gets an email.
  • Long emails. A cold email to a creator should fit on a phone screen without scrolling. One sentence on who you are, one on the offer, one easy question.
  • Placeholders that do all the personalizing. {creator_name} is table stakes. For a hand-picked list, add one line about the creator's own work.
  • Sending everything at once. Spread speed exists for a reason. Watch the first day of replies and pause to rewrite if the response is flat.
  • No follow-up. Plenty of replies come from the follow-up, so set one on every sequence.
  • Slow answers. The creators who reply first are your warmest. Use the message.received webhook or list_conversations and answer the same day.

Where to go next

New to the MCP server? Start with the step by step setup guide. For an agent that sources and briefs creators on its own, see how to build an AI agent that sources and briefs UGC creators. And for the directory side alone, the influencer database API guide covers search and profile reads in depth.

Every endpoint above, with full request and response shapes, is in the Roster API reference.

Stop pitching cold.
Start landing deals.

Automate your brand outreach so you spend less time in spreadsheets and more time creating.

Get started