Module: intel-news
Wave 1 spoke module. Surfaces the most time-sensitive sales intelligence: leadership
changes, platform migration announcements, digital transformation commitments, and
executive public statements. The urgency signal layer and is_sell_signal classification
make it directly actionable for BDR/AE outreach timing.
Identity
| Field |
Value |
| Name |
intel-news |
| Version |
0.1.0 |
| Layer |
Intelligence (Wave 1) |
| Wave |
1 (runs concurrently with other spokes after intel-company completes) |
| Description |
News and executive media intelligence via Perplexity + Claude. Collects company news (90-day sweep), executive quotes, competitor news, and urgency signals. Classifies each article with is_sell_signal and urgency level. |
| LLM Tier |
Claude via Instructor (enrichment and classification) |
| Timeout |
300 seconds |
| Max Retries |
2 (module level) |
| Gate Module |
NO. Failure degrades news context but does not abort audit. |
Dependencies
| Module |
Reads |
Why |
| intel-company |
Account.executives |
Exec names for targeted media and quote search |
| intel-company |
Account.competitors |
Competitor domains for competitive news sweep |
Both fields are read from the accounts table via SQLAlchemy. If the account is not found,
the module falls back to basic domain-level search (no exec-specific or competitor queries).
| Field |
Type |
Required |
Description |
| domain |
str |
yes |
Website domain to analyze, e.g. "dell.com" |
Output Schema: NewsOutput
Top-Level Fields
| Field |
Type |
Required |
Description |
| domain |
str |
yes |
Domain that was analyzed |
| prospect_articles |
list[NewsArticle] |
no |
News articles about the prospect from the last 90 days |
| prospect_exec_quotes |
list[ExecutiveQuote] |
no |
Quotes from the prospect's executives |
| urgency_signals |
list[UrgencySignal] |
no |
Time-sensitive signals extracted from news and quotes |
| sell_signal_count |
int |
no |
Count of articles with is_sell_signal=True |
| high_value_quote_count |
int |
no |
Count of exec quotes with is_high_value=True |
| competitor_news |
list[CompetitorNews] |
no |
News and quotes aggregated per competitor |
| competitive_comparison |
str |
no |
Summary comparing prospect and competitor news |
| news_summary |
str |
no |
Overall 2-4 sentence intelligence summary |
Sub-Schema: NewsArticle
| Field |
Type |
Required |
Description |
| headline |
str |
yes |
Article headline or title |
| source |
str |
yes |
Publication name, e.g. "Reuters", "TechCrunch" |
| date |
str |
yes |
Publication date as YYYY-MM-DD |
| url |
str or None |
no |
URL to the article |
| summary |
str |
no |
One to two sentence summary of the article content |
| category |
Literal |
no |
One of: leadership_change, product_launch, partnership, financial, acquisition, technology, search_related, digital_transformation, other |
| is_sell_signal |
bool |
no |
True if article mentions search, digital transformation, platform migration, or similar Algolia-relevant topics |
| sell_signal_reason |
str or None |
no |
Why this article is a sell signal. None if is_sell_signal is False. |
| urgency |
Literal |
no |
One of: high (act within days), medium (act within weeks), low (background context) |
| urgency_reason |
str or None |
no |
Why this article has the given urgency. None if urgency is low. |
| company_name |
str |
no |
Which company this article is about |
Sub-Schema: ExecutiveQuote
| Field |
Type |
Required |
Description |
| executive_name |
str |
yes |
Full name of the executive |
| executive_title |
str |
yes |
Job title of the executive |
| company_name |
str |
yes |
Company the executive works for |
| quote |
str |
yes |
Verbatim or near-verbatim quote. Must be actual quote, not paraphrase. |
| context |
str |
yes |
Where/when quote was said, e.g. "CES 2026 keynote" or "Q4 earnings call" |
| source_type |
Literal |
yes |
One of: interview, keynote, podcast, earnings_call, conference, press_release, social_media, article |
| source_url |
str or None |
no |
URL to the source of the quote |
| date |
str |
yes |
Date of the quote as YYYY-MM-DD |
| classification |
Literal |
no |
One of: digital_investment, technology_strategy, customer_experience, search_related, ai_related, competitive_positioning, growth_commitment, cost_optimization, other |
| is_high_value |
bool |
no |
True if exec is committing budget, stating priorities, mentioning pain points, or signaling tech investment |
| algolia_angle |
str or None |
no |
How this quote connects to an Algolia pitch. None if no clear connection. |
Sub-Schema: UrgencySignal
| Field |
Type |
Required |
Description |
| signal_type |
str |
yes |
Type of urgency signal, e.g. "leadership_change", "competitor_tech_move", "exec_public_commitment" |
| description |
str |
yes |
Detailed description of the urgency signal |
| urgency_level |
Literal |
yes |
One of: high, medium, low |
| source_headline |
str |
yes |
Headline of the article or quote that triggered this signal |
| date |
str |
yes |
Date of the signal as YYYY-MM-DD or approximate |
Sub-Schema: CompetitorNews
| Field |
Type |
Required |
Description |
| company_name |
str |
yes |
Competitor company name |
| domain |
str |
yes |
Competitor's primary website domain |
| articles |
list[NewsArticle] |
no |
Recent news articles about this competitor |
| exec_quotes |
list[ExecutiveQuote] |
no |
Executive quotes from this competitor's leadership |
Collection Strategy
The module runs a two-phase pipeline: Perplexity for raw news retrieval, Claude for structured enrichment.
Phase 1: Perplexity API (sonar-pro model) — Raw Collection
| Aspect |
Detail |
| Adapter |
PerplexityAdapter via NewsCollector |
| Model |
sonar-pro |
| Evidence Tier |
WEBSEARCH (Perplexity searches the web) / WEBFETCH (article content) |
| Retry |
3 attempts with exponential backoff (timeout, rate limit, connection error) |
Four targeted collection queries:
| Query |
Purpose |
| Prospect company news (last 90 days) |
Leadership changes, product launches, acquisitions, financial events, tech investments |
| Exec media and interviews |
Quotes from prospect executives in keynotes, podcasts, earnings calls, press releases |
| Competitive news sweep |
Same categories for each competitor domain from intel-company |
| Search/digital transformation news |
Prospect-specific: any news about their search tech, digital experience, platform migration |
Prompt strategy: Each query is targeted. The news query specifies exact date range (90 days), preferred categories, and requests structured JSON including date, source, URL, and summary per article. The exec quote query specifies verbatim-only quotes with full source attribution (context, date, source type).
Phase 2: Claude via Instructor — Enrichment and Classification
| Aspect |
Detail |
| Adapter |
Claude claude-3-5-sonnet / claude-opus via Instructor |
| Evidence Tier |
WEBFETCH (re-classification of Perplexity-retrieved content) |
| Purpose |
Classify is_sell_signal, urgency, category, is_high_value, algolia_angle per article/quote |
| Output |
Fully typed Pydantic NewsOutput |
Enrichment pipeline:
1. Raw Perplexity text -> structured article and quote extraction via Instructor
2. Per-article: is_sell_signal, sell_signal_reason, urgency, urgency_reason assigned
3. Per-quote: classification, is_high_value, algolia_angle assigned
4. UrgencySignal list synthesized from high/medium urgency items
5. sell_signal_count and high_value_quote_count computed
6. competitive_comparison and news_summary generated
Sell Signal Classification
A NewsArticle is marked is_sell_signal=True when it mentions any of:
- Search technology, site search, discovery platform, personalization engine
- Digital transformation initiative or "CX overhaul"
- Platform migration (new ecommerce platform, headless migration, replatforming)
- AI/ML investment in customer-facing products
- Leadership change in relevant role (CTO, VP Engineering, VP Digital, VP Ecommerce, CPO)
- Competitor switching search vendors (Golden Angle context)
These are the primary signals downstream synthesis modules use to determine outreach timing.
Urgency Classification
| Level |
Definition |
Example Trigger |
| high |
Act within days |
Leadership change just announced, competitor just launched search product, exec publicly committed budget |
| medium |
Act within weeks |
Digital transformation roadmap announced, new CTO hired, platform migration partnership signed |
| low |
Background context |
General company news, earnings beat, product launch unrelated to search/DX |
Validation Rules
| # |
Rule |
Severity |
Threshold |
| 1 |
At least 1 prospect article found |
required |
prospect_articles not empty |
| 2 |
At least 1 article has a date |
required |
Any article with non-empty date |
| 3 |
Articles have headlines |
required |
All articles have non-empty headline |
| 4 |
news_summary is populated |
warning |
news_summary not empty string |
| 5 |
At least 1 sell signal classified |
warning |
sell_signal_count >= 1 |
| 6 |
Competitor news populated if competitors were provided |
warning |
competitor_news not empty if competitor list non-empty |
Required failures -> status "partial". Warning failures -> logged but passed.
Evidence Requirements
| Field |
Minimum Tier |
Rationale |
| prospect_articles |
WEBFETCH |
Perplexity retrieves from indexed web sources |
| prospect_exec_quotes |
WEBFETCH |
Perplexity locates interviews, transcripts, press releases |
| urgency_signals |
WEBFETCH |
Derived from retrieved articles, not fabricated |
| competitor_news |
WEBFETCH |
Perplexity retrieval against competitor domains |
| is_sell_signal classification |
ESTIMATE |
Claude inference on retrieved content |
| urgency classification |
ESTIMATE |
Claude inference on retrieved content |
Cost Profile
| Metric |
Expected Value |
| LLM Calls |
4-8 (Perplexity queries) + 2-4 (Claude enrichment calls via Instructor) |
| Estimated Cost |
~$0.05-0.15 per audit (sonar-pro + Claude sonnet) |
| Expected Duration |
60-120 seconds |
| External API Calls |
4+ (Perplexity multi-query) |
Retry Architecture (Two Layers)
Layer 1: Collector Retries (network errors)
| Trigger |
Retry |
Backoff |
| Timeout |
3 attempts |
Exponential (2^attempt seconds) |
| Rate limit (429) |
3 attempts |
Exponential |
| Connection error |
3 attempts |
Exponential |
| Other HTTP error |
No retry |
Fail immediately |
Layer 2: Module Retries (data quality)
| Trigger |
Retry |
Backoff |
| Empty Perplexity response |
2 attempts |
5 seconds fixed |
| Instructor parse failure |
2 attempts |
5 seconds fixed |
If all retries exhausted: return ModuleExecutorResult with status="partial" (not "failed" — partial news is non-blocking).
Persistence
intel-news writes to module_executions table only (not the accounts table). Downstream synthesis modules read module_executions.output JSONB directly.
Key fields for synthesis:
- prospect_articles with is_sell_signal and urgency flags
- urgency_signals list
- sell_signal_count (used by audit scoring)
- prospect_exec_quotes with is_high_value and algolia_angle
Runtime Notes
SaaS Runtime (Temporal/Python)
- Module:
prism_platform/v2/modules/intel_news/module.py
- Collector:
prism_platform/v2/modules/intel_news/collector.py
- Enricher:
prism_platform/v2/modules/intel_news/enricher.py (Claude via Instructor)
- Validator:
prism_platform/v2/modules/intel_news/validator.py
- Schemas:
prism_platform/v2/modules/intel_news/schemas.py
- Persistence: module_executions table only
Skill Runtime (Claude Code)
- Skill file:
~/.claude/skills/algolia-intel-news/SKILL.md
- Reads from:
01-company-context.json (for exec names and competitor domains)
- Writes to:
09c-news-signals.md, 09c-news-signals.json
- MCP tools used: WebSearch (multi-query), WebFetch (article verification)
Evolution: v1 → v2
v1 Architecture (Current)
| Aspect |
v1 Design |
| Collection |
Perplexity sonar-pro via 4 targeted queries |
| Enrichment |
Claude via Instructor — classification pass on raw Perplexity output |
| Context source |
Account.executives and Account.competitors JSONB columns (from intel-company) |
| Sell signal |
Claude inference on article text |
| Urgency |
Claude inference on article text |
| Exec quotes |
Perplexity-retrieved, Claude-structured |
| Competitor news |
Per-domain Perplexity query |
v2 Architecture (Planned — Playbook-Based Agent)
In v2, intel-news becomes a playbook-driven agent. The config object holds a news_playbook that instructs Perplexity with precise sourcing requirements:
| Aspect |
v2 Design |
| Collection |
Perplexity with explicit source constraints in system prompt |
| Source requirements |
Google News, Reuters, Bloomberg, TechCrunch, VentureBeat, company newsroom |
| Citation requirements |
Every article must include URL + date. No date = article rejected. |
| Exec quote sources |
Earnings call transcripts (Motley Fool, Seeking Alpha), conference talks (YouTube), podcast appearances |
| Sell signal |
Playbook defines exact trigger phrases — not left to Claude inference |
| Urgency |
Playbook defines urgency ladder with specific signal types and time windows |
| Competitive context |
Cross-referenced against intel-company competitor list; playbook specifies diff logic |
| Schema |
Same Pydantic models (backward compatible) |
| Agent memory |
Can carry prior-run sell signals as context for trend detection |
The playbook approach eliminates prompt drift: sell signal and urgency classification logic is documented in config, not embedded in ad-hoc prompts.
What Makes This Production-Grade (vs a Simple Google News Search)
| Aspect |
Simple News Search |
PRISM intel-news |
| Coverage |
One query, one page |
4+ targeted queries: company, execs, competitors, search-specific |
| Exec specificity |
None |
Exec names from intel-company drive targeted media searches |
| Signal classification |
Manual |
Every article: is_sell_signal + urgency + category assigned automatically |
| Exec quotes |
Not captured |
Verbatim quotes with source, context, is_high_value, algolia_angle |
| Competitive view |
None |
Competitor news collected per domain, compared in competitive_comparison |
| Urgency synthesis |
None |
UrgencySignal list with urgency_level, description, date for outreach scheduling |
| Downstream use |
Text blob |
Typed fields: sell_signal_count feeds audit scoring; urgency_signals feed synthesis |
| Source provenance |
None |
Every article tracked to Perplexity retrieval with evidence tier |
Changelog
| Date |
Change |
Reason |
| 2026-03-30 |
Initial implementation |
Session 1: backend phase 1 |
| 2026-04-14 |
Module spec written to vault |
Knowledge extraction — module catalog completion |
- Module-Catalog — all 20 modules overview
- Intel-Company — foundation module this depends on
- Intel-Hiring — sibling spoke module
- Module-Spec-Template — the template this spec follows
- Evidence-Tier-Spec — evidence tier system