Skip to content

Company and Product

LeadHunter has two top-level entities: Company and Product. Everything else hangs off them.

A Company is the highest-level container. It carries:

BucketHolds
Identityname, slug (auto-generated from name, unique site-wide), description, is_active
MembersTeam users and their roles (owner, admin, member)
Owned dataAccounts, Products, Campaigns, Conversations, Research records, Custom-field definitions, Saved filters, Campaign expenses
Provenancecreated_at, updated_at

One user can belong to many Companies. Each Company is fully isolated — no data ever crosses between them. If you run an outbound agency, you’d typically have one Company per client. See Team and companies for the multi-tenant story in detail.

The active Company is selected in the Company switcher in the dashboard top bar. Everything you see on every page — accounts, campaigns, statistics, costs — is scoped to that selection. The selection persists across sessions via local storage.

A quick word on terminology. Internally this entity is called a project. In the UI we call it a Company because that’s how users actually think about it. The two terms mean the same thing — you may occasionally still see project in a URL or an older screen.

A Product lives inside a Company and represents something you want to sell. A Company can have multiple Products — each with its own positioning, ICP, and campaigns.

BucketHolds
Identityname, slug (auto-generated, suffixed on collision within the project)
Positioningdescription — long-form, the AI’s primary anchor for ICP generation and scoring
Discoverabilitywebsite_url — the AI visits this during ICP generation
Defaultscommunication_language — drives outbound when neither Account nor Campaign override
Scoring calibrationexample_good_urls, example_bad_urls — 2–3 of each, the single biggest lever on scoring quality after the ICP
Lifecyclearchived_at, created_at, updated_at, created_by
RelatedOne ICP (one-to-one); many Campaigns; one fit score per Account it’s been scored against

The description field is the single most important field on the product. The AI uses it to write your ICP and to score accounts; vague descriptions produce vague ICPs and noisy scores. Two paragraphs minimum, specific about who the product is for and who it isn’t.

The Ideal Customer Profile is attached to the Product, not the Campaign. Two campaigns of the same product share the same ICP and the same scoring calibration. Rescoring once benefits every campaign that uses the product — see ICP and scoring → Score caching.

If you need a fundamentally different audience for the same product (e.g. enterprise vs SMB, EU vs US, agencies vs direct sellers), the right move is usually to create a second Product with its own ICP — not two campaigns of the same product. See the heuristic below.

When should I make a second product vs another campaign?

Section titled “When should I make a second product vs another campaign?”
SignalWhat it meansAction
Same product, different geography or segment, same fit criteriaOne audience, you want to slice by market or vertical.One Product, multiple Campaigns.
Same offering but the ICP changes meaningfully (size band, sector, buying signals)The model would score the audiences differently.Two Products, each with its own ICP.
Different positioning of the same softwareThe what is identical, the for whom differs.Two Products.
Truly separate offerings (different SKU, billing, sales motion)These are distinct products in any business sense.Two Products.

Rule of thumb: if you would draft the ICP differently, it’s a different Product. Splitting on ICP keeps each product’s scoring sharp; splitting on language or geography alone wastes the calibration work.

Scoring is per-(Product, Account). The same account showing up in three campaigns of the same product gets scored once. That keeps AI cost down and scores consistent: an account doesn’t suddenly drop from excellent to moderate because you started a new campaign.

The calibration feedback loop is also per-product — every approve / reject decision you make in a campaign’s review queue feeds back into scoring for that product’s future scores, not the Company’s. So a noisy review pass on Product A doesn’t leak into Product B’s scoring quality. See ICP and scoring → The feedback loop.

If you swap a campaign’s product (allowed, as long as the new product belongs to the same Company), the campaign’s accounts will need to be rescored against the new ICP. LeadHunter handles that with a single click in the UI.

Both Product and Campaign support archiving — a soft-hide that keeps every related row in the database (campaigns, conversations, scores, expenses, audit trail) but hides the item from default list views. Toggle Show archived to see them again.

ActionEffect
Archive a ProductHidden from the products list. All campaigns of that product also disappear from default lists unless un-archived separately. Re-activating is one click.
Delete a ProductRefused if any Campaign references it — archive instead. Once safe, hard-delete removes the row permanently.
Archive a CampaignHidden from default lists; every conversation, score, expense, and audit-trail entry is preserved.
Delete a CampaignName-confirmed (you type the exact campaign name). Cascades to the campaign’s CampaignAccount rows, conversations, ICP, and expenses. Underlying Accounts are never affected.

Bias toward archiving. Deletes are permanent and the data they take with them is often what makes the next campaign sharper.

Two reminders about what can and can’t cross the Company boundary:

  • What doesn’t cross: accounts, scores, campaigns, expenses, custom fields, saved filters, conversation history, audit trails. Everything operational.
  • What does cross: your User profile, your communication language, your dashboard UI language, your Recent entities list. These follow you across every Company you belong to.

The dedupe stack is also Company-scoped, which means the same business legitimately existing in two Companies (e.g. an agency’s two clients both reach out to Acme Corp) will be two unmerged rows. That’s the right answer — they’re operationally independent.

  • Account — the organisations that flow through your products.
  • Campaign — running a specific outbound effort against a list of accounts.
  • ICP and scoring — how the per-product fit score is computed and calibrated.
  • Team and companies — the multi-tenant + roles story in detail.