Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Search the web, extract URL content, and run deep research using the Parallel Chat API and Extract API. Use for ALL web searches, research queries, and general information gathering. Provides synthesized summaries with citations.
.claude/skills/mkurman-parallel-web/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 260% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 127% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 32% | 0% |
The Chat API supports two research models. Use base for most searches and core for deep research.
| Model | Latency | Strengths | Use When | |--------|------------|----------------------------------|-----------------------------| | base | 15s-100s | Standard research, factual queries | Web searches, quick lookups | | core | 60s-5min | Complex research, multi-source synthesis | Deep research, comprehensive reports |
Recommendations:
search command defaults to base — fast, good for most queriesresearch command defaults to core — thorough, good for comprehensive reports--model when you need different depth/speed tradeoffspythonfrom parallel_web import ParallelSearch searcher = ParallelSearch() result = searcher.search( objective="Find latest information about transformer architectures in NLP", model="base", ) if result["success"]: print(result["response"]) # Synthesized summary for src in result["sources"]: print(f" {src['title']}: {src['url']}")
pythonfrom parallel_web import ParallelDeepResearch researcher = ParallelDeepResearch() result = researcher.research( query="Comprehensive analysis of AI regulation in the EU and US", model="core", ) if result["success"]: print(result["response"]) # Full research report print(f"Citations: {result['citation_count']}")
pythonfrom parallel_web import ParallelExtract extractor = ParallelExtract() result = extractor.extract( urls=["https://docs.example.com/api-reference"], objective="API authentication methods and rate limits", ) if result["success"]: for r in result["results"]: print(r["excerpts"])
Every web search and deep research result MUST be saved to the project's sources/ folder.
This ensures all research is preserved for reproducibility, auditability, and context window recovery.
| Operation | -o Flag Target | Filename Pattern | |-----------|-----------------|------------------| | Web Search | sources/search_<topic>.md | search_YYYYMMDD_HHMMSS_<brief_topic>.md | | Deep Research | sources/research_<topic>.md | research_YYYYMMDD_HHMMSS_<brief_topic>.md | | URL Extract | sources/extract_<source>.md | extract_YYYYMMDD_HHMMSS_<brief_source>.md |
-o Flag)CRITICAL: Every call to parallel_web.py MUST include the -o flag pointing to the sources/ folder.
bash# Web search — ALWAYS save to sources/ python scripts/parallel_web.py search "latest advances in quantum computing 2025" \ -o sources/search_20250217_143000_quantum_computing.md # Deep research — ALWAYS save to sources/ python scripts/parallel_web.py research "comprehensive analysis of the global EV battery market" \ -o sources/research_20250217_144000_ev_battery_market.md # URL extraction (verification only) — save to sources/ python scripts/parallel_web.py extract "https://example.com/article" --objective "key findings" \ -o sources/extract_20250217_143500_example_article.md
sources/sources/ folder provides complete transparency into how information was gatheredsources/ for existing resultsWhen saving research results, always log:
[HH:MM:SS] SAVED: Search results to sources/search_20250217_143000_quantum_computing.md
[HH:MM:SS] SAVED: Deep research report to sources/research_20250217_144000_ev_battery_market.mdBefore calling parallel_web.py, check if a relevant result already exists in sources/:
bashls sources/ # Check existing saved results
| Task | Tool | Command | |------|------|---------| | Web search (any) | parallel_web.py search | python scripts/parallel_web.py search "query" -o sources/search_<topic>.md | | Deep research | parallel_web.py research | python scripts/parallel_web.py research "query" -o sources/research_<topic>.md | | Citation verification | parallel_web.py extract | python scripts/parallel_web.py extract "url" -o sources/extract_<source>.md | | Academic paper search | research_lookup.py | Routes to Perplexity sonar-pro-search | | DOI/metadata lookup | parallel_web.py extract | Extract from DOI URLs (verification) |
search or research to gather background information — save results to sources/research-lookup (which routes academic queries to Perplexity) — save results to sources/parallel_web.py extract — save results to sources/parallel_web.py research --model core — save results to sources/sources/ for existing results to avoid duplicate API callsbash# Required: Set your Parallel API key export PARALLEL_API_KEY="your_api_key_here" # Required Python packages pip install openai # For Chat API (search/research) pip install parallel-web # For Extract API (verification only)
Get your API key at https://platform.parallel.ai
The script handles errors gracefully and returns structured error responses:
json{ "success": false, "error": "Error description", "timestamp": "2025-02-14 12:00:00" }
Common issues:
PARALLEL_API_KEY not set: Set the environment variableopenai not installed: Run pip install openaiparallel-web not installed: Run pip install parallel-web (only needed for extract)Rate limit exceeded: Wait and retry (default: 300 req/min for Chat API)| Skill | Use For | |-------|---------| | research-lookup | Academic paper searches (routes to Perplexity for scholarly queries) | | citation-management | Google Scholar, PubMed, CrossRef database searches | | literature-review | Systematic literature reviews across academic databases | | scientific-schematics | Generate diagrams from research findings |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 4,874 | 4,259 | -13% | 1 | 1 | 0% | 691 | 2,488 | +260% | 0 | 0 | — |
case-02 | fail→pass | 11,536 | 3,582 | -69% | 1 | 1 | 0% | 1,866 | 2,397 | +28% | 0 | 0 | — |
case-03 | fail→pass | 6,804 | 3,812 | -44% | 1 | 1 | 0% | 1,188 | 2,501 | +111% | 0 | 0 | — |
case-04 | fail→pass | 6,464 | 2,923 | -55% | 1 | 1 | 0% | 1,046 | 2,373 | +127% | 0 | 0 | — |
case-05 | fail→pass | 10,712 | 4,209 | -61% | 1 | 1 | 0% | 1,853 | 2,441 | +32% | 0 | 0 | — |
case-06 | fail→pass | 9,594 | 3,201 | -67% | 1 | 1 | 0% | 1,684 | 2,399 | +42% | 0 | 0 | — |
case-07 | fail→pass | 10,427 | 2,117 | -80% | 1 | 1 | 0% | 1,501 | 2,155 | +44% | 0 | 0 | — |
case-08 | fail→pass | 10,182 | 2,453 | -76% | 1 | 1 | 0% | 1,872 | 2,281 | +22% | 0 | 0 | — |
case-14 | fail→pass | 12,598 | 3,523 | -72% | 1 | 1 | 0% | 2,121 | 2,294 | +8% | 0 | 0 | — |
case-09 | fail→pass | 7,277 | 2,732 | -62% | 1 | 1 | 0% | 1,338 | 2,332 | +74% | 0 | 0 | — |
case-10 | fail→pass | 11,971 | 2,514 | -79% | 1 | 1 | 0% | 2,177 | 2,279 | +5% | 0 | 0 | — |
case-11 | fail→pass | 9,000 | 3,065 | -66% | 1 | 1 | 0% | 1,717 | 2,391 | +39% | 0 | 0 | — |
case-12 | fail→pass | 11,413 | 4,724 | -59% | 1 | 1 | 0% | 1,755 | 2,712 | +55% | 0 | 0 | — |
case-13 | pass→pass | 9,754 | 4,407 | -55% | 1 | 1 | 0% | 1,580 | 2,590 | +64% | 0 | 0 | — |
case-15 | pass→pass | 4,352 | 1,384 | -68% | 1 | 1 | 0% | 670 | 2,023 | +202% | 0 | 0 | — |
case-16 | fail→pass | 8,556 | 1,825 | -79% | 1 | 1 | 0% | 1,421 | 2,123 | +49% | 0 | 0 | — |
case-17 | fail→pass | 9,044 | 2,459 | -73% | 1 | 1 | 0% | 1,729 | 2,238 | +29% | 0 | 0 | — |
case-18 | fail→pass | 3,565 | 2,660 | -25% | 1 | 1 | 0% | 494 | 2,282 | +362% | 0 | 0 | — |
case-19 | fail→pass | 12,324 | 7,057 | -43% | 1 | 1 | 0% | 1,885 | 3,062 | +62% | 0 | 0 | — |
case-20 | fail→pass | 12,933 | 3,406 | -74% | 1 | 1 | 0% | 2,085 | 2,429 | +16% | 0 | 0 | — |
case-21 | pass→pass | 7,361 | 3,170 | -57% | 1 | 1 | 0% | 1,257 | 2,406 | +91% | 0 | 0 | — |
case-22 | pass→pass | 9,543 | 3,500 | -63% | 1 | 1 | 0% | 1,725 | 2,449 | +42% | 0 | 0 | — |
case-23 | fail→pass | 13,545 | 1,877 | -86% | 1 | 1 | 0% | 2,425 | 2,143 | -12% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +83 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.