Research Campaigns
Audience: Operators configuring AI-assisted prospect discovery.
Goal: Explain how research campaigns, briefs, modes, scoring, and jobs work in Client Growth Hub.
Related: Prospects, CRM, and Pipeline, Features
What a research campaign is
A research campaign is the planning object for AI-assisted prospect discovery. It captures:
- Who you sell to (ICP, industry, geography, language)
- What you offer
- Which channels you may engage after approval
- Guardrails (budget, prospect limit, confidence thresholds, exclusions)
- Optional scoring priority overrides
Interview answers are the source of truth for legacy Guided Setup campaigns. For new B2B campaigns, the Campaign Specification compiled from the descriptive ICP is the source of truth; the versioned structured research brief is derived execution IR after operator approval.
A campaign shared with your organization shows Shared on Research. You can open it and launch runs. Definition editing stays with the owning organization and platform super admins. A run belongs to the organization that launched it. After a campaign is moved away, past runs remain on Runs and the definition opens read-only. Prospects already found by that campaign appear on your Prospects list only when the share included them, or when a super admin assigns them. Either way you get your own prospect with company details only: no other organization's evaluation, contacts, or outreach, and no link to who found it. Companies you already have are skipped. Prospects found after that share are not added automatically.
Businesses / Contacts toggle
On Research (and Prospects), choose:
- Businesses — B2B company discovery (structured brief + Deep Research pipeline)
- Contacts — B2C social listening (Reddit person prospects today) or account-consumer expansion
The selection is remembered in the browser. Both workflows can run in the same workspace; the toggle only filters which campaigns and prospects you see.
Guided interview
The default create path is ICP-first: click New campaign, paste a descriptive ICP, analyze, then clarify only if needed. Review and approve the Research specification on the campaign workspace Policy tab. Quick / Full interview remains as Guided Setup (legacy) inside the same dialog.
Clarification is required when the ICP permits two materially different execution outcomes. Zero questions is not the goal; zero unnecessary questions is. Example: national organizations may qualify when a preferred region is majority/HQ, while another region is listed “outside appetite” without an exclusion scope. CGH asks whether incidental presence is allowed or any presence disqualifies. It does not guess.
Geography exclusions are scoped (any_presence, headquarters, centered_in, relevant_target_population, unknown). centered_in uses headquarters / primary location for any labeled place (Alberta, California, Ontario, …). Incidental branch presence does not trigger it. A city/metro “outside appetite” applies to the organization’s relevant location, not an arbitrary office or customer mention.
Preferred geography ranks above broader geography. Unconditional acceptable_broader (for example “Canada is acceptable, Ontario preferred”) keeps in-country organizations eligible. Conditional broader (for example “National with Ontario majority AND Ontario HQ”) still requires those conditions; country alone is not enough.
Compilation may classify ranking (strongest / preferred / conditional / outside appetite) but it must not silently move an explicit numeric boundary from the ICP. 1000+ and at least 1000 stay inclusive >=1000. over 1000 / more than 500 stay exclusive. Stated ranges such as 750-999 are kept exactly. Duplicate geography rows that mean the same location, role, and scope collapse; Ontario preferred and Ontario acceptable-broader stay separate.
Hard size bands have polarity at execution: a required floor such as 100+ rejects companies below 100 and keeps companies at or above 100. An explicit excluded size band rejects companies that fall inside that band. Soft HUB-style ranking (>=1000 > 750–999 > 500–749 > <500) does not hard-reject.
Preferred organization roles score above acceptable roles (Employer Group above Association or Union) without making acceptable roles ineligible.
The compiler also cannot make a rule stricter than the source. A target or “outside appetite” size band stays a ranking preference unless the ICP uses exclude / not eligible / required-minimum language for that bound. must_not_infer is reserved for explicit do-not-infer wording and age/demographic facts that must remain unknown; ordinary preferred characteristics stay grounded-inference-allowed.
Decision-bearing Campaign Specification policy — including soft preferences, ranking factors, and scoring characteristics — must be traceable to explicit operator source language or an operator clarification. The compiler may normalize, classify, combine, and structure that policy. It must not invent eligibility, exclusion, required, conditional, preference, ranking, scoring, or evidence/inference rules because they sound commercially reasonable. Operator marketing-capability statements and unverifiable commercial opportunity (product-demand, wallet expansion, auto/property possibilities, family-growth) stay out of characteristics and ranking unless the ICP describes them as a fact about the target organization. Derived research questions and search hints must not silently become scoring policy.
Open Research, confirm the workflow toggle, and click New campaign:
| Mode | What you answer | Defaults |
|---|---|---|
| ICP-first (default) | Descriptive ICP (paragraphs, bullets, exceptions, priorities). Optional campaign name. | Execution settings (research mode, scoring, discovery pool, confidence, budget $5 from RESEARCH_DEFAULT_BUDGET_USD) use platform defaults unless stated in the ICP |
| Quick interview (legacy) | Essentials: name, offer, buyers/sectors, geography, prospect limit, scoring priority | Budget, channels, thresholds, evidence, automation, and approval settings use conservative defaults |
| Full interview | Complete policy, including channels, thresholds, exclusions, automation permissions, and scoring | Full operator control |
| Demo fill | Paste a short “we sell X, find Y” brief; the system drafts the interview for edit | For demos — not production policy capture |
For Contacts, the interview also captures discovery mode (Social intent vs Account consumers), listen keywords, and optional Reddit communities.
Some questions can use an optional AI assessor that suggests a normalized value. Accepted normalized answers are stored instead of raw prose when available.
On save, the app creates or updates a draft research campaign with targeting fields, product_mode, and research_guardrails policy metadata.
If LLM structured extraction fails, times out, is unavailable, or returns invalid/empty output for a new ICP-first campaign, CGH does not silently fall back to deterministic parsing. The specification stays draft with blocker semantic_extraction_failed, approval and research launch stay blocked, and the operator is asked to analyze again.
Missing geography on an otherwise executable ICP is a warning/assumption, not a clarification question.
B2B launch flow
Interview → Save campaign → Launch → Generate brief → Review (read-only)
→ Choose research mode → Approve brief & launch → Worker pipeline
→ Prospects (all qualified; recommended = top N of that evaluated/qualified set)
→ Accept business → Contact Resolution → Approve / import to CRM
- Click Launch research on the research list or on the campaign. For every Businesses campaign, including a draft with no policy specification, this opens the answers brief before a run starts.
- Review the generated Research brief (summaries, industry include/preferred/exclude, geography, organization-role include vs preferred, size preferences, required evidence, hard exclusions, research questions, short search queries).
- If the interpretation is wrong, edit the interview and regenerate a new brief version (do not edit the brief in place).
- Choose a research mode.
- Approve brief & launch.
- Monitor job status on the campaign detail page (requested / discovered / qualified / recommended / available, or why it stopped below target) and in Agent Runs.
- On Prospects, review the recommended set (or all qualified), Accept & find contacts, then Approve & import when persona-matching contacts are ready.
Launch requires a brief that still matches the current interview. If the interview changed after approval, regenerate before launching again.
Research modes (B2B)
| Mode | Best for | Qualification style |
|---|---|---|
standard (default) | Production default | Faster qualification first; escalate to Deep Research when industry, geography, operating-business status, or confidence is still ambiguous |
search | Fast / lower-cost smoke path | Sync qualification only (no Deep Research escalation) |
deep | Higher-effort per-company qualification | Async Deep Research with higher reasoning effort |
demo_deep | Live demos | Brief-driven shortlist (capped) then Deep Research |
Modes change discovery and qualification strategy. Cost estimates on the plan are planning hints, not hard spend gates. Exact provider models are configured per deployment. Clear hard negatives (not an operating business, explicit ICP mismatch) are not escalated — the faster pass stands.
Worker pipeline (B2B)
When a job has an approved structured brief and execution plan:
- Discovery — the Discovery Engine grows reusable Prospect Repository inventory from strategy-driven web search. When the brief names include types, each type is searched at each included place, and excluded types are left out. An older coverage mark does not skip a place whose type-and-place searches have not been issued. A sector list is used only when the brief names no include types. Association and union campaigns keep membership queries. A run stops at the first legal terminal condition: explicit cost/provider/time budget, this-run recommendation-ready target, or a credibly empty material search frontier (diminishing yield / no meaningful new candidates). Query-family leftovers that cannot issue a novel query do not keep the run alive. Completing a job does not complete the campaign. Every identity-valid organization is persisted, including surplus beyond this campaign’s recommended N.
- Identity resolution — confirm an operating company name and website/domain; reject directories, listicles, and social shells used as the company site. Identity failures stop before deep qualification credits are spent.
- Qualification — prefer repository organizations not yet evaluated against the current Campaign Specification. Continue until the campaign target is reached or matching unevaluated inventory is exhausted; then trigger a bounded discovery cycle if still short. Fresh public facts can skip extra research; stale or missing important facts are researched. In
standardmode this is a faster pass first, with Deep Research only when facts are still ambiguous. Campaign scores stay on the campaign, not in the repository. - Guardrails — apply hard exclusions and required ICP includes (operating business, geography, industry) as pass/fail; soft geography/industry/signal scoring on survivors.
- Finalize — persist all qualified rows as prospect candidates with qualification facts. The campaign prospect limit marks
recommendedon the top N of that evaluated/qualified population without discarding leftover repository organizations. Research stays contact-light (no named-person spend yet).
The campaign job summary reports requested / discovered / qualified / recommended / available-for-review counts, plus why a run stopped if it finished below target.
If another campaign in your organization with the same specification is already queued or running, launch explains that and, if you continue, its qualified prospects appear in that campaign instead of starting a second search. Identical research in other organizations is never shown to you and never shares their campaign with you.
When a platform administrator turns on global prospect reuse for a set of pooled organizations, a launch may also start from unused companies those organizations found that match this campaign's industry and geography. Only company details are reused. This campaign qualifies each one itself and keeps its own prospect. Companies your organization already has are skipped. Global reuse is off by default.
Failed or cancelled jobs can be rerun. Active campaigns can Run again; re-runs hydrate campaign search memory (issued queries and searched cells) on every launch path, skip companies already found for that campaign (by website domain, or company name when no website is available) as rediscovered rather than net-new, and search remaining frontier instead of replaying the previous query set. Use Clone as draft to start a fresh editable policy from a finished or active campaign.
End campaign retires the campaign and blocks future runs. Completed runs stay in history and existing prospects stay available. Finishing a run never ends the campaign; ending it is an explicit operator decision.
A completed run can be rescored without searching again. POST /api/v1/campaigns/{campaign_id}/research-jobs/{job_id}/reevaluate-eligibility reads the qualification already stored on that run, applies the current organization-type rules, and updates which saved prospects are recommendation-ready. It does not call a research provider and does not use another research entitlement. Brokerage, advisory, accounting, and financial-planning evidence from the firm's own description counts as an operating firm. A directory, a marketplace, a listing service, a classifieds page, a page whose employer or legal identity is not established, a generic broker-plus-city heading, a business association, or a bank-owned branch still does not fill a recommendation slot. Mentioning the types the campaign seeks, or contrasting the page with those types, does not turn the page into one of them.
Why a run stopped
The campaign workspace Runs tab always shows the stop reason and the run's actual provider spend (cost_usd).
| Stop reason | Meaning |
|---|---|
recommendation_target_reached | This run reached its recommendation-ready target. The campaign stays open for later runs |
| Budget reached | Recorded provider spend hit the run budget |
diminishing_returns_reached / no meaningful new candidates | The material search frontier is empty and recent searches found negligible new in-ICP companies |
cost_accounting_unknown | A succeeded provider call happened but its spend could not be attributed. The run stops rather than treating spend as $0. A successful search with no returned price is counted at $0.005. A failed call with no usage, and a background Agent accept that has not finished, are not unknown spend |
stuck_no_progress / stuck_queued | The run stopped reporting progress (default 30 minutes) and was failed automatically. Rerun it |
Contact Resolution (after Accept)
B2B company research does not find named people during qualification. On Prospects:
- Review the Recommended set (or toggle All qualified).
- Accept & find contacts (single or bulk) for businesses you want to pursue.
- A background Contact Resolution job looks for persona-matching people (buyer roles from the interview) and stops when quality is sufficient.
- When contacts are ready, choose a primary contact and Approve & import.
Prefer Accept → Contact Resolution over ad-hoc enrichment panels for the primary contact path. “Verified” on contacts means provenance and quality tiers — not SMTP or carrier verification. Prefer rejecting on weak fit or evidence, not only on a missing mobile number.
Guardrails operators commonly set
| Control | Effect |
|---|---|
| Prospect limit | Target / recommendation count N — research may persist more qualified prospects than N |
| Budget | Hard per-run cap on actual provider spend (default $5). The run stops when recorded spend reaches it |
| Minimum confidence | Drops prospects below the threshold |
| Geography / industry | Required ICP includes fail on explicit mismatch; otherwise soft-rank |
| Hard exclusions | Structured rejects even if a company otherwise looks relevant |
| Client / organization type includes | Keep only matching organization types when configured |
| Channels | Allowed engagement channels after approval |
| Buyer roles / contact requirements | Drive Contact Resolution persona match and stop-when-sufficient |
| Scoring priority | Optional campaign overrides for fit / intent / urgency blend |
Not every interview field is hard-enforced by the worker. The research campaign guide in the product distinguishes enforced vs policy text. When in doubt, verify behavior on a small test campaign before a large run.
Signal catalog and scoring
Settings → Signal catalog defines which buying signals matter for this installation, how research should detect them, and how they affect scores.
This is deployment-wide: one catalog for the server install. Campaign ICP and guardrails control who to find; the catalog controls what counts as a buying signal and how strongly it ranks.
For each signal type (for example hiring, growth, marketing, technology, or a custom key):
| Field | Role |
|---|---|
| Definition / evidence examples | Guide detection — what public proof counts |
| Weight | Contribution to buying-intent score |
| Urgency | Contribution to “act now” score |
| Pass to research | Include or exclude the type from detection |
Priority score blends three parts (defaults; editable under Settings → Research priority blend, must sum to 100%):
| Part | Default share | Source |
|---|---|---|
| Fit / base | 45% | ICP match, evidence, contacts, confidence |
| Buying intent | 35% | Signal weights × confidence |
| Urgency | 20% | Signal urgency × confidence |
After changing the catalog, new research jobs use the new definitions immediately. Already-saved prospects keep previous scores until re-researched. At least one signal must remain enabled for research.
Contacts research (B2C)
With Contacts selected on Research:
- Discovery uses social network research for public intent (Reddit listen today) instead of company-first Deep Research.
- Choose Social intent (people posting public buying intent on Reddit) or Account consumers (find businesses, then affiliated people).
- LinkedIn is optional connect/publish only; it is not a listen source.
- Matched authors become person prospects (profile / permalink URL can satisfy the channel guardrail).
- Active social-intent campaigns keep listening on an interval (org default often 1 hour) and only create new prospects / drafts for unseen posts.
- Draft replies land in Social inbox for edit → Approve & publish or Reject. Quiet hours and rate limits apply to publish, not to listen.
Full operator steps: B2C Social Listening. Cadence settings: Admin, Settings, and Integrations.
Getting started tutorial
Trial workspaces can run a Getting started wizard for either Businesses or Contacts without live Deep Research or live social listen. Fixture jobs are tagged so they do not count against research entitlements. See Operator User Guide.
Agent Runs
Open Agent Runs to inspect AI/provider activity for research and related calls:
- Status and timestamps
- Related campaign or prospect context
- Citations when available
- Cost signals when available
- Failure reason for failed rows (click a failed run for details)
The list refreshes automatically while the page is open. Use it to explain AI work during demos and to debug failed qualifications.
Prospect Repository
The Prospect Repository is Aventora/CGH’s private platform asset. Tenant users never see it.
Authoritative lifecycle:
- Discovery
- Platform Prospect Repository (platform-private)
- Campaign-specific qualification
- Tenant-visible prospect on Prospects (the tenant’s own campaign results; identity may be redacted until paid unlock)
- Optional Super Admin commercial delivery / revoke for repository allocation
A tenant sees their own campaign candidates without Super Admin release. Other tenants do not. Repository-internal discovery fields stay withheld. Super Admin may revoke a delivery and hide that row.
Repository Prospect is platform-owned canonical inventory. Campaign Evaluation is the platform’s assessment against a Campaign Specification. Tenant Prospect is that tenant’s own campaign result on /prospects. Released/Delivered Prospect is the Super Admin commercial record (allocation hook and revoke), not the gate for viewing your own run.
Platform Super Admin may inspect all repository organizations, unevaluated and qualified inventory, rejected evaluations, campaign-specific scores, cross-campaign reuse, discovery provenance, evidence, and tenant delivery history.
Tenant APIs return that tenant’s campaign prospects. They do not see the global repository, other tenants’ prospects, inventory counts, cross-campaign usage, or leftover matching inventory.
Campaign execution is still repository-first internally:
- Read the approved Campaign Specification.
- Qualify unevaluated repository organizations that may be relevant (strong, then plausible). Unknown organizations remain inventory; they are not treated as relevant enough to skip Search.
- Stop when the campaign target is reached, or when no relevant unevaluated inventory remains.
- If relevant inventory is exhausted before the target, run a bounded discovery cycle even if unknown organizations remain, persist every identity-valid organization, then resume qualification.
prospect_target is how many internally qualified/recommended prospects this campaign run wants. It is not repository size, a discovery result cap, a storage cap, a tenant-visible count before release, or a global inventory limit. Discovery may persist more canonical organizations than prospect_target; those remain platform assets until a later campaign evaluates them.
A later run of the same Campaign Specification consumes leftover relevant inventory first and does not invoke Perplexity Search while strong or plausible unevaluated organizations remain. Unknown leftover inventory does not skip Search.
There is no global prospect-fit score. Campaign scores, qualification status, and recommended flags stay on that campaign’s evaluation. Releasing a prospect to one tenant does not expose another tenant’s evaluation.
Canonical organization rows are still stored with the discovering campaign’s organization_id today. Repository list/detail/metrics APIs are Platform Super Admin only and read across tenants.
Scheduled campaign runs refresh stale organization facts even when they skip Search. How long a fact stays fresh depends on how fast it changes: about 7, 21, 60, or 180 days. Organization facts do not expire the way B2C social intent does. When research names a decision-maker, that person is linked to the organization as a contact for later Contact Resolution.
Operator reject feedback
Rejecting a prospect on Prospects requires a reason. The rejected company is skipped on later runs of that campaign.
ICP reasons (wrong industry, geography, size, organization type, persona, poor evidence, or other with notes) can immediately create a new approved Campaign Specification and derived Research Brief when the rejector belongs to the campaign’s organization and chooses Reject and apply to future runs. Reject this prospect only stores the reason without changing targeting. Any workspace user can still reject and the reason is stored. Prospects allocated from another organization’s campaign do not change that campaign’s targeting. Already a customer / client and Duplicate also skip targeting changes. In-flight jobs keep their frozen inputs.
Changelog
| Date | Change |
|---|---|
| 2026-10-07 | An operating name stops before a parenthetical acronym, so the following sentence is not treated as part of the name. |
| 2026-10-07 | A saved name that is itself a description, or a heading split by a colon, is replaced with the organization’s proper name. |
| 2026-10-07 | When several “operating as” phrases are present, the display name uses a proper organization name. A descriptive clause such as “operating as a family-run brokerage” is skipped. |
| 2026-10-07 | A saved prospect name that is a search heading is replaced with the organization’s operating name, or with the firm name in that heading. An included place stays in discovery until its include-type searches have been issued. |
| 2026-10-07 | A marketplace, listing service, or classifieds page is not recommendation-ready. Naming the campaign’s include types, or saying the page is that intermediary rather than the sought firm, does not make it one. |
| 2026-10-07 | Discovery searches the campaign’s include types at each included place. Excluded types are not searched. A sector list is used only when the brief names no include types. |
| 2026-10-07 | A “does not establish” sentence blocks a prospect only when it is about legal identity or the employer. Missing buying-intent or hiring evidence does not remove an identified firm. |
| 2026-10-07 | Recommendation-ready excludes a firm whose legal identity is not established, a generic broker-plus-city page title, and a bank-owned branch such as an RBC wealth office. Rescore with POST /api/v1/campaigns/{campaign_id}/research-jobs/{job_id}/reevaluate-eligibility; that does not start another search. |
| 2026-10-07 | First-party brokerage, advisory, accounting, and financial-planning evidence can be recommendation-ready. POST /api/v1/campaigns/{campaign_id}/research-jobs/{job_id}/reevaluate-eligibility rescores a completed run's saved prospects and does not start another search. |
| 2026-10-07 | A deep-research accept with no price no longer stops the run. The finished poll is the bill. |
| 2026-10-06 | A research run no longer stops as unknown spend after a Search API call that returns no price, or after a failed qualify call that was not billed. Search requests count at $0.005. Agent qualification no longer sends a zero temperature, which Perplexity was rejecting. |
| 2026-10-06 | Launch research on the Businesses list opens the answers brief before the run starts, including drafts that have no policy specification. |
| 2026-09-29 | Budget is a hard per-run cap on actual provider spend, not a soft estimate. Added Why a run stopped (including cost_accounting_unknown and stuck-run failure) and End campaign. Repository: scheduled runs refresh stale organization facts; named decision-makers link to the organization. |
| 2026-09-29 | Shared or assigned prospects are your own copy with company details only. Identical-research detection and reuse apply within your organization only. Reuse of prospects found by other organizations is off by default, is limited to pooled organizations, and always runs your own qualification. |
| 2026-09-28 | A super admin can include a campaign's current prospects when sharing it. Prospects that organization has already accepted stay as they are. Later discoveries are not added by that share. |
| 2026-09-28 | A new research qualifies unused prospects that already match its sector and geography, without searching for those companies again. If an identical specification is already running, launch asks to continue and then receives that research's qualified prospects instead of starting a second search. |
| 2026-09-28 | A platform super admin can permanently delete a campaign and its runs from Campaigns. Discovered prospects and their assignments stay. |
| 2026-09-23 | Shared campaigns show Shared. Shared organizations can run the current definition and cannot edit it. Runs stay with the organization that launched them. |
| 2026-09-18 | Campaign owners can reject without applying the reason to future runs. Already a customer/client never changes targeting. |
| 2026-09-18 | Reject reasons are always stored. Campaign spec/brief learning applies only when the rejector’s organization owns the campaign. |
| 2026-09-18 | Rejecting a prospect requires a reason. ICP reasons version the approved Campaign Specification and Research Brief for the next run; already-a-customer and duplicate skip that company only. |
| 2026-09-18 | A research run stops with recommendation_target_reached when recommendation-ready meets the this-run target, unless an explicit budget already terminated the run. Campaign discovery memory (issued queries, searched cells, retired families) is campaign-scoped and hydrates on every launch path. A later run recognizes prior campaign identities as rediscovered and searches remaining frontier instead of replaying the previous query set. Qualification cannot busy-loop unchanged resolved inventory. Completing a job still does not complete the campaign. |
| 2026-09-17 | Discovery frontier is sector × subsector × geography × entity family × query family. diminishing_returns_reached is invalid while unsearched sectors, subsectors, geographies, representative-organization families, or workforce concepts remain. An unused query-family inventory cell that cannot produce a novel query does not keep the run alive. A run may stop when recommendation-ready target is met; the campaign stays open for later runs. |
| 2026-09-17 | Tenants see their own campaign research results on Prospects without Super Admin release. Lead-unlock purchase still reveals identity when unit prices are set. Super Admin revoke still hides a row. |
| 2026-09-06 | Contacts social intent listen is Reddit-only. LinkedIn is publish, not listen. Quiet hours apply to publish, not discovery. |
| 2026-08-31 | Research directory (/research) is list-only. Open a campaign workspace at /research/[campaignId] for Policy, Runs, and Coverage. Analyze navigates to ?tab=policy. |
| 2026-08-31 | Research UI: New campaign opens an ICP-first dialog. Selected campaign policy sits above the campaign list. The list uses a wide Campaign column (name + two-line ICP preview) and a stacked Details column for status, optional target/channels, specification, and actions. |
| 2026-08-31 | Qualification precision: directories, listings, rankings, and bargaining-agent list pages are not prospect identities and cannot fill recommendation slots. Campaign/search context is stored as discovery provenance only; canonical geography and industry require organization evidence. After a discovery batch, identities are ranked before qualification. prospect_target is the internal recommendation-ready count. |
| 2026-08-31 | Repository relevance: strong / plausible / unknown / mismatch. Candidate selection prefers strong then plausible, samples unknown only while relevant inventory exists, and triggers Search after relevant inventory is exhausted. Conflicting specific geography is a known mismatch. Unknown organizations stay in the repository. |
| 2026-08-31 | Matching unevaluated repository inventory is consumed before Search. Surplus discoveries stay unevaluated. prospect_target is the internal qualified/recommended goal only. A second run skips Search while surplus remains. |
| 2026-08-31 | Super Admin revoke removes tenant visibility. Tenant APIs withhold repository-internal discovery/inventory fields. Delivery history includes campaign, evaluation, actor, and optional commercial reference. |
| 2026-08-31 | Commercial opportunity / product-demand language is source context, not a ranking factor or preferred characteristic, unless the ICP describes a target-organization fact. |
| 2026-08-31 | Commercial visibility: Prospect Repository is platform-private. Qualification is not tenant visibility. Tenants see only commercially released/delivered prospects. Super Admin repository APIs include delivery history. Freshness/rediscovery scheduling remains deferred. |
| 2026-08-31 | Repository-first campaign execution: qualify unevaluated tenant inventory before Search; persist surplus; discovery pool is independent of campaign target. Repository list, organization detail, and asset metrics. Canonical identity is tenant-scoped; campaign scores stay campaign-scoped. Freshness/rediscovery scheduling is deferred (manual discovery or repository exhaustion only). |
| 2026-08-30 | Decision-bearing Campaign Specification policy, including soft preferences and ranking factors, must be source-grounded or clarification-derived. The compiler cannot invent commercially reasonable characteristics or scoring criteria. |
| 2026-08-30 | Repository recommended means top-N among the campaign’s evaluated/qualified population. Discovery Engine grows the Prospect Repository independently of campaign prospect target. Surplus identity-valid organizations remain for later campaigns; Repository shows how they were found and how campaigns used them. |
| 2026-08-30 | Worker execution: required size floors are inclusive; required numeric characteristics such as location count become executable floors; unconditional broader geography admits in-country organizations; conditional broader still requires its conditions; centered_in is HQ-scoped for any labeled place; preferred organization roles rank above acceptable roles; discovery identity rejects articles, programs, directories, and advisory content as candidate identities. |
| 2026-08-29 | Grouped outside-appetite metros such as West GTA (Brampton/Mississauga) collapse to one parent with examples, not independently enforced city and metro rows. |
| 2026-08-29 | Size ranking treats strongest above preferred above good. A target/good population band must not score equal to a stronger “larger is better” band. |
| 2026-08-29 | Outside-appetite geographies that the LLM parks in empty-conditional are restored to excluded with source-inferred scope, so the exclusion-scope clarification still fires instead of a condition-missing blocker. |
| 2026-08-29 | Compiler coerce applies a source-authority ceiling: the LLM cannot escalate a soft/target size band into a hard exclusion, or stamp must_not_infer unless the ICP supports it. Age/demographic unknown-must-remain stays must_not_infer. |
| 2026-08-29 | Geography exclusions now carry an explicit scope. Unspecified exclusion scope is a blocker (geography_exclusion_scope_ambiguous) when broader/national qualification and a preferred geography can both apply. Zero clarification questions is not the goal; zero unnecessary questions is. Derived ResearchBriefs keep scoped exclusions instead of flattening them into blanket geography.exclude contains rules. |
| 2026-08-29 | Production ICP-first compilation is fail-closed: LLM extraction is required. Extraction failure keeps the specification in draft with semantic_extraction_failed and blocks approval/research. Unspecified geography is a non-blocking warning that research will use the platform/default supported geography. |
| 2026-08-29 | ICP-first Campaign Specification is the default Research → Businesses create path. Operators paste a descriptive ICP; CGH compiles, validates, and asks clarification questions only for blockers. ResearchBrief is derived from the approved specification. Legacy Quick/Full interview remains as Guided Setup. |
| 2026-08-29 | Research brief review now shows preferred vs include industries, organization-role preference vs eligibility, numeric size preferences, and required evidence. Preferred industries are empty unless the operator expressed a preference. |
| 2026-08-13 | Pre-approval engagement is in controlled managed-campaign validation and is not generally available. Public copy no longer presents it as a shipping campaign policy. |
| 2026-08-12 | Campaign policy Allow pre-approval engagement (default off). Existing campaigns stay off unless an operator enables it. |
| 2026-08-12 | Perplexity optimization: Sonar-default qualify + DR escalate; People Search Contact Resolution; discovery strategy diversity |
| 2026-08-12 | Qualification policy + full qualified pool (recommend N); Accept → Contact Resolution waterfall; job result summary counts; B2C strategy seams |
| 2026-07-28 | Documented Businesses/Contacts toggle, social research for Contacts, Social inbox, Getting started tutorial; removed obsolete Settings product-mode switch. |
| 2026-07-21 | Initial public research campaigns guide (interview, brief, modes, pipeline, signals). |