Profile Levels
Profile levels define score ranges that categorize leads based on their demographic/firmographic fit. Use these to bucket leads into "Poor Fit", "Good Fit", "Excellent Fit", etc. based on ICP matching.
When to Use This
- Categorize leads by ICP fit: Group leads into fit categories independent of behavioral engagement
- Multi-dimensional qualification: Combine profile fit levels with engagement levels for complete lead scoring
- Target messaging by fit: Send different messages to "Excellent Fit" vs "Poor Fit" prospects
- Sales prioritization: Focus on high engagement + high fit leads first
GET /profile-levels
List all profile levels for the active Organizational Unit.
Request
curl -u "CLIENT_ID:CLIENT_SECRET" \
"https://your-api.example.com/profile-levels"
Response
Status: 200 OK
{
"levels": [
{
"id": "level-123",
"name": "Poor Fit",
"min_score": 0,
"max_score": 29,
"color": "#94a3b8",
"order": 1
},
{
"id": "level-456",
"name": "Good Fit",
"min_score": 30,
"max_score": 69,
"color": "#fbbf24",
"order": 2
},
{
"id": "level-789",
"name": "Excellent Fit",
"min_score": 70,
"max_score": null,
"color": "#22c55e",
"order": 3
}
]
}
POST /profile-levels
Create a new profile level.
Request
curl -X POST https://your-api.example.com/profile-levels \
-u "CLIENT_ID:CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{
"name": "Perfect Fit",
"min_score": 90,
"max_score": null,
"color": "#16a34a",
"order": 4
}'
Request Body
| Field | Required | Type | Description |
|---|---|---|---|
name | Yes | string | Level label (e.g., "Good Fit", "Poor Fit") |
min_score | Yes | number | Minimum profile score for this level (inclusive) |
max_score | No | number | Maximum profile score for this level (inclusive). Use null for no upper limit. |
color | No | string | Hex color code for UI display (default: #64748b) |
order | No | number | Display order (lower = shown first) |
Response
Status: 201 Created
{
"id": "level-xyz",
"name": "Perfect Fit",
"min_score": 90,
"max_score": null,
"color": "#16a34a",
"order": 4,
"created_at": "2025-01-15T11:00:00Z"
}
Common Errors
| Status Code | Error | Solution |
|---|---|---|
| 400 | Score ranges overlap | Ensure max_score of one level doesn't overlap min_score of another |
| 400 | Invalid color format | Use hex color codes like #22c55e |
| 409 | Level name exists | Choose a unique name or update existing level |
Example Use Case
Scenario: Create a 3-tier profile fit system based on ICP matching
# Poor Fit: 0-29 points (small companies, wrong industry)
POST /profile-levels
{"name": "Poor Fit", "min_score": 0, "max_score": 29, "color": "#94a3b8", "order": 1}
# Good Fit: 30-69 points (medium companies, adjacent industries)
POST /profile-levels
{"name": "Good Fit", "min_score": 30, "max_score": 69, "color": "#fbbf24", "order": 2}
# Excellent Fit: 70+ points (enterprise companies, target industry, C-level)
POST /profile-levels
{"name": "Excellent Fit", "min_score": 70, "max_score": null, "color": "#22c55e", "order": 3}
Result: Leads are automatically categorized by ICP match:
- Small retail company contact = "Poor Fit" (15 points)
- Mid-size tech company manager = "Good Fit" (45 points)
- Enterprise tech company VP = "Excellent Fit" (85 points)
Multi-Dimensional Scoring Example
Combine engagement levels with profile levels for complete qualification:
| Engagement | Profile Fit | Action |
|---|---|---|
| Hot (75+) | Excellent Fit (70+) | Top Priority - Immediate outreach |
| Hot (75+) | Good Fit (30-69) | High Priority - Personalized outreach |
| Hot (75+) | Poor Fit (0-29) | Medium Priority - Nurture or disqualify |
| Warm (25-49) | Excellent Fit (70+) | High Priority - Warm up for conversion |
| Cold (0-24) | Excellent Fit (70+) | Medium Priority - Nurture with targeted content |
| Cold (0-24) | Poor Fit (0-29) | Low Priority - Exclude from outreach |
Important Notes
Profile Scoring Required
Profile levels require active profile scoring rules. Set up:
- Profile mappings: Map event metadata to profile fields
POST /profile-mappings
{"metadata_key": "company_size", "profile_field": "company_employee_count"}
- Profile ruleset: Create ruleset for ICP scoring
POST /profile-scoring/rulesets
{"name": "ICP Fit Score"}
- Profile rules: Define scoring logic
POST /profile-scoring/rulesets/{id}/rules
{"profile_field": "company_employee_count", "value": "501+", "weight": 50}
- Profile levels: Categorize scores into fit levels (this endpoint)
Score Range Rules
- Ranges must not overlap
max_scorecan benullto indicate "no upper limit"- Highest level should have
max_score: null - Lowest level should have
min_score: 0
Related Endpoints
- Update/Delete Profile Levels
- Engagement Levels - For behavioral scoring
- Profile Scoring Rules - Define ICP scoring logic
- Profile Mappings - Map metadata to profile fields