alterlab-parallel-web — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-parallel-web (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill gives access to Parallel Web Systems APIs for web search, deep research, and content extraction. In the scientific-writing workflow it is the default tool for general web information — news, market and technical data, documentation — while scholarly paper retrieval goes to alterlab-research-lookup.
Primary interface: Chat API (Beta, OpenAI-compatible, POST /v1beta/chat/completions) for search and research. Secondary interface: Extract API v1 (POST /v1/extract) for URL verification and special cases.
API Documentation: https://docs.parallel.ai API Key: https://platform.parallel.ai Environment Variable: PARALLEL_API_KEY
Use this skill for:
Use the Extract API only for citation verification (confirming what a specific URL says) and for cases where you need raw content from a known URL.
| Scenario | Use Instead |
|---|---|
| Finding peer-reviewed papers to cite; academic queries auto-routed to Perplexity | alterlab-research-lookup |
You specifically want Perplexity Sonar models (e.g. sonar-pro-search) | alterlab-perplexity |
| Google Scholar / PubMed lookups and DOI → BibTeX conversion | alterlab-citation-mgmt |
| A consulting-style market research report (frameworks, LaTeX, 50+ pages) | alterlab-market-research |
| A systematic literature review with PRISMA screening | alterlab-literature-review |
search command)Search the web via the Chat API (base model) and get a synthesized summary with cited sources.
Best for: General web searches, current events, fact-finding, technical lookups, news, market data.
# Basic search
python scripts/parallel_web.py search "latest advances in quantum computing 2025"
# Use core model for more complex queries
python scripts/parallel_web.py search "compare EV battery chemistries NMC vs LFP" --model core
# Save results to file
python scripts/parallel_web.py search "renewable energy policy updates" -o results.txt
# JSON output for programmatic use
python scripts/parallel_web.py search "AI regulation landscape" --json -o results.jsonKey Parameters:
objective: Natural language description of what you want to find--model: Chat model to use (base default, or core for deeper research)-o: Output file path--json: Output as JSONResponse includes: Synthesized summary organized by themes, with inline citations and a sources list.
research command)Run comprehensive multi-source research via the Chat API (core model) that produces detailed reports with citations.
Best for: Market research, comprehensive analysis, competitive intelligence, technology surveys, industry reports, any question requiring synthesis of many sources.
# Default deep research (core model)
python scripts/parallel_web.py research "comprehensive analysis of the global EV battery market"
# Save research report to file
python scripts/parallel_web.py research "AI adoption in healthcare 2025" -o report.md
# Use base model for faster, lighter research
python scripts/parallel_web.py research "latest funding rounds in AI startups" --model base
# JSON output
python scripts/parallel_web.py research "renewable energy storage market in Europe" --json -o data.jsonKey Parameters:
query: Research question or topic--model: Chat model to use (core default for deep research, or base for faster results)-o: Output file path--json: Output as JSONextract command) — Verification OnlyExtract content from specific URLs (up to 20 per call). Use it for citation verification and special cases; for general research, use search or research.
# Verify a citation's content
python scripts/parallel_web.py extract "https://example.com/article" --objective "key findings"
# Also return the full page as markdown (excerpts are always returned)
python scripts/parallel_web.py extract "https://docs.example.com/api" --full-content
# Save extraction to file
python scripts/parallel_web.py extract "https://paper-url.com" --objective "methodology" -o extracted.mdThe script uses the Chat API research models: 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 |
search defaults to base — fast, good for most queriesresearch defaults to core — thorough, good for comprehensive reports--model when you need a different depth/speed trade-offParallel also offers APIs the script does not wrap (see references/api_reference.md): the Search API v1 (ranked URLs with excerpts, modes turbo/fast/basic/advanced, domain source policies), the Task API (async deep research with processors from lite to ultra8x), and the Responses API (OpenAI Responses-compatible, model parallel with reasoning.effort low/medium/high; launched July 2026, and the Chat API quickstart in Parallel's docs now redirects to it). Call those through the parallel-web SDK or HTTP when you need domain pinning, structured output, or async runs.
from 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']}")from 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']}")from 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"])Save every web search, deep research, and extraction result to the project's sources/ folder. Saved results make each claim traceable to its raw source material (reproducibility, audit, peer review), let you recover context if the conversation is compacted, and avoid paying twice for the same query.
| 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 |
Pass -o pointing into sources/ on every call:
# Web search
python scripts/parallel_web.py search "latest advances in quantum computing 2025" \
-o sources/search_20250217_143000_quantum_computing.md
# Deep research
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)
python scripts/parallel_web.py extract "https://example.com/article" --objective "key findings" \
-o sources/extract_20250217_143500_example_article.mdBefore a new query, check whether a relevant result already exists (ls sources/) and re-read it instead of calling the API again. After saving, log the file:
[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.md| Task | Tool |
|---|---|
| Web search, current events, market/technical lookup | parallel_web.py search (this skill) |
| Comprehensive research report | parallel_web.py research --model core (this skill) |
| Citation verification / DOI metadata from a known URL | parallel_web.py extract (this skill) |
| Scholarly paper retrieval (peer-reviewed journals to cite) | alterlab-research-lookup (routes to Perplexity) |
| Google Scholar / PubMed / CrossRef database search | alterlab-citation-mgmt |
When writing scientific documents: gather background with search/research before drafting a section, verify any specific URL with extract, and route purely academic paper searches to alterlab-research-lookup. Check sources/ first and save every result back.
# Required: set your Parallel API key
export PARALLEL_API_KEY="your_api_key_here"
# Python packages
uv pip install openai # Chat API (search/research)
uv pip install parallel-web # Extract API v1 (>= 1.0; imports as `parallel`)
# Or run ad hoc without a venv:
# uv run --with openai --with parallel-web scripts/parallel_web.py search "query"Get your API key at https://platform.parallel.ai. The script sends your queries and URLs to Parallel's servers.
The script returns structured error responses rather than raising:
{
"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 uv pip install openaiparallel-web not installed: run uv pip install parallel-web (only needed for extract)'BetaResource' object has no attribute 'extract': an old copy of the script is calling the Beta method removed in parallel-web 1.0 — use this skill's current script (client.extract())See the Routing table above for alterlab-research-lookup (scholarly papers) and alterlab-citation-mgmt (Scholar/PubMed/CrossRef). Also:
| Skill | Use For |
|---|---|
alterlab-literature-review | Systematic literature reviews across academic databases |
alterlab-scientific-schematics | Generate diagrams from research findings |
Part of the AlterLab Academic Skills suite.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.