Create ICP Tier Property and Classification Workflows
Classify every company in the CRM into an Ideal Customer Profile tier based on firmographic data. Creates a custom dropdown property and 4 automated workflows that continuously classify companies as they enter or change.
Why This Matters
Without ICP classification, every inbound lead looks the same regardless of whether they come from a large enterprise in a target vertical or a tiny company in an irrelevant industry. Sales and marketing have no systematic way to prioritize outreach, allocate resources, or differentiate campaigns by company fit. ICP Tier is also a major input to the lead scoring model.
Prerequisites
- - Super Admin permissions in HubSpot
- Access to Automation > Workflows (Marketing Hub Professional or higher)
- Data enrichment processes completed (company name, industry, geo values) so company data is as complete as possible
- Company properties Number of Employees and Industry should be well-populated. Check coverage:
- Industry: aim for 80%+ populated
- Employee count: aim for 80%+ populated
- Companies missing these fields will fall to "Not ICP" (conservative, intentional)
Interview: Gather Requirements
Before executing, collect the following information from the user:
Q1: What industries define your ideal customer?
- - Examples: Manufacturing, Professional Services, Logistics, Retail, Education, Media & Entertainment, Hospitality, Real Estate, Agriculture
- Default: No default -- this is highly business-specific and must be provided by the user
Q2: What employee count ranges define your tiers?
- - Examples: Tier 1: 1,000+, Tier 2: 200-999, Tier 3: 50-199, Not ICP: under 50
- Default: Tier 1: 1,000+, Tier 2: 200-999, Tier 3: 50-199
Q3: Are there any other firmographic criteria?
- - Examples: Annual revenue thresholds, geographic restrictions (US-only, EMEA, etc.), specific technologies used, funding stage
- Default: None -- industry and employee count are the primary classification axes
Plan
- 1. Define your ICP tier criteria (industry verticals + employee count thresholds)
- Create the ICP Tier custom property via API or UI
- Build 4 classification workflows (Tier 1, Tier 2, Tier 3, Not ICP)
- Activate workflows in staggered sequence
- Verify classification results (after state)
Before State
Define Your ICP Tiers
Before building anything, define your criteria framework:
| Tier | Label | Industry Verticals | Employee Threshold |
|---|
| Tier 1 | Primary ICP | [Your primary verticals, e.g., Manufacturing, Professional Services, Logistics] | [e.g., 1,000+] |
| Tier 2 |
Secondary ICP | [Your secondary verticals, e.g., Retail, Education, Media & Entertainment] | [e.g., 200+] |
| Tier 3 | Tertiary ICP | [Your tertiary verticals, e.g., Hospitality, Real Estate, Agriculture] | [e.g., 200+] |
| Not ICP | Not ICP | Everything else | Any |
Size-based demotion pattern: Companies in a higher-tier industry but below that tier's employee threshold should be demoted to the next tier down, not classified as "Not ICP". For example:
- - A company in a Tier 1 industry with fewer than 1,000 but more than 200 employees -> Tier 2
- A company in a Tier 2 industry with fewer than 200 but more than 50 employees -> Tier 3
- Only companies below 50 employees in any ICP industry, or in non-ICP industries entirely, should be "Not ICP"
This ensures ICP-relevant companies are never lost due to size alone.
Audit Current State
CODEBLOCK0
Execute
Step 1: Create the ICP Tier Property
Choose a property name that fits your CRM conventions (e.g., company_segment, buyer_tier, or icp_tier). The name is configurable -- just be consistent across workflows and lists.
Via API (recommended):
CODEBLOCK1
Via UI: Settings > Properties > Company properties > Create property > Dropdown select with the four tier options.
Step 2: Build Classification Workflows
Build 4 company-based workflows in the HubSpot UI. Workflows must use filter-based triggers ("When filter criteria is met") with AND logic.
Building the Classification Workflows: Three Options
Option 1: Manual UI Build. Follow the per-workflow specifications below. This is the most reliable method and gives you full control over every trigger and action.
Option 2: HubSpot Breeze AI. Navigate to Automation > Workflows > Create workflow > "Describe what you want" and paste the following prompt (repeat for each tier, adjusting the tier name, industries, and thresholds):
CODEBLOCK2
For the Not ICP catch-all workflow, use:
CODEBLOCK3
CRITICAL WARNING: Breeze trigger limitations. Breeze creates event-based triggers (OR logic) instead of filter-based triggers (AND logic). This is especially dangerous for ICP classification because event-based triggers fire when any single property changes, regardless of other conditions, leading to incorrect tier assignments. After Breeze creates each workflow, you MUST manually verify and rebuild the triggers to use filter-based enrollment with AND logic. Breeze is best used for creating the workflow skeleton (actions, delays) -- the trigger conditions almost always need manual correction.
Additional Breeze limitations:
- - Breeze cannot create "is unknown" filter conditions reliably -- verify that the "ICP Tier is unknown" guard is correctly configured
- Breeze cannot configure re-enrollment rules
- Breeze cannot create multiple filter groups with OR between groups and AND within groups (needed for Tier 2 and Tier 3 demotion logic)
Option 3: Claude Anthropic Chrome Extension. The Claude Chrome extension lets Claude see and interact with the HubSpot workflow builder UI directly. You can describe each workflow's logic in natural language and Claude will click through the UI to build it. This is often more accurate than Breeze for the ICP workflows because of their complex multi-group filter logic and the critical requirement for AND-based triggers. Build the four workflows one at a time, activating in the staggered sequence described in Step 3.
Note on Fast Mode: If you're using Claude Code's Fast Mode to speed up workflow creation,
be aware of the billing model: Haiku usage is included in your subscription, but Opus in
Fast Mode consumes extra credits. For workflow building tasks (which are UI-heavy and may
require many interactions), consider whether the speed tradeoff is worth the credit cost.
Workflow Specifications
Workflow 1: Tier 1 (Primary ICP)
- - Name: INLINECODE3
- Trigger: When filter criteria is met
- Number of Employees >= [your threshold, e.g., 1,000]
- AND Industry is any of [your primary verticals and their variants]
- - Re-enrollment: ON (for all trigger properties)
- Action: Set ICP Tier = "Tier 1 - Primary ICP"
Industry variant tip: HubSpot has multiple labels for the same vertical. For example, "Manufacturing" might appear as "Manufacturing", "Industrial Automation", "Machinery", "Electrical/Electronic Manufacturing". Include ALL relevant variants in the "is any of" filter. Check what values actually exist in your data.
Workflow 2: Tier 2 (Secondary ICP)
- - Name: INLINECODE4
- Trigger: When filter criteria is met
Filter Group 1 — Secondary industries at threshold:
- - Number of Employees >= [e.g., 200]
- AND Industry is any of [your secondary verticals and variants]
- AND ICP Tier is unknown (prevents overwriting Tier 1)
Filter Group 2 — Primary industries demoted by size:
- - Number of Employees >= [e.g., 200]
- AND Number of Employees <= [e.g., 999]
- AND Industry is any of [your primary verticals and variants]
- AND ICP Tier is unknown
- - Re-enrollment: ON
- Action: Set ICP Tier = "Tier 2 - Secondary ICP"
Workflow 3: Tier 3 (Tertiary ICP)
- - Name: INLINECODE5
- Trigger: When filter criteria is met
- Multiple filter groups for:
- Tertiary industries at threshold
- Primary industries demoted by size (below Tier 2 threshold)
- Secondary industries demoted by size (below Tier 2 threshold)
- Each group includes AND ICP Tier is unknown
- - Re-enrollment: ON
- Action: Set ICP Tier = "Tier 3 - Tertiary ICP"
Workflow 4: Not ICP (Catch-All)
- - Name: INLINECODE6
- Trigger: When filter criteria is met
- ICP Tier is unknown
- - Re-enrollment: ON
- Action 1: Delay (30-90 minutes) to let tiered workflows process first
- Action 2: Set ICP Tier = "Not ICP"
Step 3: Activation Sequence
Activate workflows in staggered sequence to prevent race conditions:
- 1. Activate Tier 1 workflow -> enroll existing companies
- Wait a few minutes (3-10 minutes)
- Activate Tier 2 workflow -> enroll existing companies
- Wait a few minutes (3-10 minutes)
- Activate Tier 3 workflow -> enroll existing companies
- Wait a few minutes (3-10 minutes)
- Activate Not ICP workflow -> enroll existing companies
The stagger ensures higher-priority tiers process first. The "ICP Tier is unknown" filter on Tiers 2-4 prevents overwriting, and the delay on Not ICP provides additional buffer.
After State
Wait 2-4 hours for all workflows to process, then verify.
CODEBLOCK4
Verification checklist:
- 1. Total coverage: 0 companies with ICP Tier unknown
- Distribution sanity: Tier 1 should be the smallest group, Not ICP the largest. If Tier 1 is huge, the employee threshold may be too low or industry list too broad.
- Spot-check Tier 1: Open 5-10 Tier 1 companies. Confirm each has the correct employee count and industry.
- Spot-check demotions: Find Tier 2 companies in primary ICP industries. Confirm they have employee counts below the Tier 1 threshold but above the Tier 2 threshold.
- Spot-check Not ICP: Open 5-10 Not ICP companies. Confirm each has at least one disqualifying factor (low employee count, non-ICP industry, or missing data).
- Check workflow errors: Review each workflow's history for failures.
Key Technical Learnings
- - CRITICAL: Breeze AI creates wrong trigger types. Breeze generates event-based triggers (OR logic between groups) instead of filter-based triggers (AND logic within groups). Event-based triggers mean any single property change enrolls the company regardless of other conditions. Always verify triggers manually or build them from scratch.
- Activation sequence prevents race conditions. Stagger activation (Tier 1 first, then 2, then 3, then Not ICP) so higher-priority tiers claim companies before lower tiers. The "ICP Tier is unknown" filter provides additional protection.
- The delay on Not ICP is critical. Without it, the catch-all workflow would classify companies as Not ICP before tiered workflows have a chance to process them. A delay of 30-90 minutes is typical.
- Size-based demotion is the key design pattern. Never classify a company in an ICP industry as "Not ICP" just because it is smaller than the primary threshold. Demote to the next tier instead. This preserves ICP-adjacent companies for secondary targeting.
- Companies with missing data fall to Not ICP. This is intentional and conservative. If you later enrich company data (via data provider, manual entry, or Breeze Intelligence), the re-enrollment triggers automatically reclassify those companies.
- Do not manually edit ICP Tier values. The workflows manage this property. If you need exceptions, create a separate "ICP Tier Override" property and adjust workflows to respect it.
- Include industry label variants. HubSpot has multiple labels for the same vertical (e.g., "Manufacturing" vs "Industrial Automation" vs "Machinery" vs "Electrical/Electronic Manufacturing"). Check what values actually exist in your data and include all relevant variants in your workflow filters.
- Validate with a script after Breeze creates workflows. If your HubSpot API token has the
automation-access scope, you can read workflow definitions via the Workflows API and programmatically verify that triggers match your spec.
创建ICP分层属性与分类工作流
根据企业画像数据,将CRM中的每家公司分类到理想客户画像层级中。创建一个自定义下拉属性及4个自动化工作流,持续对进入或变更的公司进行分类。
为何重要
没有ICP分类,每个入站线索看起来都一样,无论它们来自目标垂直行业的大型企业,还是来自无关行业的小公司。销售和营销团队没有系统化的方法来优先安排外联、分配资源或根据公司匹配度区分营销活动。ICP分层也是线索评分模型的重要输入。
前提条件
- - HubSpot中的超级管理员权限
- 访问自动化 > 工作流(Marketing Hub Professional或更高版本)
- 完成数据丰富流程(公司名称、行业、地理位置值),确保公司数据尽可能完整
- 公司属性员工数量和行业应充分填充。检查覆盖率:
- 行业:目标填充率80%以上
- 员工数量:目标填充率80%以上
- 缺少这些字段的公司将归为非ICP(保守且有意为之)
访谈:收集需求
执行前,从用户处收集以下信息:
问题1:哪些行业定义了您的理想客户?
- - 示例:制造业、专业服务、物流、零售、教育、媒体与娱乐、酒店、房地产、农业
- 默认值:无默认值——这高度依赖具体业务,必须由用户提供
问题2:哪些员工数量范围定义了您的层级?
- - 示例:第1层:1,000+,第2层:200-999,第3层:50-199,非ICP:50以下
- 默认值:第1层:1,000+,第2层:200-999,第3层:50-199
问题3:是否有其他企业画像标准?
- - 示例:年收入门槛、地理限制(仅美国、EMEA等)、使用的特定技术、融资阶段
- 默认值:无——行业和员工数量是主要分类轴
计划
- 1. 定义您的ICP层级标准(行业垂直领域 + 员工数量阈值)
- 通过API或UI创建ICP层级自定义属性
- 构建4个分类工作流(第1层、第2层、第3层、非ICP)
- 按交错顺序激活工作流
- 验证分类结果(后状态)
前状态
定义您的ICP层级
在构建任何内容之前,定义您的标准框架:
| 层级 | 标签 | 行业垂直领域 | 员工阈值 |
|---|
| 第1层 | 主要ICP | [您的主要垂直领域,例如:制造业、专业服务、物流] | [例如:1,000+] |
| 第2层 |
次要ICP | [您的次要垂直领域,例如:零售、教育、媒体与娱乐] | [例如:200+] |
| 第3层 | 第三级ICP | [您的第三级垂直领域,例如:酒店、房地产、农业] | [例如:200+] |
| 非ICP | 非ICP | 其他所有 | 任意 |
基于规模的降级模式: 处于较高级别行业但员工数量低于该层级阈值的公司应降级到下一层级,而不是归类为非ICP。例如:
- - 处于第1层行业但员工少于1,000且多于200的公司 -> 第2层
- 处于第2层行业但员工少于200且多于50的公司 -> 第3层
- 只有员工低于50的任何ICP行业公司,或完全处于非ICP行业的公司,才应归为非ICP
这确保ICP相关公司永远不会仅因规模而被遗漏。
审计当前状态
python
import os
from hubspot import HubSpot
from dotenv import load_dotenv
load_dotenv()
apiclient = HubSpot(accesstoken=os.getenv(HUBSPOTAPITOKEN))
检查ICP层级属性是否已存在
使用您选择的属性名称(例如:companysegment、buyertier、icp_tier)
PROPERTY
NAME = companysegment
try:
prop = api
client.crm.properties.coreapi.get
byname(
object
type=companies, propertyname=PROPERTY_NAME
)
print(fICP层级属性已存在:{prop.label})
except Exception:
print(fICP层级属性{PROPERTY_NAME}尚不存在)
检查分类的数据覆盖率
for prop_name in [industry, numberofemployees]:
result = api
client.crm.companies.searchapi.do_search(
public
objectsearch_request={
filterGroups: [{
filters: [{
propertyName: prop_name,
operator: NOT
HASPROPERTY
}]
}],
limit: 0
}
)
print(f缺少{prop_name}的公司数:{result.total})
执行
步骤1:创建ICP层级属性
选择适合您CRM惯例的属性名称(例如:companysegment、buyertier或icp_tier)。名称可配置——只需在工作流和列表中保持一致。
通过API(推荐):
python
from hubspot.crm.properties import ModelProperty, PropertyCreate
在此处配置您的属性名称
PROPERTY
NAME = companysegment
apiclient.crm.properties.coreapi.create(
object_type=companies,
property_create=PropertyCreate(
name=PROPERTY_NAME,
label=ICP层级,
type=enumeration,
field_type=select,
group_name=companyinformation,
description=基于行业和员工数量的自动化ICP分类。由工作流设置——请勿手动编辑。,
options=[
{label: 第1层 - 主要ICP, value: tier1primary, displayOrder: 0},
{label: 第2层 - 次要ICP, value: tier2secondary, displayOrder: 1},
{label: 第3层 - 第三级ICP, value: tier3tertiary, displayOrder: 2},
{label: 非ICP, value: not_icp, displayOrder: 3},
]
)
)
通过UI: 设置 > 属性 > 公司属性 > 创建属性 > 下拉选择,包含四个层级选项。
步骤2:构建分类工作流
在HubSpot UI中构建4个基于公司的工作流。工作流必须使用基于过滤器的触发器(当满足过滤器条件时),采用AND逻辑。
构建分类工作流:三种选项
选项1:手动UI构建。 按照下面的每个工作流规范进行操作。这是最可靠的方法,让您完全控制每个触发器和操作。
选项2:HubSpot Breeze AI。 导航至自动化 > 工作流 > 创建工作流 > 描述您想要的内容,粘贴以下提示(为每个层级重复,调整层级名称、行业和阈值):
创建一个基于公司的工作流,当满足过滤器条件时触发:
- - 员工数量大于或等于[阈值]
- 且行业是以下任何一个[列出您的行业]
- 且自定义属性ICP层级为未知
该工作流应将自定义属性ICP层级设置为[层级值]。
为所有触发属性启用重新注册。
对于非ICP兜底工作流,使用:
创建一个基于公司的工作流,当满足过滤器条件时触发:
该工作流应等待延迟(30-90分钟)让分层工作流先处理,然后将自定义属性ICP层级设置为非ICP。
启用重新注册。
关键警告:Breeze触发器限制。 Breeze创建的是基于事件的触发器(OR逻辑),而不是基于过滤器的触发器(AND逻辑)。这对ICP分类尤其危险,因为基于事件的触发器会在任何单个属性变更时触发,无论其他条件如何,导致错误的层级分配。在Breeze创建每个工作流后,您必须手动验证并重建触发器,以使用基于过滤器的注册和AND逻辑。Breeze最适合用于创建工作流骨架(操作、延迟)——触发器条件几乎总是需要手动修正。
Breeze的其他限制:
- - Breeze无法可靠地创建为未知过滤器条件——验证ICP层级为未知的保护条件是否正确配置
- Breeze无法配置重新注册规则
- Breeze无法创建多个过滤器组,组间使用OR逻辑,组内使用AND逻辑(第2层和第3层降级逻辑需要)
选项3:Claude Anthropic Chrome扩展。 Claude Chrome扩展让Claude能够直接查看并与HubSpot工作流构建器UI交互。您可以用自然语言描述每个工作流的逻辑,Claude将通过UI点击来构建它。对于ICP工作流,这通常比Breeze更准确,因为其复杂的多组过滤器逻辑以及基于AND的触发器的关键要求。一次构建一个工作流,按照步骤3中描述的交错顺序激活。
关于快速模式的说明:如果您使用Claude Code的快速模式来加速工作流创建,
请注意计费模式:Ha