Team and companies
LeadHunter is multi-tenant by design. One user can belong to multiple Companies, and each company is fully isolated — no data ever crosses between them. A Berlin agency running outbound for ten clients runs ten companies; an internal team running its own outbound runs one.
The Company is the unit of tenancy: accounts, products, campaigns, custom fields, saved filters, conversations, expenses, dashboards — everything you operate on is scoped to the active company.
The Company switcher
Section titled “The Company switcher”The Company switcher in the dashboard top bar selects the active company. Every page you see — accounts, campaigns, statistics, stats by product — is filtered to that choice. The selection persists across sessions via local storage, so reloading the page or coming back tomorrow keeps you on the same company.
Three places in the dashboard surface multi-company context:
- The switcher itself — quick toggle between companies you belong to.
- All companies overview (
/dashboard/companies) — cross-company dashboard funnel; reads accounts and outcomes from every company you belong to. Picking a company tile sets the active company and routes you to its single-company dashboard. - Companies list (
/dashboard/projects/) — full list with creation, archiving, member counts.
Creating a new company
Section titled “Creating a new company”From Company switcher → New company, or via Companies → New:
- Give it a name (e.g. “Acme Outbound”, “Berlin Clients — BikeCo”).
- The slug is generated automatically from the name; collisions get suffixed.
- The user creating the company becomes its first owner.
There’s no soft limit on how many companies a user can belong to or create. There’s no hard cross-company quota — each company has its own usage tracking (LLM tokens, Maps calls, Tavily searches, user-entered expenses), and you read the cost per company under Usage and costs.
Three roles, ordered by capability:
| Role | Data read/write | Add/remove teammates | Change roles | Delete the company |
|---|---|---|---|---|
| Member | ✓ | ✗ | ✗ | ✗ |
| Admin | ✓ | ✓ | ✓ (members + admins) | ✗ |
| Owner | ✓ | ✓ | ✓ (everyone) | ✓ |
Everyone in the company sees and edits the same data — there’s no per-account or per-campaign permission. Roles control team management, not data access.
A guard prevents the last owner from being removed or demoted — the company would otherwise become un-administrable. Add a second owner before transferring or leaving the role.
Adding a teammate
Section titled “Adding a teammate”A self-serve team-management UI isn’t shipped yet. For now, adding or removing teammates and changing roles is a support-driven flow.
To get a teammate added today:
- The teammate signs up at leadhunter.humans2agents.com and confirms their email.
- Contact the LeadHunter team with the teammate’s signup email, the Company slug, and the role you want them to have (
owner,admin, ormember). - Once added, the teammate sees the Company in their own switcher on next login.
Removing a teammate and changing roles follow the same route — message the team with the change you want.
The first-class invite-by-email flow with a UI is a known gap; we’ll announce it in What’s new when it lands.
Revoking access
Section titled “Revoking access”Removing a teammate via the API:
- Does not delete the user’s account or their data on any other company they belong to.
- Does not delete any accounts, campaigns, or messages this company stores — those belong to the company, not the user.
- Does revoke the user’s access to this company immediately. Their Company switcher loses the entry on their next page load.
There’s no offline grace period or token revocation delay.
Data isolation — what crosses, what doesn’t
Section titled “Data isolation — what crosses, what doesn’t”| Surface | Scope |
|---|---|
| Accounts, contacts, status history | Per-company. Never crosses. |
| Campaigns, conversations, expenses | Per-company. |
| Custom fields and their definitions | Per-company. |
| Saved filters | Per-company (+ optionally private per-user — see below). |
| Research records, API usage attribution | Per-company. |
| Dedupe stack | Per-company. The same business can exist in two companies as two separate rows; LeadHunter doesn’t merge them. |
| Score reuse | Per-(Product, Account). Since both live in one company, scores never cross. |
If you’re running an agency, each client’s accounts are isolated from every other client’s. You can’t accidentally pull a competitor’s contact list into another client’s campaign.
Per-user vs per-company
Section titled “Per-user vs per-company”A few things live on the User, not the Company — so they follow you across every company you belong to:
- Communication language — the default language you write in. Read by the message-language fallback chain when no other override applies. Independent of the dashboard UI language.
- Dashboard UI language — what the dashboard chrome is in.
- Recent-entities list — the Recent section in the command palette. Tracks what you opened, not what others did.
Everything else — saved filters, custom field definitions, accounts, campaigns, conversations — lives on the Company.
Saved filters: shared vs private
Section titled “Saved filters: shared vs private”Saved filters are an exception worth knowing about. Each filter is either:
- Shared (
ownernull) — visible and usable by every member of the company. Use these for canonical lists everyone references. - Private (
ownerset) — visible only to the user who created it. Useful for scratch filters or experiments before sharing.
You can flip a filter between private and shared at any time if you own it. The same name can exist once as a shared filter and once as your own private filter — they don’t collide on (project, owner, name).
Common patterns
Section titled “Common patterns”| Pattern | Setup |
|---|---|
| Solo operator | One company, you as owner. |
| Internal team | One company, you as owner, teammates as members. Add a second owner before going on holiday. |
| Agency | One company per client. Each client’s company has you (the agency) as a member or admin; the client themselves may or may not have a login. Sharing accounts between clients is impossible by design — that’s the point. |
| Mixed | Some teammates belong to multiple companies; e.g. you have your own outbound and run a couple of clients. The switcher and the All companies overview are built for this case. |
Common pitfalls
Section titled “Common pitfalls”- Expecting an email-invitation flow. Today, team management is API-only and requires the teammate to be a registered LeadHunter user already. Plan around that.
- Forgetting which company is active. Every page is scoped to the switcher. If your campaigns list is empty when you expected dozens, glance at the top bar before assuming the data’s gone.
- Sharing private saved filters by accident. Filters default to private; flipping to shared is intentional. The reverse — shared → private — disappears the filter for everyone except you, which is occasionally what you want and occasionally a surprise.
- Trying to remove the last owner. The API refuses with a
400. Add a second owner first, then demote or remove.
Read next
Section titled “Read next”- Company and Product — what lives inside a company and why ICP attaches to products rather than companies.
- Usage and costs — per-company usage attribution and the auto-tracked vs user-entered cost split.
- Build a saved filter — including the shared vs private distinction.