---
name: moltsets-hubspot-campaign-segment-builder
description: Use this skill when the user wants to build a HubSpot campaign list from a plain-English targeting brief - matching existing HubSpot contacts first and topping up net-new people from MoltSets to hit a target list size.
---

# HubSpot Campaign Segment Builder

Build a campaign-ready HubSpot static list against a plain-English brief. Translate the brief into title, seniority, industry, and company-size filters, match existing HubSpot contacts first, and only pull net-new people from MoltSets to make up the shortfall. Existing contacts are never duplicated; the output is a single static list sized to the brief.

## Triggers

"Build a campaign list of VP+ Fintech contacts at 200-1000 employee companies", "I need 500 Director+ Marketing contacts at mid-market SaaS companies for a campaign", "build me a segment from this brief and top up from MoltSets". Use when the user has a targeting brief and a target list size and wants a HubSpot static list.

## Requirements

- HubSpot remote MCP (mcp.hubspot.com) and the MoltSets MCP connected in the same client
- Custom objects are not reachable through HubSpot's remote MCP - create standard contact records and standard lists

## Chain

```
Targeting brief (title / seniority / industry / size / target count)
  -> hubspot/search-crm-objects        (existing contacts matching the brief)
  -> compare match count against target list size
  -> MoltSets:
       search_people                   (title/seniority/department + industry + employee_range, if shortfall)
  -> dedupe candidates against existing HubSpot contacts
  -> linkedin_to_best_email            (fill email gaps on net-new candidates)
  -> hubspot/create-object             (create net-new contacts)
  -> hubspot/create-list / add-to-list (build the static list from existing + net-new)
```

## Inputs

- **Targeting brief** - title/seniority, department, industry, employee range, and any other firmographic filter
- **Target list size** - how many total contacts the campaign needs
- **Existing-contact priority** - use existing HubSpot contacts first, always, or only above a certain match quality
- **List name** - the HubSpot static list the result should be saved to

## Steps

1. Parse the brief into structured filters: title or seniority, department, industry, and employee range.
2. Search existing HubSpot contacts against those filters first with `hubspot/search-crm-objects`.
3. If the existing match count falls short of the target list size, run `search_people` in MoltSets with the same filters to source net-new candidates.
4. Dedupe candidates against existing HubSpot contacts by email and domain plus name.
5. Run `linkedin_to_best_email` on any net-new candidate missing an email.
6. Create the net-new contacts in HubSpot and add both existing and net-new contacts to the named static list.

## Output

| Name | Company | Title | Seniority | Industry | Source | Existing/Net-New | Added to List |
| --- | --- | --- | --- | --- | --- | --- | --- |

```
Target list size:            X
Existing matches used:       X
Net-new candidates sourced:  X
Net-new added to HubSpot:    X
Final list size:             X
MoltSets tokens used:        X
```

## Tips

- Prioritising existing HubSpot contacts first keeps token spend down and avoids working an account you already have a relationship with.
- If the brief is vague on seniority, run a small sample first and confirm the mapping before sourcing the full shortfall.
- A per-company cap keeps a single large account from dominating the list at the expense of coverage.
