Skip to main content

Overview

Take an enriched Extruct table and a hypothesis set, then segment companies by hypothesis fit and assign tiers based on data richness and signal strength. Outputs a tiered, segmented list ready for email generation.

When to Use

Trigger this skill when you need to:
  • Segment companies by hypothesis fit
  • Tier companies for prioritization
  • Prioritize your list for outreach
  • Determine which companies get personalized emails
  • Decide messaging order and depth
Trigger phrases: “segment”, “tier”, “segment companies”, “tier companies”, “prioritize list”, “segment and tier”, “tiering”, “which companies first”

Inputs

enriched_table
string
required
Extruct table ID from the list-enrichment skill containing company data with enrichment columns
hypothesis_set
string
required
Path to hypothesis set file: claude-code-gtm/context/{vertical-slug}/hypothesis_set.md
context_file
string
Company context file: claude-code-gtm/context/{company}_context.md (recommended for better segmentation)

Environment Setup

1

Verify API Token

The skill checks for EXTRUCT_API_TOKEN environment variable. If missing, you’ll be prompted to provide your Extruct API token.
export EXTRUCT_API_TOKEN=<your-token>
2

API Configuration

Base URL: https://api.extruct.ai/v1Authentication uses Bearer token in headers.

Workflow

1

Load Data

Fetch enriched table data via GET /tables/{table_id}/data and parse all rows with their enrichment column values.Read the hypothesis set file and parse each hypothesis into:
  • Number and short name
  • Description with data points
  • Best-fit company type
2

Match Companies to Hypotheses

For each company row, evaluate which hypothesis fits best by considering:
  1. Enrichment data alignment — Do the enrichment column values match the hypothesis’s “best fit” description?
  2. Signal strength — How many enrichment columns have useful data (not N/A)?
  3. Specificity — Does the company’s profile match the hypothesis narrowly or broadly?
Assign each company ONE primary hypothesis. If multiple fit, pick the strongest signal.
For each company:
  1. Read all enrichment values
  2. For each hypothesis:
     - Does the company's vertical/industry match the "best fit"?
     - Do enrichment values confirm the hypothesis pain point?
     - Is there a specific data point that makes this hypothesis resonate?
  3. Pick the hypothesis with the strongest evidence
  4. If no hypothesis fits well, mark as "Unmatched"
3

Assign Tiers

Three tiers based on fit strength and data richness:
TierCriteriaAction
Tier 1Strong hypothesis fit + data-rich (3+ enrichment fields populated) + clear hook signalPersonalized email via email-response-simulation review
Tier 2Medium hypothesis fit OR data-rich but no clear hookStandard templated email via email-generation
Tier 3Weak fit OR missing data (2+ fields N/A) OR unmatched hypothesisHold for re-enrichment or different campaign
  • CEO/leadership made a public statement related to the hypothesis
  • Recent news directly relevant to the pain point
  • Hiring for roles that signal the hypothesis pain
  • High hypothesis fit score from enrichment (grade 4-5)
  • Most enrichment fields returned N/A
  • No hypothesis match above threshold
  • Company profile too generic to confidently segment
4

Generate Output

Output a segmented list in two formats:Markdown table (for review):
## Segmented List: [Campaign Name]

### Tier 1 — [N] companies (personalized outreach)

| Company | Domain | Hypothesis | Tier Rationale | Hook Signal |
|---------|--------|-----------|----------------|-------------|
| [name] | [domain] | #[N] [name] | [why this tier] | [specific hook] |

### Tier 2 — [N] companies (templated outreach)
...

### Tier 3 — [N] companies (hold/re-enrich)
...
CSV (for email-generation):Saved to claude-code-gtm/csv/input/{campaign-slug}/segmented_list.csv with columns:
  • company_name, domain, tier, hypothesis_number, hypothesis_name, tier_rationale, hook_signal
5

Review with User

Present summary stats:
  • Total companies: N
  • Tier 1: N (X%)
  • Tier 2: N (X%)
  • Tier 3: N (X%)
  • Unmatched: N
Review questions:
  • “Does the tier distribution look right? (Typical: 10-20% Tier 1, 50-60% Tier 2, 20-30% Tier 3)”
  • “Any companies that should move tiers?”
  • “Ready to proceed to email-generation?”

Tiering Framework

Scoring Formula

Optional numeric scoring for systematic tier assignment:
tier_score = (hypothesis_fit * 0.4) + (data_richness * 0.3) + (hook_available * 0.3)

Where:
- hypothesis_fit: 0-5 (from grade column or manual assessment)
- data_richness: 0-5 (count of populated fields / total fields * 5)
- hook_available: 0 (no hook), 3 (generic hook), 5 (specific hook)

Tier 1: score >= 3.5
Tier 2: score >= 2.0
Tier 3: score < 2.0

Tier Decision Matrix

SignalTier 1Tier 2Tier 3
Hypothesis fit score4-52-31 or N/A
Enrichment fields populated4+ of 52-3 of 50-1 of 5
Hook signal availableYes (specific)Generic onlyNone
Company profile depthRich description + recent dataBasic descriptionMinimal or stale
Vertical matchExactAdjacentNo match

Output Actions by Tier

Expected volume: 10-20% of list (20-50 companies)Email quality: Highly personalized P1 with specific hookProcess:
  1. Run through email-generation with hypothesis + hook signal
  2. Review each email via email-response-simulation (persona research)
  3. Iterate until satisfied
  4. Upload to sequencer in a separate, high-touch campaign
Expected volume: 50-60% of list (100-300 companies)Email quality: Hypothesis-personalized but not individually researchedProcess:
  1. Run through email-generation with hypothesis only (no individual hooks)
  2. Group by hypothesis — each group gets a slightly different P1
  3. Spot-check 5-10 emails for quality
  4. Upload to sequencer in main campaign
Expected volume: 20-30% of listEmail quality: Do not email until upgraded to Tier 2+Options:
  1. Re-enrich: Run additional enrichment columns to fill gaps
  2. Different campaign: Save for a broader, less-targeted campaign
  3. Drop: If the company truly doesn’t fit any hypothesis

Troubleshooting Tier Distribution

IssueFix
80%+ in Tier 3Hypotheses don’t match the list — re-run market-research or rebuild the list
50%+ in Tier 1Tiering too lenient — tighten the hook signal requirement
0% in Tier 1No personalization columns — run enrichment-design in personalization mode
Even split across all 3Usually correct — proceed

API Reference

Fetch Table Data

GET /tables/{table_id}/data
Authorization: Bearer {EXTRUCT_API_TOKEN}
Response:
{
  "rows": [
    {
      "id": "row-uuid",
      "cells": {
        "company_name": "Acme Corp",
        "domain": "acme.com",
        "enrichment_column_1": "value",
        "enrichment_column_2": "value"
      }
    }
  ]
}

Next Steps

After segmentation is complete:
  1. Tier 1 companiespeople-searchemail-searchemail-generationemail-response-simulation
  2. Tier 2 companiespeople-searchemail-searchemail-generation
  3. Tier 3 companies → Hold or re-run list-enrichment

Build docs developers (and LLMs) love