Runs
A run is the unit of work. Creating one (POST /customer-intelligence/runs) starts a dedicated Temporal workflow (CustomerIntelRunWorkflow) that drives the whole pipeline for that batch of seeds. The run also carries the org’s BPO positioning and ICP config (what you sell, who you sell to) — saved once via GET/PUT /customer-intelligence/config and reused as sensible defaults on every new run, overridable per run.
The workflow moves through phases in order:
Gates: human-in-the-loop checkpoints
A gate is a point where the workflow pauses and genuinely waits for a person to decide, rather than guessing:- Resolution gate — fires when a seed can’t be trusted to be correct on its own: a bare company name, a person/company LinkedIn URL that needs resolving, or the scope of an ICP/lookalike discovery search. An exact website is the only seed solid enough to skip this. You confirm or correct matches via
POST /customer-intelligence/runs/{run_id}/resolution. - Shortlist gate — fires after light scoring, only when the run requested deep deliverables. You pick which scored companies get the full deep set via
POST /customer-intelligence/runs/{run_id}/shortlist.
abandoned status. It never silently proceeds without a decision.
Even after a run finishes, you can promote any individually-researched result to the full deep deliverable set later via
POST /customer-intelligence/runs/{run_id}/results/{result_id}/build-report — the shortlist gate only exists while the run itself is paused.Results and deliverables
Each target in a run produces a result: the pain/fit score, a scoring rationale, and whatever deliverables were requested for it. Depending on the run’s configuration, that ranges from a lightweight scored-lead row up to a full deep set — a CX intelligence report (PDF), a review-analysis spreadsheet, a sales deck, an ROI model, a company research brief, stakeholder/contact intelligence, a drafted outreach email, and an auto-provisioned interactive demo. Deliverables can be individually revised, hand-edited, or regenerated with feedback after the fact, and the CX report has its own shareable public link.Getting data in
Seeds can be typed directly (company names, websites, LinkedIn URLs), expanded from “lookalike” seeds, discovered from an ICP filter, or extracted by Claude from an uploaded document (POST /customer-intelligence/uploads — PDF, CSV, DOCX, XLSX, TXT, or Markdown, capped at 15 MB) during intake.
The count you ask for is how many companies you get delivered, not how many get researched. A lookalike run researches roughly 1.85x that number and keeps the highest-pain ones, because CX distress can only be measured after research: two runs put the share of severely-distressed companies in any candidate pool at about 38%, so delivering straight from discovery would put ~38% of your list in the High band no matter how good the targeting was. The companies that miss the cut keep their research and are marked rank_below_target_count — outranked, not disqualified.
Companies the pipeline picked for you — lookalike expansions and ICP discovery — are QA’d against the ICP before (and, for ICP discovery, again after) research: a company too small to run a support desk lands as filtered with the reason on the result rather than as a scored lead. Lookalike candidates must also clear a minimum similarity to the seed set. A company you named yourself is never filtered on fit — you asked for it, so you get it.
Separately, any target whose research turns up no platform ratings, no complaints and no pain signals is filtered as gate_3_research_signal instead of being scored. That one applies to every target including your own: there is nothing to weigh, and saying so is more useful than a hollow zero. Pain itself never filters — a low-pain company still reaches the shortlist gate, where you can promote it.
See the Customer Intelligence section of the APIs tab for endpoint-level detail.