Skip to content
AgentSDR
Live demo

Open source · self-hosted

Reach, reply and close from single workspace

AgentSDR runs your email sequences, LinkedIn campaigns and WhatsApp calls, and an AI CRM that reads every reply and drafts the answer. On your server, with your own model key.

The real app with sample data. No sign-up.

agentsdr.your-company.com/outreach/campaigns

Channels

Every channel, one workspace

Email, LinkedIn and WhatsApp run side by side, and every reply lands in one AI CRM. Pick a channel, or one of its capabilities, to see it work.

Sequences from your own Google Workspace mailboxes.

Emails sent

2,999

11.5% improved versus the previous period

vs 2,690 previous period

Leads contacted

1,545

10.2% improved versus the previous period

vs 1,402 previous period

Replied

118

21.6% improved versus the previous period

of 1,545 contacted

Reply rate

7.6%

10.4% improved versus the previous period

vs 6.9% previous period

Bounced

21

38.2% improved versus the previous period

vs 34 previous period

Unsubscribed

9

25% improved versus the previous period

vs 12 previous period

Sending activity

Emails sent each day: first touches and follow-ups.

  • First touch

    1,545
  • Follow-ups

    1,454

Mailbox capacity today

Right now, regardless of the date range.

Sent today

72%

108 of 150 sent today

5 connected
0 failing
Manage mailboxes

Replies

Inbound email replies each day.

  • Replies

    126
    21.6% improved versus the previous period

Not tracked

Opens and clicks aren't recorded, so there are no open or click rates here. Reply rate is the engagement metric to watch.

Campaigns

Sends are for this period; leads, replies and bounces are all time. Sorted by sends.

Email campaigns
CampaignLeadsContactedSentRepliedReply rateBounced
1,240812
1,388
46
5.7%
7
860544
902
31
5.7%
5
420402
611
22
5.5%
4
310196
244
12
6.1%
3
180180
118
7
3.9%
2

Day to day

What a day of outreach looks like

Mailboxes pacing themselves, LinkedIn accounts inside their limits, calls recorded as they happen, and every reply answered before you open the inbox.

Sending todayMon–Fri · 09:00–18:00

Sent today

72%

108 of 150 across 5 mailboxes

Within limit

Near limit

Within limit

Sequences that respect your mailboxes

Multi-step email from your own Google Workspace mailboxes: any CSV column as a {{merge field}}, spin text, a daily cap and sending window per mailbox, one-click unsubscribe and automatic bounce suppression.

Invites → repliesLast 4 weeks
  1. Invited
    1,784
  2. Accepted
    32.3%577
  3. Replied
    31.2%180
3 accounts sending · 78 of 90 invites today

LinkedIn, within the limits

Campaigns across several accounts through Unipile: an invite, an accept message and three follow-ups. 30 invites a day on premium, 5 on free, with a randomised gap between each.

Aiko Tanaka · Kestrel Health Recording · 04:12
TranscriptTranscribed
Rep0:08
Is now still a good time? Two minutes on how you handle follow-ups.
Lead0:15
Sure — honestly, most of ours never get sent.
Connected
Transcript ready

WhatsApp calls, recorded and transcribed

Dial from AgentSDR: a Chrome extension places the call inside WhatsApp Web, records both sides, and your own model writes the transcript. Messages sync too, with a warm-up for new numbers.

Hannah Weiss· 14m

Could you do Thursday afternoon? I'll bring our ops lead.

Meeting RequestedAI draft
AI draftFrom your knowledge base · Scheduling

Thursday works — I've held 3:00pm CET and sent the invite. I'll bring the reply-rate numbers from teams your size.

Held for review
AI suggests Demo Requested

Every reply read, every answer drafted

The CRM classifies each reply — interested, customer, not interested, other — and drafts the answer from your knowledge base. It only moves a lead forward on its own; anything else waits for you.

Data & AI

Built on data you own

One database of people and companies feeds every channel, and every AI step runs on your own model key.

People · 4,812 leads-q4.xlsx
NameJob titleSource
Hannah WeissLumen FreightHead of GrowthCSV import
Rafael CostaBrightloopVP SalesLinkedIn search
Aiko TanakaKestrel HealthGrowth LeadTable
Samir HaddadParcellyCOOCSV import
Add a column — text, number, date, select…

One lead database for every channel

People and companies shared by every channel. Import CSV or XLSX, add your own columns; duplicates match on email or LinkedIn.

Company Employees AI · Pitch angle
Lumen Freight51–200Hiring 2 SDRs — onboarding cost
Brightloop11–50New VP Sales, rebuilding outbound
Kestrel Health201–500Writing…
Parcelly…Queued
Atelier NordQueuedQueued
3 of 5 enriched
Create campaign from table

Enrichment tables with AI columns

Columns that call an API, run a formula, ask your model or pull from Apollo — then become a campaign.

  • Bring your own model

    Every AI call runs on your OpenRouter key, pinned to the provider you chose — no silent fallbacks.

  • Your data stays yours

    Leads, conversations and call recordings live in your Postgres and your own storage bucket.

  • Guardrails on every channel

    Daily caps, sending windows, warm-up for new numbers, and Do Not Contact honoured everywhere.

  • Drafts, not auto-sends

    The AI proposes and a person approves. Low-confidence classifications wait for review.

  • Grounded in what you know

    Drafts draw on your knowledge base: pricing, FAQs, case studies and objections.

  • Keyboard-first

    ⌘K jumps anywhere; J and K move through an inbox, Enter opens.

Self-host

Run it yourself

Free and open source. No seats and no per-contact fees — you pay for your server and your own AI usage.

# 1 · Clone$ git clone https://github.com/Kandid-ai/AgentSDR.git && cd AgentSDR# 2 · Configure$ cp .env.example .env  POSTGRES_PASSWORD=…   BETTER_AUTH_SECRET=…  BETTER_AUTH_URL=…   INTEGRATION_CREDENTIALS_KEY=…# each secret: openssl rand -hex 32# 3 · Postgres, schema, app and scheduler$ docker compose up -d✓ Ready — http://localhost:3000
StackNext.js 16React 19TypeScriptPostgresDrizzleTailwind 4BunDocker

What you connect

Your own accounts, so the data and the sending reputation stay yours.

  • Google WorkspaceMailboxes for email sequences
  • UnipileLinkedIn and WhatsApp accounts
  • OpenRouterYour model key, for every AI step
  • Cloudflare R2Storage for call recordings
  • Lead enrichment integrationsoptionalEmails, phones and company data for Tables+6

F.A.Q

Questions & answers

Is AgentSDR really free?

Yes. It is open source and you host it yourself, so there are no seats, tiers or per-contact fees. What you pay for is your server, the accounts you connect (Google Workspace, Unipile) and your own AI usage on OpenRouter.

Which email providers can it send from?

Google Workspace mailboxes, connected through a service account with domain-wide delegation. Each mailbox has its own daily limit (30 by default), sending window and signature, and several campaigns can share the same pool. Other providers aren't supported yet.

Will LinkedIn automation get my account restricted?

No tool can promise that, but AgentSDR stays well inside LinkedIn's limits: 30 invites a day on premium accounts and 5 on free, a random 30–60 second gap between invites, sending only inside each account's working hours, and an account that hits LinkedIn's own limit pauses for the day.

How does WhatsApp calling work?

You link your number through Unipile and install the AgentSDR Call Recorder Chrome extension. When you call a lead from AgentSDR, the extension dials inside WhatsApp Web and records both sides; the recording goes to your storage bucket and your chosen model transcribes it. It relies on WhatsApp Web's English interface.

Which AI models can I use?

Any model on OpenRouter, with your own key. Each call is pinned to the provider you picked, with fallbacks turned off, so your data only goes where you chose. Classification, reply drafts, transcription and AI table columns all run this way.

Does the AI send replies on its own?

No. Drafts wait in Action required until someone sends them, as written or edited. The AI can move a lead forward in the pipeline when it is confident; a backward move, a low-confidence call, and every new Customer are held for a person.

Where does my data live?

In the Postgres database you run, and call recordings in your own Cloudflare R2 bucket, reached only through short-lived signed links. Provider keys are encrypted at rest with AES-256-GCM. There is no hosted AgentSDR service in the middle.

Can my whole team use it?

Yes. Everyone signs in with their own account, and you invite teammates into your organization as owners, admins or members. One deployment can also hold several organizations, each with its own leads, inboxes and connected accounts, fully separate from the others.

What do I need to deploy it?

A machine that runs Docker, and PostgreSQL 16 or newer (the Compose file brings its own). Copy the example environment file, set the database URL, an auth secret and an encryption key, then connect each channel from inside the app. Start with the quick start on GitHub.

Can I change how it works?

That's the point of owning the code. It is a TypeScript Next.js app on Postgres, so adding a column type, an enrichment provider or your own channel is ordinary application work — and issues and pull requests are welcome on GitHub.

More questions? open an issue or read the code

Get started

Own your outbound
from day one

Clone the repo, point it at Postgres, connect the channels you sell on. Your leads, your conversations and your model key never leave your infrastructure.

agentsdr.your-company.com/analytics

Analytics

How conversations turn into meetings and customers, and which channels bring them in.

Last 4 weeks

Replies

512

17.2% improved versus the previous period

from 386 people

Positive

104

25.3% improved versus the previous period

27% of people who replied

Meetings

37

27.6% improved versus the previous period

vs 29 previous period

Customers

6

50% improved versus the previous period

vs 4 previous period

Median first response

38m

46.5% improved versus the previous period

vs 1h 11m previous period

Replies by sentiment

Inbound replies each day, by the category they were classified into.

  • Interested

    132
  • Customer

    12
  • Not interested

    95
  • Other

    80
  • Unclassified

    4

Needs attention

Right now, regardless of the date range.

Pipeline now

Open records by category, right now, and how far along the funnel they are.

  • Interested10350%
  • Customer94.3%
  • Not interested6431%
  • Other2713%
  • Unclassified52.4%

Funnel stages · darker as they advance

  • Information Requested · Interested41
  • Demo Requested · Interested18
  • Meeting Requested · Interested22
  • Meeting Done · Interested15
  • Trial User · Interested7
  • Customer · Customer9

Stage moves this period

Records moved into a new stage, by the category they moved into.

  • Interested9249%
  • Customer63.2%
  • Not interested5831%
  • Other3117%

Top stages

  • Not Required Right Now · Not interested58
  • Information Requested · Interested46
  • Out of Office · Other31
  • Meeting Requested · Interested29
  • Demo Requested · Interested17

Workflow

Every record by workflow state, right now.

  • Paused92%
  • Action required235.1%
  • Waiting11826%
  • Closed8719%
  • Idle20446%
  • Other (2)71.6%

AI assistant

262 drafts generated in this period.

11 awaiting review

Drafts sent

214

27.4% improved versus the previous period

AI drafts that went out

Classified

498

18.3% improved versus the previous period

Replies the AI labelled

Override rate

6.4%

29.7% improved versus the previous period

Labels a person changed

71% of sent drafts went out unedited (151 of 214)

  • Sent as-is

    151 62%

  • Sent edited

    63 26%

  • Discarded

    29 12%

Outreach

Where these conversations came from. Open a channel for its detail.

Channels

How each channel performed in this period. Select a row to open it.

Channel comparison
ChannelReachedRepliedReply ratePositiveOpen
2,874118
4.1%
29
1,902171
9%
47
54297
18%
28

Conversion funnel

From first touch to customer.

  1. Reached
    5,318
  2. Replied
    7.3%386
  3. Positive
    26.9%104
  4. Meeting
    35.6%37
  5. Customer
    16.2%6

Counts for this period — not one cohort followed through.