log in sign up now
Attio Campaign Segment Builder back to library
~ / library / Prospecting / attio-campaign-segment-builder

Attio Campaign Segment Builder

Turn a targeting brief like "VP+ Fintech, 200-1000 employees" into an Attio list, matching existing records first and topping up with net-new people from MoltSets. Every email returned is graded A-F for deliverability risk, and you pick which grades to keep.
  • Build a campaign list of VP+ Fintech contacts at 200-1000 employee companies, top up from MoltSets if needed
  • I need 500 Director+ Marketing contacts at mid-market SaaS companies for a campaign

What this skill does

Builds a campaign-ready list against a plain-English brief. It translates the brief into title, seniority, industry, and company size filters, matches against your existing Attio person records first, and only pulls net-new people from MoltSets to make up the shortfall to your target list size. Existing records are never duplicated, and the output is a single Attio list sized to the brief.

Chain

Targeting brief (title / seniority / industry / size / target count)
  to attio/query-records                (existing people matching the brief)
  to compare match count against target list size
  to MoltSets:
      search_people                     (title/seniority/department + industry + employee_range, if shortfall)
  to dedupe candidates against existing Attio records
  to linkedin_to_best_email             (fill email gaps on net-new candidates)
  to attio/create-record                (create net-new person records)
  to attio/add-list-entry               (add existing + net-new records to the target list)

Inputs

  • Targeting brief - title/seniority, department, industry, employee range, and any other firmographic filter
  • Target list size - how many total records the campaign needs
  • Existing-record priority - whether to use existing Attio records first, always, or only above a certain match quality
  • List name - the Attio list the result should be saved to
  • Acceptable risk scores - which A-F deliverability grades to keep (recommended: A, B, C and F; D excluded)

How it works

  1. Parses the brief into structured filters: title or seniority, department, industry, and employee range
  2. Searches existing Attio person records against those filters first
  3. If the existing match count falls short of the target list size, runs search_people in MoltSets with the same filters to source net-new candidates
  4. Dedupes the candidates against existing Attio records by email and domain plus name
  5. Runs linkedin_to_best_email on any net-new candidate missing an email
  6. Creates the net-new person records in Attio and adds both existing and net-new records to the named list

Output

Name Company Title Seniority Industry Email Risk Source Existing/Net-New Added to List
Target list size:            X
Existing matches used:       X
Net-new candidates sourced:  X
Net-new added to Attio:      X
Final list size:             X
MoltSets tokens used:        X

Email risk scores:
  A: X   B: X   C: X   D: X   F: X
  kept (accepted grades):  X
  filtered (excluded):     X

Search filters

search_people filters on query, company, company_domain, country, state, city, seniority, department or functional_area, industry, linkedin_industry, naics_code, employee_range, and revenue_range.

  • Filters are free precision - execution cost comes from the free-text query, so a filters-only search runs ~40x cheaper and lands more precisely. A bare query is never the right shape; at minimum it gets country attached (~99% fill rate).
  • Size and revenue apply to the person's current employer - "VPs at 51-200 employee software companies" is one call, not a company search followed by a people search.
  • Three industry vocabularies - broad industry buckets, LinkedIn's ~150 niche labels, or a NAICS code at any depth. Shortening the code widens the net.
  • Sparse filters are the usual cause of a thin result set - seniority/industry/department are ~60% filled and naics_code/linkedin_industry ~50%, and every filter is exact-match, silently dropping records where the field is empty.
  • Sizing is free - count_only: true returns a match count without fetching data or charging tokens, and every response carries results.total to read before paginating.

Tips

  • Requires the Attio MCP (mcp.attio.com) and the MoltSets MCP connected in the same client
  • Prioritising existing Attio records 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
  • Attio lists can hold a mix of standard and custom object records, so this works for non-person target lists too if your brief calls for it
  • Every returned email carries an A-F deliverability risk score; you're asked up front which grades to keep, and out-of-range grades are shown and flagged rather than silently dropped
01 Download the .moltsets skill file below
02 Open Claude and go to Settings to Skills
03 Click Add skill and select the downloaded file
04 Open a new chat in Claude
05 Prompt Claude using one of the example prompts or use your own
// difficultyIntermediate
// connectionAttio, Claude Chat
// got a skill of your own? Submit it to the library