Skip to content

Glossary

A working glossary of LeadHunter terminology. Skim it once when you’re new; refer back when a term feels overloaded or you can’t remember which field carries what.

Grouped by concept area, not alphabetised — related terms read better next to each other.

  • Organization — Groups several projects, e.g. an agency with one project per client. Carries its own members and roles (owner, admin, member); owners and admins can create projects in it. Owns no accounts or campaigns itself. See Organization, project and product.
  • Project — The unit that owns data and is fully isolated: accounts, products, campaigns, conversations, stats, costs. Everything else hangs off a project; data never crosses between projects, even inside one organization. Formerly labelled Company in the app.
  • Company — Old app name for what is now a Project. Elsewhere in these docs, “company” just means a business you sell to.
  • Product — What you’re selling. Carries the description, its fit criteria (one per purpose), default communication language, and example URLs that calibrate scoring. A project can have multiple Products.
  • User — A person with a login. One user can belong to many projects (and organizations) via team memberships.
  • Account — An organisation in your database (a company, a venue, a podcast — anything you’d put on an org-level row). Can be a client, prospect, partner, press contact, supplier — the same row serves all roles. See Account.
  • Contact — A person inside an Account: name, email, phone, job title, seniority, LinkedIn URL. Distinct from Account; one Account can have many Contacts (or zero). You manage them on the account page’s People tab.
  • Contact role kind — Tags how to interpret a Contact’s seniority / department / is_decision_maker fields. The same seniority='c_level' value reads as “C-Suite executive” for a buyer, “Editor-in-chief” for a journalist, and “Senior career level” for a candidate. Seven kinds: buyer (default), journalist, candidate, investor, partner, influencer, other. Default buyer preserves the sales-shaped reading for existing contacts.
  • Lead — Not a LeadHunter term for a row: the product’s name and verb phrases (“find leads”, “lead generation”) describe the discovery activity, but what gets stored is always an Account.
  • Client — An account whose status is Client (customer in the API). The Clients quick condition on the Accounts list means exactly that. The Clients page and Client Pulse are about them; prospects, partners and press are accounts, not clients.
  • Contract end date (contract_end_at) — Optional renewal-cycle date on Account. Drives the renewal goal: campaigns at goal='renewal' filter for customers approaching this date. NULL for accounts not on a renewal cycle (most prospects, all press / candidates / investors).

Status, types, and channel — the three orthogonal fields

Section titled “Status, types, and channel — the three orthogonal fields”
  • Status — Single-valued pipeline state on an Account, shown as the Status chip at the top of the account page: prospect, contacted, in_negotiation, in_trial, customer, lost, do_not_contact. Answers “where in the pipeline?”
  • Relationship types — Multi-select labels on an Account: client, prospect, reseller, affiliate, supplier, partner, investor, press, influencer, analyst, community, event_organizer, competitor, candidate, personal_network. Answers “what is this account to me?”
  • Source channel (acquisition_channel in the API) — Single-valued marketing-channel attribution, on the account page’s Profile tab: outbound (default), adwords, meta_ads, linkedin_ads, organic_search, organic_social (Instagram DM, X, …), referral, event, partner, influencer, cold_inbound, other. Answers “how did this account first reach me?”
  • Acquisition metadata — Free-form JSON bag attached to an account for channel-specific data (UTM parameters, ad campaign id, Instagram thread URL, referrer email, …).
  • Status source — Audit-trail field recording how a status transition happened: manual, campaign_outreach, import_exact, import_fuzzy, import_llm_verified, inbound_acquisition, pre_existing (operator-marked relationship that predates LeadHunter).
  • Status history — Append-only audit trail on each Account; every status change writes an entry with from/to/at/by/source/reason.
  • Pre-existing customer — A Customer-status transition flagged as a relationship that predates LeadHunter (a renewal client, a CRM import). Still on the audit trail, but the funnel’s Closed (won) metric skips it — so importing your existing book of business doesn’t fake a win.
  • Auto-promotion — Lifecycle-status changes LeadHunter makes for you without explicit operator action. Two cases: (1) creating an account with an inbound acquisition channel starts it at contacted instead of prospect; (2) logging the first outbound on a prospect advances it to contacted. Forward-only; never demotes.
  • DNC (do_not_contact) — Blanket GDPR/CAN-SPAM opt-out. Sticky — survives merges, hard-blocks outbound whatever the campaign’s purpose. No override flag.
  • Per-purpose DNC (do_not_contact_purposes) — Newer, finer layer: a list of campaign purposes the account opted out of. ["sales"] means “block sales campaigns from contacting me, but research interview asks / press pitches / event invites are still OK”. Sticky like DNC, but goal-scoped. See Account → Per-purpose opt-outs.
  • DNC history (dnc_history) — Audit trail of per-purpose opt-out / opt-in events: {purpose, action, at, by, source, reason}. Mirrors status_history shape.
  • Hard block — Outreach refused, no override available. Applies to do_not_contact status, to personal_network relationship type universally, and to competitor for most goals (admitted in press / event / research where competitor accounts are legitimate targets).
  • Soft block — Outreach refused unless an explicit include_<type>=true flag is set. Applies to customer and in_trial status (in goals that block customers) and to supplier / investor / press / analyst / candidate / influencer / community / event_organizer relationship types (per goal — a press campaign won’t block press accounts, etc.).
  • Block explanations — When bulk-add hits a guardrail, the response carries a goal-aware reason per blocked bucket: a Sales campaign tells you “this Sales campaign soft-blocks press accounts; pass include_press=true or switch the goal”. The app shows these directly under each blocked count.
  • Archive — Soft-hide a Product, Campaign, or Account from default lists while keeping every reference intact (campaign rows, scores, conversations, expenses, audit trail). Accounts also carry a free-text archive reason. Reversible at any time.
  • Delete — Permanent removal, cascades to every related row. Projects, Campaigns and Accounts require typing the exact name to confirm (a bulk campaign delete asks for DELETE N CAMPAIGNS). Products are protected if any campaign references them — archive instead.
  • Purpose — Why you’re reaching out: sales, partnership, press, influencer, investor, recruiting, customer expansion, win-back, event, research or renewal. The API calls a campaign’s purpose its goal. Fit criteria and fit scores are kept per product and purpose. See Outreach reasons and targets.
  • Fit criteria — Who you want to reach with a product for one purpose: name and summary, industries, roles, pain points, company size. One set per (Product, Purpose); AI-drafted from the product, then edited and approved under Settings → Products. See Fit criteria and fit score.
  • Version (of fit criteria) — Every content change to the fit criteria is a new version. Each fit score remembers the version it was made with.
  • Fit score — A 0–10 rating of how well an account matches the fit criteria, with a label and 2–4 typed reasons. One per (Product, Account, Purpose), shown on the Accounts Fit column, the account page’s Fit scores card, every campaign of that product and purpose, and Today. See How scoring works.
  • Fit band — The words beside a fit score: Strong fit (8–10), Good fit (6–8), Weak fit (4–6), Poor fit (below 4). An account without a score reads Not scored yet, never Poor fit. The API’s stored score_label keeps three values: excellent (8 and up), moderate (5 to 7.9), mismatch (below 5).
  • Score reasons — 2–4 short, typed justifications: positive (green check, concrete match), negative (red cross, concrete gap), neutral (amber, context that doesn’t push either way).
  • Old criteria — The badge on a fit score made with an older version of the fit criteria. The score still shows; rescore to bring it up to date.
  • Rank / Ranking run — Scoring any filtered Accounts list (or a sample of it) against a product’s fit criteria, without a campaign: estimate first, a budget cap, progress under Runs → Ranking. See Rank a list without a campaign.
  • Budget cap — The most a ranking run may spend (in USD). The run checks its spend before every AI call (website lookups and scoring batches) and stops when the cap is reached, keeping what it scored. Calls already in flight finish, so the final spend can go a little over the cap.
  • Sample — A ranking run limited to the first N accounts that need a score (50 by default), to check the fit criteria before ranking the whole list.
  • Scoring estimate — The accounts, batches, model and expected cost shown before every scoring or ranking run; nothing starts until you confirm.
  • Scoring brief — Optional lines on a campaign that tilt its scoring (“weight shops with a workshop heavily”). A campaign with a brief keeps its own scores; rescoring it never changes what other campaigns, the Accounts list or Today show.
  • Fit score bands — The campaign Review tab’s split of accounts by score: 8–10, 6–8, 4–6, 0–4, Not scored yet, each with how many are decided. Click one to work only that band.
  • Override score — A score you set by hand (Set score by hand) for one campaign only. The shared fit score doesn’t change.
  • Calibration feedback loop — Once a (Product, Purpose) pair has about ten single Shortlist / Not a fit decisions, the latest ones feed back into the scoring prompt as examples. Bulk decisions and Defer never count. Scoped to the purpose: press decisions don’t teach sales scoring.
  • Stale-score banner — The campaign Overview’s banner when accounts were scored for a different purpose than the campaign’s current one (after a purpose change), with a Rescore button.
  • Campaign — One outbound effort against a list of Accounts, scoped to a single Product. See Campaign.
  • Campaign purpose (goal in the API) — The why of outreach. Eleven values: sales (default), partnership, press, influencer, investor, recruiting, customer_expansion, win_back, event, research, renewal. Picks the fit criteria the campaign scores against and reshapes the message intent, bulk-add guardrails and CAC label per campaign. Same thing as the purpose. See Outreach reasons and targets.
  • Purpose history (goal_history) — Audit trail of purpose changes on a Campaign: {from, to, at, by, source, reason}. Auto-appended whenever the goal changes; mirrors Account.status_history. The change endpoint accepts an optional goal_change_reason body field that gets stamped into the entry.
  • Close metric label — Goal-aware noun phrase for “what counts as a close” — drives the third cost card on the campaign’s Settings & costs tab. Sales reads “Cost per closed-won customer”, press reads “Cost per press reply”, recruiting reads “Cost per candidate engaged”, renewal reads “Cost per renewal”.
  • CampaignAccount — Join row between a campaign and an account. Carries per-campaign workflow: review status, outreach status, chosen contact, override score, tags, notes, and the role-in-campaign override.
  • Role in campaign (role_in_campaign) — Optional per-campaign lens override on a CampaignAccount. The same Account can be a paying customer AND a press contact AND a research participant; different campaigns view it through different lenses. When set, the outreach drafter receives a “Role for this campaign: treat this account as <role> regardless of its other tags” directive so the message respects the lens.
  • Review status — Per-campaign-per-account decision: To review (pending), Shortlisted (approved), Deferred (deferred), Not a fit (rejected). Single decisions drive the calibration feedback loop; each records who, when, a reason and whether it was a bulk change.
  • Shortlist / Defer / Not a fit — The three review decisions: reach out to this account, maybe later, doesn’t match. Made one account at a time or in bulk (selected rows, every matching account, the top N), with undo.
  • Outreach status — Per-campaign-per-account workflow: not_started, draft, scheduled, sent, bounced, responded.
  • Scoring status — Per-campaign state for the background scoring job: idle, running, completed, failed.
  • Add matching accounts to campaign — Accounts-page action that adds every account the list currently shows (saved filter, search, quick filters) to a campaign in one pass, honouring all guardrails.
  • Reach estimator — The pre-flight count in that dialog: how many accounts match the list, how many would be added and how many each guardrail would skip (N new · M already in campaign · K blocked).
  • Campaign tabs — Every campaign has Overview, Review, Outreach, Board and Settings & costs.
  • Follow-up — The second view of a campaign’s Outreach tab: who has had how many attempts, who is due another, who replied, who to close as no response. Not to be confused with a next step. See Review your outreach.
  • Outreach inbox — The Inbox view of the campaign’s Outreach tab. Shows every conversation thread in the campaign sorted by what needs attention (recent inbound first, then drafts that haven’t been sent).

LeadHunter is a communication log, not a sending engine. You send through your own channel and paste the exchange in.

  • Channel — Per-message: email, linkedin, instagram, twitter_x, whatsapp, phone_call, sms, other. What the cohort funnel attributes against later.
  • Direction — outbound (you sent) or inbound (they sent).
  • Mode — The composer tab a message was logged from, stored as generation_mode: AI: first message (ai_draft), AI: continue thread (ai_continue), Type & translate (type_translate, you wrote in your language and LeadHunter translated), Log already sent (log_sent, you sent it elsewhere and paste it to record it). Inbound replies are logged with Log inbound reply (inbound_paste).
  • original_text — The authoritative version of a message — what the account actually received (outbound) or sent (inbound), in their language.
  • translated_text — A reader-friendly view of the same content in another language. Populated for type_translate outbound (the user’s draft) and inbound_paste (the translation into your reading language).
  • Reading language — Your User-level communication language. Inbound text is translated into it. It only affects messages; the app itself is in English.
  • Campaign expense — A user-entered cost line item against a campaign: Adwords spend, agency fees, labor hours, software, content, events. Ten kinds. Carries amount + currency + date + vendor.
  • Expense kind — One of adwords, meta_ads, linkedin_ads, other_ads, agency, labor, software, content, event, other.
  • Quick-add expense — The 💸 button on every row of the campaigns list. Opens a modal pre-filled for that campaign so you can log an expense without opening the campaign first.
  • Primary currency — The currency with the largest total on a campaign. Drives the headline number and the CAC math.
  • CAC (Cost of Acquisition) — Total spend ÷ outcome count. LeadHunter computes three flavours: per outreached account, per replied account, per closed-won client. Only computed when user-entered expenses share one currency.
  • API costs — Auto-tracked per-call costs for LLM tokens, Google Maps lookups, Tavily searches. Recorded automatically (you don’t enter them) and surfaced alongside user-entered expenses on every campaign’s Settings & costs tab. Always in USD. CAC is computed from the user-entered side only — see Usage and costs.
  • Research — A tracked discovery / enrichment activity. Imports, Google Maps searches, website scrapes, AI deep-research all create a Research record, listed under Runs → Imports, enrichment and searches. See Research.
  • Import report — The rows an import didn’t take, downloadable from its result panel: Rows not imported (with the errors) and Duplicates skipped (with the account each one matched).
  • Lookup — One-off discovery from a URL, domain, Maps URL, or text query. Three modes: none (no AI), quick (basic extraction), deep (multi-page crawl + contact extraction).
  • Auto-enrichment — Background job that runs after every new account creation, discovering and scraping the website automatically.
  • Dedupe stack — The duplicate check run before an account is created: Google Place ID and imported ID (100%) → name + city after normalisation (95%) → phone (90%) → website domain (85%) → similar name in the same city (85–94%). Nothing merges automatically: an import skips rows that match at 95–100% and imports the rest, the new account form refuses any match, and you merge what got through with Find duplicates. See Merge duplicates.
  • Golden record — The survivor row after a merge. Carries every unique field from every duplicate.
  • merge_history — Audit trail on the survivor recording absorbed-row snapshots, decisions, and overrides. Readable for forensic audit; not a one-click undo.
  • AI duplicate review — LLM pass that classifies each duplicate group as same / different / uncertain to speed up triage of large lists.
  • Exact matches / Similar names — The two tabs of Find duplicates: groups sharing a Place ID, imported ID, name + city, phone or website, and groups with near-identical names in the same city. Works on projects of any size.
  • Bulk merge — Multi-group merge action for resolving many duplicate groups in one request, with a preview of what each merged account will hold. Useful after a noisy import surfaces dozens of fuzzy candidates.
  • Custom field — Per-project schema for data not in the standard model: store size, contract expiry, tier, etc. Eight types. Referenced in filters as cf.<key>.
  • Saved view (saved filter in the API) — A named, reusable query over your Account database, picked from the Saved views menu of the Accounts list. Can be private (yours only) or shared across the project. Powers smart lists, campaign bulk-add, and API queries.
  • Filter DSL — The structured query format: {match: "all"|"any", conditions: [{field, op, value}]}.
  • Match mode — Per-filter: all (AND) or any (OR). No nested mixing.
  • Virtual field — has_email / has_phone / has_website. Resolves to “is this column non-empty?” Only is_true/is_false apply.
  • Marketing partner — An account you work with for reach rather than as a client: an influencer, press or media, a community, an event organizer, a partner, an affiliate or an analyst. Pure partners are hidden from the Accounts list by default and kept out of client stats. See Marketing partners.
  • Partner stage — Where a partnership stands: To contact → Contacted → Talking → Agreed → Active → Past, or Declined / Not a fit.
  • Marketing action — One collaboration with a partner (a reel, an article, a fair booth, a newsletter slot), with a type, a stage, dates, reach, costs (in-kind included) and tracked links. Its results run reach → clicks → accounts → trials → clients, revenue, cost per client and ROI.
  • Attribution — Linking an account to the action or channel that brought it, one per account (first touch). Attribute accounts does it for many accounts at once, after a preview.
  • Today — The home page: next steps due today, tomorrow or overdue (yours, the team’s, or yours in all your projects), replies waiting for an answer, clients to contact, what’s waiting in each campaign, then the best-scored accounts nobody is working yet.
  • Next step — A dated to-do on an account, yours or theirs. All of them are on the Next steps page, opened from Today. See Next steps. See Use Today.
  • Run — A piece of background work: a campaign scoring run, a ranking run, a file import, an enrichment pass, a Google Maps or web search. The Runs page lists them (Campaign scoring · Ranking · Imports, enrichment and searches) with progress and cost.
  • Strong fits reached — The stat on Insights → Funnel: accounts scored 8 or more that you’ve worked.
  • Outreach funnel — The three numbers on Insights → Funnel: contacts initiated, responded, closed (won). Each counts distinct accounts, not messages. Closed (won) only counts transitions to customer that stuck (current status is still customer or lost) and weren’t tagged as a pre-existing relationship — see Account → Recording a pre-existing customer.
  • Cohort attribution — Responded and closed are attributed back to the initiation date, not the response date. So the rate at the latest day is “low by design” until accounts have had time to respond.
  • Breakdown (Insights) — Per-product, per-campaign and per-channel breakdown of the funnel, with Cost column (total spend + most-meaningful CAC available).