Acquisition
Trace confirmed campaign sends to signups, activations, paid customers, and revenue.
Acquisition answers the question reply rates cannot: which campaigns, steps, copy, mailboxes, and audiences turn into customers. It joins what your campaigns sent with what people did in your product afterwards.
It is available on every plan. Open it from Acquisition in the top navigation; it needs the View analytics permission, and the Prospects tab and the Identities view also need View contacts. Its revenue overview is the dashboard's Home page, and Acquisition itself opens on Outbound. It has five tabs: Outbound, Copy, Prospects, Customers (attribution), and Tracking, which holds the Goals, Events, and Identities views your product's instrumentation feeds. The per-mailbox scorecard that used to be the Infrastructure tab is on Mailboxes, and old links to the Analytics page or the Infrastructure tab open those pages.
The quickest way to set up tracking is the Get started checklist, which can hand the work to your coding agent.
Send product events
Your app reports what people do with product events. Until the first one arrives, the overview on Home, the Events view, and the tracking step of Get started show Connect your product. Set up with Claude Code copies a prompt for Claude Code: it inspects your app, finds the signup, activation, and billing flows, sends each as an event, checks them with the dry run below, and creates the primary goals, showing you the changes before it commits anything. Set up manually links the API reference, the SDKs, and how to forward billing webhooks, such as Stripe's, from your server.
Send events from your server with an API key that has WRITE_EVENTS:
curl -X POST https://api.sendsetsapi.com/v1/events \
-H "Authorization: Bearer $SENDSETS_KEY" \
-H "Idempotency-Key: signup-usr_812" \
-H "Content-Type: application/json" \
-d '{"name":"account.created","identity":{"user_id":"usr_812","email":"jane@acme.com"},"data":{"plan":"pro"}}'Use the identity object rather than email when the person might not be a contact yet. An identity event is always stored: it joins the contact with that email if there is one, and otherwise waits as a person without a contact until one appears or your app links them. No contact is ever created from an event.
POST /events/test takes the same body and stores nothing. It shows how the event would resolve and which goals it would match, which makes it the quickest way to check instrumentation. The Events view under Tracking lists every event name the workspace has received, its properties, and its daily or weekly volume.
Define goals
A goal turns one event into a funnel stage: Signup, Activation, Paid, Revenue, or Retention, or a Custom outcome that never appears in headline numbers. Create them under Tracking > Goals. A goal can:
- require properties of the event, such as
planis one ofpro, team - read a value, such as
amountin cents withcurrency, for revenue
Each stage has one primary goal, and headline numbers read only primary goals, so two goals that match the same signups never count them twice. The editor previews the rule against the last 30 days before you save.
Goals apply to events received after you save them. Editing a goal's rule creates a new revision for events from then on, so last month's report does not shift under you. To apply a goal to the past, open its menu and choose Replay past events: the preview shows how many conversions would be added and removed, and nothing changes until you start it. Raw events are kept for the engagement-event retention window, so a replay can reach back that far; conversions themselves are kept after their events are pruned.
Read the overview
The overview on Home follows every confirmed send in the range (the last 7, 30, or 90 days) for an observation window, 30 days by default. The headline row reads as a funnel:
- Sends and Prospects, the people those emails reached
- Replies: anyone who answered, autoresponders and out-of-office replies included
- Human replies: replies a person wrote; autoresponders are left out
- Positive reply from reply classification on the campaign
- Signed up, Activated, and Paid from each stage's primary goal
- Revenue from the primary revenue goal, per currency
Each stage shows the number of people and, under it, the conversion rate: that number as a share of Prospects. Sends shows how many are closed, meaning their observation window has ended. A young cohort can still grow, so read a low rate on mostly open sends as early, not final. Only sends a worker confirmed count; a failed or unconfirmed send never does. Hover or tap the ⓘ beside any figure for what it counts.
The comparison table below keeps rates per 10,000 sends (Users / 10k, Revenue / 10k) for comparing groups of different sizes. Those use only sends whose window has closed, so a campaign that sent yesterday does not drag its rate down before people have had time to convert.
When the campaign with the best reply rate is not the one that made the most revenue, a note above the chart says so and names both. It compares campaigns with at least 200 sends past the window, in the first currency.
Performance over time plots replies, signups, and payments by day, with emails sent on a separate strip below because sends are usually two orders of magnitude higher. Signups and payments appear once their primary goals exist.
The note under the breakdown also counts how many people signed up for the first time inside the range, whenever they were emailed.
These are cohort numbers, not attribution. Someone emailed by two campaigns who then signs up counts in both campaigns' rows.
Outbound and copy
These two tabs read the raw send ledger, one row per email step sent, rather than a pre-aggregated total, so any number can be cut by campaign, mailbox, step, variant, timing, or copy. A reply, bounce, or meeting counts against the send it answered, and the range picks which sends to include. They need no product events and work from the first send.
Outbound is the headline view. The two strips show sent, prospects, replies, human replies (out-of-office and other autoresponders left out), positive replies, meetings, bounces, and unsubscribes, then the reply, human, positive, and bounce rates, lead to email (emails sent per positive prospect, shown as 1 : 169), emails per prospect, average reply time, and the average gap between follow-ups. Each number is compared with the same-length period before it. The chart switches between Volume and Rates, each series toggles on and off, Normalize scales every series to its own peak so their shapes compare, and Exclude weekends drops Saturdays and Sundays (UTC). Outcomes sit on the day their email was sent, so the last few days fill in as replies arrive. Below it, break the range down by campaign, mailbox, step, variant, weekday, or hour. Clicking a campaign drills into its steps; clicking a mailbox filters the whole tab to it.
Copy breaks results down by how the email was written, with no tagging on your part. Each template is tagged as written, merge fields unrendered:
| Dimension | Buckets |
|---|---|
| Subject line type | In-thread reply, question, personalized (first name or company), variable (other merge fields or spintax), curiosity gap, direct |
| Subject line | Each subject template |
| Subject length | 1 to 3, 4 to 6, 7 to 9, or 10+ words |
| Personalization | Merge fields across subject and body, the unsubscribe link left out |
| Body length | Under 50, 50 to 99, 100 to 149, or 150+ words |
| Close style | Booking link, closing question, other link, or statement |
| Offer, angle, call to action | The labels on the A/B variant that was sent |
A subject gets one type, checked in the order listed.
Each of these tabs has an Ask Claude button. It copies a question for that screen, such as "which mailboxes had the worst bounce rate this week", with instructions for Claude to answer it from your live data through the SQL tools, so you can go past what the tab shows. The same breakdowns are in the API and in the outbound_metrics, outbound_breakdown, and mailbox_scorecard agent tools, so an agent connected over MCP can answer "which mailbox bounced most this week" from the same numbers.
Attribute customer acquisition
The Customers tab credits the last confirmed campaign send at or before a customer's first primary signup conversion, within the workspace's attribution window (30 days by default). If no signup goal is primary, the first primary paid conversion is used instead. Attribution uses the event's occurrence time, including events received late. Failed and unconfirmed sends never receive credit.
The acquisition is saved with the send's variant, copy dimensions, mailbox, and original audience. Later campaigns and elapsed time do not move it. Future revenue conversions inherit the original acquisition, so Lifetime attributed revenue includes revenue outside the selected acquisition date range. Currency totals remain separate. Earlier acquisition events received late can correct the original acquisition moment; human corrections are preserved.
Identity matching and engagement are different evidence. An exact contact ID, email match, linked identity, or verified website visitor can connect the converting person to the emailed contact. A reply, open, or click is not required for credit. Historical matches and variant dimensions stay unknown when evidence is no longer available.
Company estimates are enabled by default and shown separately. They credit an emailed colleague in a shared customer account, or on a matching corporate domain, within the window. Consumer and shared email domains do not support domain estimates. Estimated customers and revenue are never added to exact attribution totals.
Use Attribution settings to set the window from 1 to 365 days or turn company estimates off. Changes keep already credited acquisitions and re-evaluate automatic unattributed customers. Settings changes need Manage settings.
Click an acquired customer to see the credited send, identity match, observed engagement, lifetime revenue, per-conversion touches, and correction history. Customer details need View contacts as well as View analytics. The same explanation appears in a contact's Journey tab. Conversion touches explain the send preceding an individual conversion without changing the original acquisition.
Members with Manage settings can choose Correct attribution, credit another confirmed send to the same person at or before acquisition, or mark the person as not acquired by outbound. A reason is required and saved in the audit history. Corrections can credit a send outside the automatic window. Future revenue follows the corrected acquisition. Restore automatic recomputes from current evidence. New evidence and corrections update reports live; queued attribution is marked as pending.
Compare what works
Where should your next 10k emails go? breaks the overview down by campaign, sequence step, variant, mailbox, offer, angle, call to action, or the audience a contact came from (source, segment, category), ranked by revenue. Each row shows sends, reply rate, signups, paid users, revenue, users per 10,000 sends, and revenue per 10,000 sends. Click a campaign row to compare its variants. Sends from before variants were recorded show as unknown rather than guessed.
Cost per signup appears only for campaigns where you entered spend. Use the coin button on a campaign row to set the total spent on it; cost per signup divides that by the campaign's signups within the window after any of its sends.
Find prospects by stage
The Prospects tab lists everyone enrolled in a campaign with how far they got. Filter to interested, signed up, activated, or paid prospects, to silent conversions (people who converted without ever replying), or to a drop-off such as interested but not signed up. Clicking a prospect opens their contact on the Journey tab: enrollments, confirmed sends with variant and mailbox, replies, Reply Agent drafts, product events, and conversions, each conversion with the last confirmed send before it.
Funnels
The funnel at the bottom of the Events view counts unique people through ordered steps: confirmed sends, positive replies, product events, and goal conversions. Each step must follow the previous one within the window, and the largest drop-off is highlighted.
Identities
People are matched by email to contacts, and otherwise by the user ids and anonymous ids your app sends. When one identifier points at two different people, SendSets does not guess: the event goes to the stronger match and the pair appears under Identities for review. Merge folds one person into the other with their events and conversions; Keep separate closes the conflict. Two people linked to different contacts cannot be merged.
Linking identities from your app with POST /identities/link right after signup or login merges pre-signup history into the account automatically, as long as it does not join two contacts or two user ids. Customer accounts group people without ever merging them.
Deleting a contact erases their person, events, and conversions. People without a contact can be deleted from the Identities view.
Agents
Everything here is available to agents through the tool registry, over MCP and A2A: event schema and dry runs, goals, prospects, timelines, breakdowns, trends, funnels, outbound metrics, copy breakdowns, and the mailbox scorecard.
Moving a workspace
Goals, people, accounts, conversions, attribution settings, saved acquisitions, credits, conversion touches, and correction history travel in the Acquisition group of a workspace export. Campaign spend travels with campaigns. Attribution work queues are instance-local and rebuilt after import.
