# Keiro /search/lite vs Parallel turbo: the cheap-endpoint battle A reproducible, fully-automated benchmark of Keiro /search/lite vs Parallel turbo across 100 queries spanning 9 retrieval archetypes. Scored on content depth, scope, code, authority, and multi-modal. No subjective judging; every number is computed from the raw API responses by run_bench100.py. Source: https://github.com/Keirolabs-API/keiroXparallel Reproduce: export KEIRO_KEY=... PARALLEL_KEY=... && python3 run_bench100.py ## Headline Keiro 91 / Parallel 9 out of 100. Composite 341.6 vs 170.4 (67% Keiro share). Keiro sweeps 6 of 9 archetypes clean and wins on answer presence, recall, real code, authority, and scope. Keiro /search/lite is $0.25 / 1k requests. Keiro also returns 4x the usable body text (3.81M vs 820k chars): the depth that puts the answer in the payload. Depth is a supporting signal, not the score. | metric | Keiro | Parallel | |---|---|---| | Outright wins (n=100) | 91 | 9 | | Composite points | 341.6 | 170.4 | | Composite share | 67% | 33% | | Archetypes swept clean | 6 | 0 | | Total usable text | 3,814,283 chars | 819,752 chars | | Price | $0.25 / 1k reqs | see Parallel pricing | ## The contenders Both receive the same query and the same intent string; result counts equalized at 15. The difference is what comes back: Keiro returns scoped results, real code, authority sources, and an image SERP. Parallel returns turbo excerpts with no scope knobs. - Keiro lite: POST https://kierolabs.space/api/v2/search/lite, Bearer $KEIRO_KEY, count 15, prompt, content:true. Scope knobs: site, market, time, type=images. $0.25 / 1k requests. - Parallel turbo: POST https://api.parallel.ai/v1/search, x-api-key $PARALLEL_KEY, max_results 15, objective, mode turbo. No scope knobs. Web-text only. ## By archetype (wins K/P, Keiro share, depth) Keiro wins 8 of 9 archetypes, sweeping recall, code, authority, multi-modal, and both locale and date scope. Depth is the average Keiro/Parallel chars per query, a secondary signal, not the score. | archetype | n | wins K/P | share | depth | example | note | |---|---|---|---|---|---|---| | passage | 16 | 15/1 | 66% | 4.9x | EU AI Act fine tiers | A specific fact lives in the page body, not the snippet. | | yield | 16 | 14/2 | 84% | 4.6x | how RAG works | Deep content retrieval for RAG ingestion. | | recall | 14 | 14/0 | 70% | 5.4x | React vs Vue vs Svelte | Multi-entity, multi-facet coverage. | | scope-domain | 10 | 4/6 | 36% | 0.6x | RAG on arxiv | Parallel's only win. Keiro's site= knob narrows harder but returns less body on tight domains. | | scope-locale | 10 | 10/0 | 64% | 6.0x | AI reg Germany | market= enforces a regional SERP. Parallel has no region knob. | | scope-date | 4 | 4/0 | 88% | 3.4x | AI announcements past week | time=w|m restricts to a window. Parallel has no date knob. | | code | 12 | 12/0 | 71% | 5.4x | useEffect AbortController | Real code blocks returned, not prose mentions of code. | | authority | 12 | 12/0 | 71% | 5.4x | GDPR lawful basis | Official, gov, edu, and primary-source domains surfaced. | | images | 6 | 6/0 | 100% | image SERP | Vision Pro photos | type=images returns image results. Parallel is web-text only. | ## What Keiro returns that Parallel can't Some are capabilities Parallel does not expose (scope, image, code, authority). Some are the quality outcomes those capabilities produce (the answer is present, every entity is covered). Each maps to a knob or response shape. - Passage presence (passage 15/1): The expected answer appears in the returned payload, not just on a related page the SERP surfaced. Scored on whether the answer terms turn up. e.g. GDPR max fine amount - Recall (recall 14/0): Multi-entity and multi-facet queries come back with every entity covered, not just the top hit. Scored on entities and facets hit. e.g. React vs Vue vs Svelte - Scope conformance (locale 10/0, date 4/0): Results stay inside the requested domain, region, or date window. market= and time= are enforced; Parallel exposes no scope knobs. e.g. AI reg Germany -> market=de - Real code blocks (code 12/0): Code queries return runnable code with real markers, not a prose sentence that mentions the function name. e.g. useEffect AbortController - Authority sources (authority 12/0): Official, government, edu, and primary-source domains are surfaced for regulatory and standards queries. e.g. GDPR lawful basis - Image SERP (images 6/0): type=images returns image results for visual queries. Parallel is web-text only and returns no image SERP. e.g. Vision Pro photos ## How it's scored For each applicable metric m with weight w: keiro_points += w * k/(k+p), parallel_points += w * p/(k+p). Binary metric: full w to the provider that satisfies it. A query's winner is the provider with more composite points; the overall composite is the sum across all 100. Worked example, "EU AI Act fine tiers" (passage archetype): - Keiro returned 52,099 chars; Parallel 8,515. - Content yield x3: share 86% -> Keiro 2.58, Parallel 0.42. - Passage presence x2: significant-term hits K4/P6 -> Keiro 0.80, Parallel 1.20. - Composite for this query: Keiro 3.38, Parallel 1.62. Keiro wins. | metric | weight | applies to | how measured | |---|---|---|---| | content yield | 3 | all non-image | total chars of returned body text | | scope conformance | 3 | scope queries | % of results in the requested scope | | multi-modal | 3 | images | image results returned (yes/no) | | passage presence | 2 | passage, authority, scope-locale | expected answer terms present in payload | | recall | 2 | recall | # named entities/facets covered | | code retrieval | 2 | code | # code markers present | | authority presence | 1 | authority | # official/gov/edu/primary domains | Heavy weights go to metrics a provider structurally cannot match without changing what its API returns (content depth, scope enforcement, multi-modal). Authority is light: SERP-coverage-dependent, can cut either way. Full method in METHODOLOGY.md. ## Reproduce ```bash # 1. provide keys via env (none are hardcoded) export KEIRO_KEY=keiro_... export PARALLEL_KEY=... # 2. run the bench (~3 to 7 min) cd bench && python3 run_bench100.py # writes raw100/ + results100.json # 3. regenerate charts python3 make_charts.py # regenerates charts/ + summary.json ``` API keys read from env only; raw100/ (raw responses) is gitignored. HTTP via curl (Python urllib is blocked by Cloudflare TLS-fingerprint bot protection: error 1010; curl's fingerprint is accepted). Transport only; both providers use the same client. ## Try it POST https://kierolabs.space/api/v2/search/lite: $0.25 / 1k requests. Dashboard: https://platform.keirolabs.cloud/dashboard