On this page
A senior analyst spends 4-6 hours researching a single market question: querying multiple databases, reading 20-30 articles, cross-referencing data points, and synthesizing findings into a coherent brief. Most of that time is spent on mechanical work -- finding sources on platforms like arXiv or SEC EDGAR, extracting relevant paragraphs, checking for contradictions -- not on the actual analysis.
CrawlForge's deep_research tool compresses this entire workflow into a single API call. It automatically expands your query, searches multiple sources, verifies credibility, detects conflicting information, and produces a synthesized report with citations. This guide shows you how to build a production research agent around it.
Table of Contents
- What Is Deep Research
- Architecture Overview
- Step 1: Configure the Research Agent
- Step 2: Run Multi-Source Research
- Step 3: Process and Validate Findings
- Step 4: Generate Research Reports
- Step 5: Build Recurring Research Workflows
- Credit Cost Analysis
- Results and Benefits
- Frequently Asked Questions
What Is Deep Research
What is deep research in AI? Deep research is an automated multi-stage information gathering process where an AI agent systematically queries multiple sources, extracts relevant findings, cross-references data for accuracy, detects contradictions, and synthesizes results into a structured report with source citations and credibility scores.
Unlike a simple web search that returns 10 links, deep_research operates as a complete research workflow:
| Stage | What Happens | Why It Matters |
|---|---|---|
| Query expansion | Generates synonym and related queries | Catches results a single query would miss |
| Multi-source search | Queries 10-50 sources in parallel | Breadth of coverage |
| Content extraction | Pulls relevant passages from each source | Depth of information |
| Source verification | Scores each source for credibility | Quality assurance |
| Conflict detection | Flags contradictory information | Accuracy |
| Synthesis | Produces a coherent report with citations | Actionable output |
How does deep research work? The tool takes a research topic, automatically generates expanded search queries, crawls and analyzes pages from multiple sources, scores source credibility, detects conflicting claims across sources, and synthesizes everything into a structured report. The entire process runs in 30-120 seconds depending on scope.
Architecture Overview
A research agent combines deep_research with supporting tools:
| Component | Tool | Credits | Purpose |
|---|---|---|---|
| Core research | deep_research | 10 | Multi-source investigation |
| Follow-up extraction | extract_content | 2 | Deep-dive on specific sources |
| Document analysis | process_document | 3 | Parse cited PDFs and reports |
| Summary generation | summarize_content | 2 | Executive summary creation |
| Supplemental search | search_web | 5 | Targeted follow-up queries |
Step 1: Configure the Research Agent
Set up a research agent with configurable parameters for different research types.
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({
name: 'research-agent',
version: '1.0.0',
});
interface ResearchConfig {
topic: string;
approach: 'broad' | 'focused' | 'academic' | 'current_events' | 'comparative';
maxSources: number;
maxDepth: number;
credibilityThreshold: number;
sourceTypes: Array<'academic' | 'news' | 'government' | 'commercial' | 'blog'>;
timeLimit: number;
}
// Preset configurations for common research types
const RESEARCH_PRESETS: Record<string, Partial<ResearchConfig>> = {
market: {
approach: 'broad',
maxSources: 30,
maxDepth: 5,
credibilityThreshold: 0.4,
sourceTypes: ['news', 'commercial', 'blog'],
timeLimit: 90000, // 90 seconds
},
technical: {
approach: 'focused',
maxSources: 20,
maxDepth: 3,
credibilityThreshold: 0.6,
sourceTypes: ['academic', 'blog', 'commercial'],
timeLimit: 60000,
},
competitive: {
approach: 'comparative',
maxSources: 25,
maxDepth: 4,
credibilityThreshold: 0.5,
sourceTypes: ['commercial', 'news', 'blog'],
timeLimit: 120000,
},
academic: {
approach: 'academic',
maxSources: 40,
maxDepth: 5,
credibilityThreshold: 0.7,
sourceTypes: ['academic', 'government'],
timeLimit: 120000,
},
};Step 2: Run Multi-Source Research
Execute the research with deep_research and handle the structured output.
interface ResearchResult {
synthesis: string;
sources: Array<{
url: string;
title: string;
credibilityScore: number;
relevantFindings: string[];
}>;
conflicts: Array<{
topic: string;
positions: Array<{ source: string; claim: string }>;
}>;
confidence: number;
queryExpansions: string[];
}
async function runResearch(config: ResearchConfig): Promise<ResearchResult> {
const result = await client.callTool({
name: 'deep_research',
arguments: {
topic: config.topic,
maxDepth: config.maxDepth,
maxUrls: config.maxSources,
enableSourceVerification: true,
enableConflictDetection: true,
enableSynthesis: true,
researchApproach: config.approach,
credibilityThreshold: config.credibilityThreshold,
sourceTypes: config.sourceTypes,
timeLimit: config.timeLimit,
outputFormat: 'comprehensive',
queryExpansion: {
enableSynonyms: true,
enableContextual: true,
maxVariations: 8,
},
},
});
return JSON.parse(result.content[0].text);
}
// Example: Research a market question
const marketResearch = await runResearch({
topic: 'MCP server adoption trends in enterprise AI development 2026',
...RESEARCH_PRESETS.market,
} as ResearchConfig);
console.log(`Research complete: ${marketResearch.sources.length} sources analyzed`);
console.log(`Confidence level: ${marketResearch.confidence}`);
console.log(`Conflicts found: ${marketResearch.conflicts.length}`);Step 3: Process and Validate Findings
For critical research, drill deeper into key sources and validate specific claims.
async function validateFindings(
research: ResearchResult,
topN: number = 5
): Promise<{
validated: ResearchResult;
additionalInsights: string[];
}> {
const additionalInsights: string[] = [];
// Get full content from top sources
const topSources = research.sources
.sort((a, b) => b.credibilityScore - a.credibilityScore)
.slice(0, topN);
for (const source of topSources) {
// Extract full content for deeper analysis
const fullContent = await client.callTool({
name: 'extract_content',
arguments: { url: source.url },
});
const content = JSON.parse(fullContent.content[0].text);
// Check for PDF references in the source
if (content.content.includes('.pdf')) {
const pdfUrls = content.content.match(
/https?:\/\/[^\s]+\.pdf/g
) || [];
for (const pdfUrl of pdfUrls.slice(0, 2)) {
try {
const doc = await client.callTool({
name: 'process_document',
arguments: {
source: pdfUrl,
sourceType: 'pdf_url',
},
});
const docResult = JSON.parse(doc.content[0].text);
additionalInsights.push(
`From ${pdfUrl}: ${docResult.summary || docResult.content?.slice(0, 200)}`
);
} catch {
// PDF might be behind auth; skip
}
}
}
}
return {
validated: research,
additionalInsights,
};
}Step 4: Generate Research Reports
Transform raw research output into polished, shareable reports.
interface ResearchReport {
title: string;
executiveSummary: string;
keyFindings: string[];
detailedAnalysis: string;
conflictsAndCaveats: string[];
sources: Array<{ title: string; url: string; credibility: string }>;
methodology: string;
generatedAt: string;
}
async function generateReport(
research: ResearchResult,
reportTitle: string
): Promise<ResearchReport> {
// Generate executive summary
const summaryResult = await client.callTool({
name: 'summarize_content',
arguments: {
text: research.synthesis,
},
});
const summary = JSON.parse(summaryResult.content[0].text);
// Extract key findings as bullet points
const keyFindings = research.sources
.flatMap(s => s.relevantFindings)
.filter((finding, index, self) => self.indexOf(finding) === index)
.slice(0, 10);
return {
title: reportTitle,
executiveSummary: summary.summary,
keyFindings,
detailedAnalysis: research.synthesis,
conflictsAndCaveats: research.conflicts.map(
c => `Conflicting information on "${c.topic}": ${c.positions.length} different positions found across sources`
),
sources: research.sources.map(s => ({
title: s.title,
url: s.url,
credibility: s.credibilityScore > 0.7 ? 'High' : s.credibilityScore > 0.4 ? 'Medium' : 'Low',
})),
methodology: `Automated research using CrawlForge deep_research. ${research.sources.length} sources analyzed with ${research.queryExpansions.length} query variations. Credibility threshold: ${research.confidence}.`,
generatedAt: new Date().toISOString(),
};
}Step 5: Build Recurring Research Workflows
For ongoing research needs, set up scheduled workflows that track how topics evolve over time.
interface RecurringResearch {
id: string;
topic: string;
schedule: 'daily' | 'weekly' | 'monthly';
config: ResearchConfig;
history: ResearchReport[];
}
async function runRecurringResearch(
research: RecurringResearch
): Promise<ResearchReport> {
// Run the research
const result = await runResearch(research.config);
// Generate the report
const report = await generateReport(
result,
`${research.topic} - ${new Date().toISOString().split('T')[0]}`
);
// Compare with previous report if available
if (research.history.length > 0) {
const previousReport = research.history[research.history.length - 1];
const newFindings = report.keyFindings.filter(
f => !previousReport.keyFindings.includes(f)
);
if (newFindings.length > 0) {
console.log(`\nNew findings since last report:`);
newFindings.forEach(f => console.log(` - ${f}`));
}
}
research.history.push(report);
return report;
}Credit Cost Analysis
deep_research at 10 credits per call is the most expensive single CrawlForge tool, but it replaces what would otherwise require 15-30 individual tool calls.
| Research Type | Tools Used | Total Credits | Manual Equivalent |
|---|---|---|---|
| Quick topic research | deep_research | 10 | 2-3 hours |
| With source validation | + extract_content x5 | 20 | 4-5 hours |
| With PDF analysis | + process_document x2 | 26 | 5-6 hours |
| Full report generation | + summarize_content | 28 | 6-8 hours |
Monthly costs for a research team:
| Usage | Credits/Month | Recommended Plan |
|---|---|---|
| 10 reports/month | 280 | Free tier (1,000 credits) |
| 50 reports/month | 1,400 | Hobby ($19/mo, 5,000 credits) |
| 200 reports/month | 5,600 | Professional ($99/mo, 50,000 credits) |
Results and Benefits
A CrawlForge research agent delivers:
- Speed: Complete a research brief in 2-5 minutes instead of 4-6 hours
- Breadth: Analyze 20-50 sources per query vs. 5-10 manually
- Accuracy: Built-in conflict detection catches contradictions humans miss
- Consistency: Same methodology every time, no researcher bias
- Auditability: Every source cited with credibility scores
The tool is particularly powerful for recurring research -- tracking how a market evolves weekly, monitoring regulatory changes, or keeping a competitive landscape document current.
Frequently Asked Questions
How does deep_research compare to Perplexity or ChatGPT Search?
deep_research analyzes significantly more sources (up to 50 per query vs. 5-10 for chat-based search), includes credibility scoring, detects conflicts between sources, and returns structured data you can process programmatically. Chat-based tools are better for quick, conversational answers. CrawlForge is better for systematic, repeatable research workflows.
Can I use deep_research for academic research?
Yes. Set researchApproach: 'academic' and sourceTypes: ['academic', 'government'] to prioritize scholarly sources. The credibility threshold filters out low-quality sources automatically. Note that deep_research works with publicly accessible web sources -- it cannot access papers behind paywalls.
Is 10 credits per call worth it?
Consider the alternative: manually, you would use search_web (5 credits) + multiple extract_content calls (2 credits each) + analyze_content (3 credits each). Doing this for 20 sources would cost 100+ credits. deep_research packages all of this into a single 10-credit call with built-in synthesis.
Try deep research right now. Start free with 1,000 credits -- enough for 100 research reports. No credit card required.
Related resources:
Try this yourself — no signup needed
Run any of CrawlForge's 27 scraping and extraction tools in the playground, then start free with 1,000 credits.
1,000 free credits • Refills monthly • No credit card required
Tags
About the Author
Stay updated with the latest insights
Get tutorials, product updates, and web scraping tips delivered to your inbox.
No spam. Unsubscribe anytime.