Skip to content

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.

Every message belongs to an account. A campaign is optional context: log a message under one of the account’s campaigns and it also counts in that campaign’s funnel; log it with no campaign and it’s simply part of the account’s history. A message after a trade fair, a WhatsApp chat with an existing client or a referral doesn’t need a campaign.

You can log and read messages in three places:

  • The account page — the Activity tab has a Conversation card with the composer in it and the Latest messages below (the newest three, Show N more for up to ten). Log message in the page header jumps to the composer. You log without leaving the page.
  • The account’s Conversations page — Open all conversations on that card (or All conversations in the header’s ⋮ menu) lists every message with this account in one stream, oldest at the top and newest at the bottom, across every campaign plus the messages logged without one. Each message shows its campaign as a badge.
  • Inside a campaign — one panel per account, described next. You see the messages of this campaign only.

In a campaign, everything about one account sits in one panel, so logging a reply and deciding what happens next is one place:

  • Conversation — the thread, then the composer. AI draft directions, Internal note and Tracked links sit folded below it.
  • Next step — the account’s open next steps, Add next step, and template chips that add a step in one click.
  • Decision — Shortlist, Defer, Not a fit or Back to review. A decision made here counts as your own judgement and teaches the scoring.
  • Stage — when the campaign has a board: the card’s stage, with Open the card on the board to move it.

The header shows the account’s fit score, review decision, board stage and status side by side.

The panel opens from:

  • a row on the campaign’s Review tab (click the row, or Open conversation and next step in its menu);
  • the Outreach tab’s Inbox, where it is the right-hand pane next to the list of accounts;
  • a row of the Follow-up view of the Outreach tab (click the row; Log send opens it with the composer ready);
  • a card on the campaign’s Board (Open conversation in the card’s drawer).

On the Conversations page, narrow the stream by channel (WhatsApp only, say) and by campaign, where No campaign shows the messages logged without one. The filters are part of the page address, so a refresh or a shared link keeps them. Long histories load the latest messages first; click Load older at the top to bring in earlier ones.

The composer on the account page and on the Conversations page has a Log under selector:

  • No campaign (the default) — the message is recorded on the account only. You get the three modes that don’t need a campaign: Log already sent, Log inbound reply and Type & translate.
  • One of the account’s campaigns — the message joins that campaign’s thread and counts in its funnel, and the AI drafting modes appear, because the drafts are written from the campaign’s purpose, its fit criteria and briefs.

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.

The composer starts on the channel of the thread’s latest message; in a new thread, on the channel you used last (it remembers your last mode too). Check the channel on each message — the per-message channel is what the cohort funnel attributes replies to later.

Each message is logged in one of five modes. The right mode depends on who wrote it and whether translation was involved.

ModeDirectionUse when
AI: first messageoutboundFirst outbound message in this thread. AI writes three drafts, each a different approach.
AI: continue threadoutboundContinuing an existing thread (the tab is disabled until the thread has an outbound message). AI reads the prior history and drafts the next move.
Type & translateoutboundYou wrote the message yourself in your language. LeadHunter shows the translation into the account’s language; you send the translation.
Log already sentoutboundYou already sent it elsewhere (in your own email client, on LinkedIn directly, …). Paste the text just to record it.
Log inbound replyinboundThe account replied. Paste their reply; LeadHunter shows the translation into your reading language.

The two AI modes need a campaign. Without one (the No campaign choice under Log under) you have the other three.

Each mode tab keeps its own text (since 2026-10-03). If you start typing in Type & translate and switch to Log inbound reply to log their reply first, your half-written message is still there when you switch back; a tab you haven’t used starts empty instead of picking up another mode’s text. The tabs are locked while a draft or translation is being generated.

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 modes populate them differently:

Modeoriginal_texttranslated_text
AI: first message / AI: continue thread / Log already sentThe sent message (in the account’s language)(empty)
Type & translateThe translated/sent message (account’s language)Your original draft (your language)
Log inbound replyThe 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.

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 message logged with No campaign skips the campaign and product steps: the account’s language, else yours, else English.

A real example: the product is set up in English, the campaign in Spanish, the account reads only Catalan. 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.

Logging a message as sent under a campaign isn’t just record-keeping — it advances the pipeline:

  • Outbound sent (any of the four outbound modes) → the account’s outreach status in that campaign becomes sent if it isn’t already. The funnel on Insights → Funnel counts this account as initiated.
  • First outbound on a prospect-status account → account status advances to contacted. The status-history entry records source: campaign_outreach and references the campaign.
  • Log inbound reply → the outreach status becomes Replied (responded in the API). The funnel counts the account under Replied, cohort-attributed back to the original initiation date.

Any inbound reply, with or without a campaign, also puts the account in Replies waiting on Today until you log an outbound message after it.

All promotions are forward-only. Accounts that are already clients don’t regress when you log a follow-up. Already-contacted accounts don’t re-fire the promotion when the second outbound goes out.

A message logged with No campaign stays out of every campaign funnel and doesn’t change the account’s status (change it yourself if the conversation moved the relationship). An outbound one still counts as your latest contact with the account, which is what Client Pulse uses to tell you when a client is overdue for a check-in.

Drafts (status='draft') don’t fire any of this — they’re scratch space. Switch to sent to log the message as truly out; that switch runs the same do-not-contact checks as logging a new outbound message, so a draft can’t be sent to an account that opted out after it was written. A message’s direction (outbound / inbound) is fixed once it’s logged.

Outbound to a do_not_contact account is blocked, with or without a campaign. The UI shows a clear error pointing at the account’s status history, so you can see when and why it was flagged. There’s no “include anyway” override — the GDPR/CAN-SPAM opt-out is sticky on purpose. If you genuinely need to contact the account again (a single follow-up to confirm the opt-out, for example), change its status manually first.

Per-purpose opt-outs work the same way. An account can opt out of one kind of outreach — sales, say — and still be fine with press or research requests (see Per-purpose opt-outs):

  • Under a campaign, the campaign’s purpose applies. A sales campaign can’t log an outbound message to an account that opted out of sales.
  • With No campaign, LeadHunter asks which purpose the message serves whenever the account has any per-purpose opt-out. The composer shows a purpose picker with the opted-out purposes disabled, and the message can’t be logged until you pick one. Without this, logging outside a campaign would be a way around the opt-out. Accounts without per-purpose opt-outs don’t ask.

Inbound replies are never blocked: recording what the account sent you isn’t outreach.

Other relationship guardrails (competitor, personal_network, client and trial soft blocks, etc.) only apply to campaign bulk-add — they don’t apply to logging individual messages. They decide who may join a campaign: an account already in one cleared them, and a message logged without a campaign isn’t joining one.

Worked example — outbound, reply, continue

Section titled “Worked example — outbound, reply, continue”
  1. First outbound. Open the account’s panel in the campaign (from the Outreach inbox, say), pick channel email, mode AI: first message. The AI proposes three first-touch drafts in the account’s language; pick one with Use this and edit until it reads right. Copy it into your actual email client and send it there, then click Log message to record it.
  2. The account’s status flips prospect → contacted, the campaign-account’s outreach_status flips to sent, the funnel’s “initiated” counter ticks up.
  3. Two days later, they reply. Copy their email body, open Log inbound reply, channel email, paste it and click Log reply. The reply is stored as original_text (their language); the translation into your reading language appears as translated_text.
  4. The campaign-account’s outreach_status flips to responded. The funnel’s Replied counter ticks up, attributed back to step 1’s initiation date. In the same panel, add the next step you owe them under Next step.
  5. Continue the thread. Switch to AI: continue thread. 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, click Log message.

The account’s Conversations page now shows three messages in the order they happened, with channel chips, mode chips, language flags, and the campaign badge; the auto-promoted status transitions are in the account’s status history.

You met the owner of a shop at a trade fair and wrote to them on WhatsApp the next day. Open the account and click Log message, leave Log under on No campaign, pick channel whatsapp, mode Log already sent, paste what you sent and click Log message. When they answer, use Log inbound reply. If the account had opted out of, say, sales outreach, the purpose picker asks what this message is for before it lets you log it.

  • 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 already sent. The mode matters because Type & translate stores both versions; Log already sent only stores one and your future self loses the source.
  • Forgetting to check the channel. The composer proposes the thread’s latest channel or the one you used last. If this exchange is on LinkedIn or Instagram, switching to the right channel before logging is what makes the cohort funnel correctly attribute “replies 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 at initiated=0, and nothing in the funnel records the work. Either flip the draft to sent once you’ve sent it, or delete the draft.
  • Re-pasting an inbound reply you already logged. Log inbound reply counts toward replies; duplicating the same reply double-counts. The conversation history is your source of truth — check before pasting.