agentleFS
TomGranotTomGranot/hubspot-admin-skills/skills/create-segment-lists/SKILL.md

create-segment-lists

Skill75 starsChanged 20 days agoMITView on GitHub

Create business segment lists in HubSpot for customers, partners, competitors, employees, ICP tiers, and industries. Enables segment-based targeting, suppression, and analytics.

  • Reads credentials

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 11 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈11

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before executing, collect the following information from the user:

    line 24
  2. Distinctive:

    Default: Core business segments (Customers, Partners, Competitors, Internal) plus ICP tiers and engagement-based segments

    line 28
  3. Distinctive:

    Default: Any email engagement (open or click) within the last 90 days

    line 32
  4. Distinctive:

    Run the requirements interview above and decide which segments are relevant to the business.

    line 74
  5. Distinctive:

    Check for existing lists that overlap — merge or rename rather than creating duplicates.

    line 75
  6. Distinctive:

    Use the Lists API (v3) to create active (smart) lists:

    line 84
  7. Distinctive:

    Create each list, verify member count, and document the list ID.

    line 121
  8. Distinctive:

    Check member counts for each list — do they match expectations?

    line 127
  9. Distinctive:

    Verify no contacts appear in mutually exclusive lists (e.g., both Customer and Competitor).

    line 128
  10. Distinctive:

    Check if any workflows or emails reference the list before deleting.

    line 135
  11. Very specific:

    Use a consistent naming convention: [Category] - Segment Name (e.g., [ICP] - Tier 1, [Industry] - Manufacturing).

    line 139
  12. Distinctive:

    Use these lists as building blocks for email sends, ad audiences, and workflow enrollment triggers.

    line 141

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Create Segment Lists

Build a library of segment lists that enable targeted marketing, accurate reporting, and proper suppression. These lists form the foundation of segment-based operations.

Prerequisites

  • A HubSpot service key (HUBSPOT_ACCESS_TOKEN in .env; an existing legacy private app token also works) with crm.lists.read and crm.lists.write scopes
  • Python 3.10+ with uv
  • ICP tier property created (run /create-icp-tiers first)
  • Lifecycle stages cleaned up (run /fix-lifecycle-stages first)

Interview: Gather Requirements

Before executing, collect the following information from the user:

Q1: What are your key customer segments?

  • Examples: Industry verticals (Manufacturing, Professional Services, Retail, Education, Logistics), company size tiers (Enterprise, Mid-Market, SMB), geographic regions (North America, EMEA, APAC)
  • Default: Core business segments (Customers, Partners, Competitors, Internal) plus ICP tiers and engagement-based segments

Q2: What engagement criteria define "active" for your business?

  • Examples: Email open or click in last 90 days, website visit in last 60 days, form submission in last 30 days, meeting booked in last 90 days
  • Default: Any email engagement (open or click) within the last 90 days

Recommended Segments

Core Business Segments

List NameTypeCriteria
All CustomersActiveLifecycle stage = Customer
All PartnersActiveContact type = Partner (or custom property)
CompetitorsStaticManually curated from known competitor domains
Internal EmployeesActiveEmail domain matches company domain
Suppressed ContactsActiveMarketing status = non-marketing OR globally unsubscribed

ICP-Based Segments

List NameTypeCriteria
ICP Tier 1ActiveICP tier property = Tier 1
ICP Tier 2ActiveICP tier property = Tier 2
ICP Tier 3ActiveICP tier property = Tier 3
Non-ICPActiveICP tier property = Non-ICP or unknown

Industry Segments

List NameTypeCriteria
[Industry Name]ActiveIndustry = [value]
(Create one per target industry)

Engagement Segments

List NameTypeCriteria
Highly Engaged (90 days)ActiveEmail open or click in last 90 days
Disengaged (6+ months)ActiveNo email engagement in 180+ days
Never EngagedActiveNo email opens ever AND created 30+ days ago

Step-by-Step Instructions

Stage 1: Plan

  1. Run the requirements interview above and decide which segments are relevant to the business.
  2. Check for existing lists that overlap — merge or rename rather than creating duplicates.

Stage 2: Before

  1. Confirm the properties these lists depend on are populated (ICP tier, lifecycle stage, industry).
  2. Inventory existing lists (POST /crm/v3/lists/search) and record the baseline count.

Stage 3: Execute — Create Lists

Use the Lists API (v3) to create active (smart) lists:

import os, requests
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.environ["HUBSPOT_ACCESS_TOKEN"]
BASE = "https://api.hubapi.com"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

# Example: Create "All Customers" list
resp = requests.post(f"{BASE}/crm/v3/lists", headers=HEADERS, json={
    "name": "All Customers",
    "objectTypeId": "0-1",  # contacts
    "processingType": "DYNAMIC",
    "filterBranch": {
        "filterBranchType": "OR",
        "filterBranches": [{
            "filterBranchType": "AND",
            "filterBranches": [],
            "filters": [{
                "filterType": "PROPERTY",
                "property": "lifecyclestage",
                "operation": {
                    "operationType": "ENUMERATION",
                    "operator": "IS_ANY_OF",
                    "values": ["customer"],
                },
            }],
        }],
        "filters": [],
    },
})
resp.raise_for_status()

Create each list, verify member count, and document the list ID.

For static lists (Competitors), create the list and manually add contacts or import from a CSV.

Stage 4: After

  1. Check member counts for each list — do they match expectations?
  2. Verify no contacts appear in mutually exclusive lists (e.g., both Customer and Competitor).
  3. Confirm lists are visible to the appropriate teams.

Rollback

  • Lists can be deleted via the API or UI.
  • Deleting a list does not affect the contacts in it — only the list definition is removed.
  • Check if any workflows or emails reference the list before deleting.

Tips

  • Use a consistent naming convention: [Category] - Segment Name (e.g., [ICP] - Tier 1, [Industry] - Manufacturing).
  • Review segment membership quarterly — segments should grow or shrink in expected ways.
  • Use these lists as building blocks for email sends, ad audiences, and workflow enrollment triggers.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.