Log a conversation
LeadHunter is a communication log. You keep talking to accounts on the channels you already use — email, LinkedIn DMs, Instagram, WhatsApp, phone — then paste the messages into LeadHunter so the per-account history, funnel stats, and scoring stay current across the team.
The conversation log isn’t a sending engine. LeadHunter doesn’t connect to your inbox or your phone — that’s intentional. You stay in control of how and where you send; LeadHunter helps you draft, translate, remember, and measure.
Where the thread lives
Section titled “Where the thread lives”Two entry points show the same conversation:
- Campaign view — open a campaign, click an approved account, hit the Conversation tab. You see every message exchanged in this campaign.
- Account detail — open the account directly (
/dashboard/accounts/{id}). The conversation log aggregates across every campaign that account has been in, so you have one timeline whether the account is now in a different campaign than the one that first contacted them.
Pick a channel
Section titled “Pick a channel”Every message carries a channel, which is part of the record so your future self knows whether “hey, did you see my note?” was an email or an Instagram DM. The eight values: email, linkedin, instagram, twitter_x, whatsapp, phone_call, sms, other.
email is the default. Switch the channel on each message — the per-message channel is what the cohort funnel attributes responses to later, not the campaign default.
The five drafting modes
Section titled “The five drafting modes”Each message is logged in one of five modes. The right mode depends on who wrote it and whether translation was involved.
| Mode | Direction | Use when |
|---|---|---|
| AI draft | outbound | First outbound message in this thread. AI writes a fresh draft. |
| AI continue | outbound | Continuing an existing thread. AI reads the prior history and drafts the next move. |
| Type & translate | outbound | You wrote the message yourself in your language. LeadHunter shows the translation into the account’s language; you send the translation. |
| Log sent | outbound | You already sent it elsewhere (in your own email client, on LinkedIn directly, …). Paste the text just to record it. |
| Inbound paste | inbound | The account replied. Paste their reply; LeadHunter shows the translation into your reading language. |
What gets stored in each mode
Section titled “What gets stored in each mode”Every message has two text fields. Knowing which is which helps when you go back and read old threads:
original_text— the authoritative version. For outbound, what the account actually received (in their language). For inbound, what they actually sent.translated_text— a reader-friendly view of the same content in another language.
The four modes populate them differently:
| Mode | original_text | translated_text |
|---|---|---|
| AI draft / AI continue / Log sent | The sent message (in the account’s language) | (empty) |
| Type & translate | The translated/sent message (account’s language) | Your original draft (your language) |
| Inbound paste | The account’s reply (their language) | Translation into your reading language |
That asymmetry matters: when you re-read a type_translate outbound, the original_text is the version that left your hands, not your scratchpad draft.
Languages: the resolution chain
Section titled “Languages: the resolution chain”Two languages are decided per message — what you read, and what the account reads.
Source (what you write in):
your
User.communication_language→'en'
Target (what the account reads):
Account.language→Campaign.communication_language→Product.communication_language→User.communication_language→'en'
A real example: the product is set up in English, the campaign in Spanish, the lead is Catalan-only. The Catalan setting on the account wins — LeadHunter translates outbound into Catalan regardless of what the campaign says. The campaign-level language only kicks in for accounts that don’t have their own Account.language set.
You can also override the language manually on any single draft — useful when an English-speaking contact at a Catalan organization writes back to you in English and you want to keep the rest of the thread in English without changing the account.
Per-language communication_language on the campaign exists so you can run two campaigns of the same product in different markets without duplicating the product. See Campaign → Language.
What auto-fires after logging
Section titled “What auto-fires after logging”Logging a message as sent isn’t just record-keeping — it advances the pipeline:
- Outbound with
status='sent'(any ofai_draft,ai_continue,type_translate,log_sent) →CampaignAccount.outreach_statusbecomessentif it isn’t already. The dashboard funnel counts this account as initiated. - First outbound on a
prospect-status account → accountstatusadvances tocontacted. The status-history entry recordssource: campaign_outreachand references the campaign id. - Inbound paste →
outreach_statusbecomesresponded. The dashboard funnel counts the account as a response, cohort-attributed back to the original initiation date.
All promotions are forward-only. Already-customer accounts don’t regress when you log a follow-up. Already-contacted accounts don’t re-fire the promotion when the second outbound goes out.
Drafts (status='draft') don’t fire any of this — they’re scratch space. Switch to sent to log the message as truly out.
Guardrails: DNC
Section titled “Guardrails: DNC”Outbound to a do_not_contact account is blocked at the API. The UI shows a clear error pointing at the account’s status history, so the operator can see when and why it was flagged. There’s no “include DNC anyway” override — the GDPR/CAN-SPAM opt-out is sticky on purpose. If you genuinely need to contact a DNC account (a single follow-up to confirm the opt-out, for example), change the account’s status manually first.
Other relationship guardrails (competitor, personal_network, customer-class soft blocks, etc.) only apply to campaign bulk-add — they don’t apply to logging individual messages on accounts that are already in a campaign. The rationale: if it’s already in the campaign, it cleared the bulk-add filters.
Worked example — outbound, reply, continue
Section titled “Worked example — outbound, reply, continue”- First outbound. Open the conversation, pick channel email, mode AI draft. The AI generates a first-touch message in the account’s language. Edit until it reads right. Click Send (LeadHunter records it; you copy-paste into your actual email client and hit send there).
- The account’s
statusflipsprospect → contacted, the campaign-account’soutreach_statusflips tosent, the dashboard’s “initiated” counter ticks up. - Two days later, they reply. Copy their email body, click Inbound paste, channel email. The reply is stored as
original_text(their language); the translation into your reading language appears astranslated_text. - The campaign-account’s
outreach_statusflips toresponded. The dashboard’s “responded” counter ticks up, attributed back to step 1’s initiation date. - Continue the thread. Switch to AI continue. The AI reads the prior two messages — your draft from step 1 and their reply — and proposes a continuation in the account’s language. Edit, send via your email client, log.
The thread on the account detail page now shows three messages in the order they happened, with channel chips, mode chips, language flags, and the auto-promoted status transitions visible in the account’s status history sidebar.
Common pitfalls
Section titled “Common pitfalls”- Picking the wrong mode for translated outbound. When you draft something in your own language and translate it before sending, that’s Type & translate — not
Log sent. The mode matters becausetype_translatestores both versions;log_sentonly stores one and your future self loses the source. - Forgetting to switch channel on a non-email exchange.
emailis the default and most users leave it. If the thread is on LinkedIn or Instagram, switching to the right channel before sending is what makes the cohort funnel correctly attribute “responses on LinkedIn” a quarter from now. - Keeping drafts forever. Drafts don’t advance any status. If you draft a message and never send it, the account stays at
prospect, the campaign stays atinitiated=0, and nothing in the funnel records the work. Either flip the draft tosentonce you’ve sent it, or delete the draft. - Re-pasting an inbound reply you already pasted. Inbound paste counts toward responses; duplicating the same reply double-counts. The conversation history is your source of truth — check before pasting.
Read next
Section titled “Read next”- Run your first campaign — get to the point where there’s something to log.
- Account — what each lifecycle status means and which transitions are forward-only.
- Campaign — the language-resolution chain in full, plus the outreach guardrails.
- Track campaign costs and CAC — log the spend that produced these conversations.