The CLI is intentionally JSON-first. These contracts are the most important stability point between the app, CLI, extension, and future providers.
ICP
{
"name": "Deel ICP DACH",
"description": "Mid-market and enterprise companies that hire or pay across borders.",
"industries": ["Software", "Financial Services"],
"companySizes": ["200-499", "500+"],
"regions": ["Europe", "DACH"],
"countries": ["DE", "AT", "CH"],
"titles": ["Head of HR", "CHRO"],
"pains": ["international hiring", "global payroll"],
"requiredSignals": ["international expansion"],
"excludedSignals": ["single-country only"],
"keywords": ["global payroll", "EOR"],
"excludedKeywords": ["staffing agency"]
}
AccountProfile
{
"companyName": "Deel",
"domain": "deel.com",
"industry": "Software",
"region": "Europe",
"employeeCount": 2500,
"keywords": ["deel", "software"],
"sources": ["domain-input", "icp-overrides"]
}
Lead
{
"companyName": "Deel",
"domain": "deel.com",
"industry": "Software",
"region": "Europe",
"employeeCount": 2500,
"contactName": "Jane Doe",
"title": "Head of Revenue Operations",
"email": "jane.doe@deel.com",
"source": "heuristic-target-account",
"signals": ["recent funding", "growing outbound team"]
}
EnrichedLead
EnrichedLead extends Lead with:
{
"techStack": ["Salesforce", "HubSpot"],
"crmFit": "high",
"outreachFit": "high",
"buyingStage": "active-evaluation",
"notes": ["Deel matches the Software segment."]
}
Allowed values:
crmFit:high,medium,lowoutreachFit:high,medium,lowbuyingStage:problem-aware,solution-aware,active-evaluation
ScoredLead
ScoredLead extends EnrichedLead with:
{
"score": 90,
"grade": "A",
"rationale": [
"Industry matches ICP.",
"Region matches ICP."
]
}
Allowed values:
score: integer from0to100grade:A,B,C,D
Lead generation result
Lead generation returns both data and provenance:
{
"provider": "heuristic-company+heuristic-people-search",
"mode": "fallback",
"account": {},
"leads": [],
"warnings": [
"Using fallback providers. Leads are modeled contacts until a real company and people data provider is configured."
]
}
mode can be:
fallbackreal
SyncResult
{
"target": "instantly",
"synced": 42,
"skipped": 3,
"dryRun": true,
"provider": "instantly",
"campaignId": "cmp_123"
}
Supported sync targets:
hubspotsalesforcepipedriveapolloinstantlyoutreach
Domain candidate
{
"companyId": 123,
"crmCompanyId": 456,
"companyName": "Example Co",
"domain": "example.com",
"source": "hunter",
"type": "original",
"hunterEmailCount": 14,
"linkedinDomain": "example.com",
"linkedinWebsite": "https://www.example.com"
}
Domain selection decision
{
"companyKey": "company:123",
"selected": {
"companyId": 123,
"crmCompanyId": 456,
"companyName": "Example Co",
"domain": "example.com",
"source": "linkedin",
"type": "original",
"hunterEmailCount": 14,
"linkedinDomain": "example.com",
"linkedinWebsite": "https://www.example.com"
},
"reason": "linkedin-domain",
"candidates": []
}
Allowed selection reasons:
linkedin-domainlinkedin-websitehighest-hunter-countfallback-first-non-nullno-domain
Domain audit report
The domain audit output has two top-level sections:
{
"summary": {
"decisions": 100,
"acceptedForWriteback": 84,
"rejectedForWriteback": 16,
"byReason": {
"linkedin-domain": 60
},
"byFlag": {
"blacklisted-domain": 2
}
},
"findings": []
}
Why these contracts matter
These objects should be treated as product contracts, not just local implementation details. Future providers, app features, or extension workflows should preserve these shapes wherever possible.