Benchmark reportVERIS-TF-001

Veris Twin Fidelity Benchmark

703 of 721 independent verdicts agree with production — same outcome, same error code, nothing set aside.Of the 18 that differ, four are the twin’s doing. Zero fake passes. Every mismatch named below.

DocumentVERIS-TF-001
Rev2.0
DateAUG 2026
Tests721
Services15
Catalogue70+ TWINS

This benchmark measures how closely Veris twins behave like the production systems they replace, scored by an independent instrument we do not control. Every test is first proven against the live vendor API, then run unmodified against the twin; every divergence is counted and named. Every number below is an exact count over a fixed population. There is no sampling and there are no confidence intervals, because none are warranted.

Veris builds twins as a catalogue. More than 70 services are twinned today, every one produced by the same factory and method; internal and proprietary systems are twinned to order from a customer’s own specs, schemas, or recorded traffic.

In the catalogue today

SalesforceTwilioZendeskIntercomAtlassianDocuSignPagerDutyOpenAIGoogle MapsMySQLApache KafkaSnowflakeBigQuerySlackShopifyPayPalNotionOktaGitHubDatadogGoogle CloudSAPMongoDBElasticsearchDatabricksClickHouseStripeHubSpotMailchimpJiraAuth0GitLabAsanaAWSPostgreSQLRedisRabbitMQDynamoDBCockroachDB+ dozens more, from banking cores to ERPs

The fifteen services scored in this study are the ones the independent instrument covers with live vendor accounts to prove its tests against. They are a sample, not the catalogue, selected by instrument availability rather than score. Because every twin is produced the same way, the sample is representative of the build process. A sixteenth service, Salesforce, was measured but its score is withheld this revision: the connector is migrating to API v67 and its real-side answers are being re-recorded.

Measured through Rev 2.0

StripeQuickBooksGoogle MailHubSpotLinearAttioAsanaNotionFigmaGoogle CalendarAcuity SchedulingAirtableGoogle DriveOutlookCalendly
1

The experiment: tests we didn’t write, proven on the real system first

The obvious objection to a vendor-run fidelity study is that the vendor wrote the tests. This study removes it by borrowing its instrument from an open-source project that has nothing to do with us: NangoHQ/integration-templates, a public repository of production integration code written for Nango’s own customers to run against live vendor APIs. It runs here unmodified through Nango’s own command-line tool: 721 template operations across fifteen services. Every test, every assertion, and every pass-or-fail decision in this study belongs to them. We supplied only the environment the tests point at.

the apparatus · the real system defines correct — the twin never doesInstrument721 tests · not oursarm a · proven first · scores 100% by constructionLive vendor APIdedicated accountsarm b · identical run · only the base url changesVeris twinsame client · same payloadsCompareverdict by verdictLedgerevery difference named
FIG 1 · The two-arm protocol. A test that fails on the real system is fixed or discarded before it ever touches the twin, so the real arm is the definition of correct and everything below 100% on the twin arm is a divergence with a name.

A test written by looking at the twin can only prove that the twin behaves the way its author expected. It cannot detect the cases where the author’s understanding of the real system was wrong, and those are exactly the cases that matter. So the real system defines what counts as a correct answer, and the twin never does. Every test is first proven against the live vendor API on a dedicated account; only then is it pointed at the twin, with only the base URL changed.

2

The count: 703 of 721 verdicts agree

Agreement is scored strictest first. The exact-match lens is the raw measurement: both worlds must return the same outcome — and when they refuse, the same error code — and the number is published before anything is attributed. Every one of the 18 mismatches is then traced to a cause with evidence: fourteen belong to our own test setup, leftover history in the real accounts, or a vendor outage on recording day; four are the twin genuinely behaving differently. The population never changes: all 721 units, nothing excluded, nothing filed under “unknown”.

EXACT-MATCH LENS · RAW · same outcome, same error code, nothing set aside703 AGREE · 18 DIVERGE · = 97.5%
ATTRIBUTION LENS · only the mismatches the twin itself caused4 OF 721 ON THE TWIN · = 0.6%
agree 14 · our test setup, account history, or a vendor outage — not the twin 4 · the twin’s own doing, each named below
FIG 2· Every unit, counted. One cell = one of the 721 tests; no sampling, no confidence intervals, nothing excluded. The raw count is published first and never adjusted; every one of the 18 mismatches was then traced to a cause and checked against evidence — none filed under “unknown”. Fourteen trace to the test setup, leftover account history, or a vendor outage during recording; the four that belong to the twin are itemized in the ledger below. Under the loosest lens — did it work or not, ignoring which error — 707 of 721 agree, 98.1%. Cells are sorted; per-unit placement lives in the retained per-operation ledger.
Per service · exact match, with mismatches attributed
ServiceUnitsExact match · rawTwin-attributable
Stripe7171/71 · 100.0%
QuickBooks6464/64 · 100.0%
Google Mail5957/59 · 96.6%1
HubSpot5858/58 · 100.0%
Linear5554/55 · 98.2%0 · not the twin
Attio5151/51 · 100.0%
Asana5050/50 · 100.0%
Notion4946/49 · 93.9%0 · not the twin
Figma4646/46 · 100.0%
Google Calendar4642/46 · 91.3%0 · not the twin
Acuity Scheduling4340/43 · 93.0%1
Airtable3737/37 · 100.0%
Google Drive3434/34 · 100.0%
Outlook3432/34 · 94.1%2
Calendly2421/24 · 87.5%0 · not the twin
All fifteen721703/721 · 97.5%4 · 0.6%

Twins of large APIs are scoped to their working core, and every operation outside a twin’s published contract refuses cleanly by policy, so scope is a countable property of each twin, not an estimate.

3

The errors point the safe way: zero fake passes

The twin never invents a success. In every twin-attributable mismatch it refuses or under-claims: Outlook’s two mail-writing operations declare themselves unsupported instead of pretending; one Acuity answer is rejected for missing a detail rather than fabricating it; one Gmail refusal carries a different stated reason — but both worlds refuse. A permissive twin inflates every score run against it; a strict one only produces conservative results. That is what makes twin-based testing usable in an SDLC: a green integration run is never the twin flattering the agent’s code, and a red one means the agent fixes something real or hits a documented divergence.

twin stricter · score understated · safeall 4 twin-attributable mismatches land here — a refusalshaped differently, or declared; never a pass the twin inventstwin permissive · score inflated · dangerous0fake passes against vendorpolicy, every revision14 NOT THE TWIN’S FAULTtest-suite checklists (6) · account history (4)vendor outage (3) · our seeding (1) — named
FIG 3 · A permissive twin silently inflates every score run on top of it; a strict twin can only understate. This is what makes a green run against the twin trustworthy and a red one worth fixing.

Rev 1.0 carried one divergence that pointed the wrong way — cross-run memory of spent ids, flagged then as the structural exception. It is closed: the twin now takes seedable registries of ids its world does not own. This revision closed a different hazard on the same side: one Airtable request was found slipping past the sandbox to the real service. The hole is closed and the service re-measured at 37 of 37. What remains on the permissive side is nothing: all four open items are refusals or declared gaps, never an invented success — and where a real answer cannot be measured (an Acuity add-on nobody has bought), the unproven claim is counted against the twin, not for it.

4

Every divergence has a name

The study produces a named divergence list rather than a score, and the twin-attributable list is now four units long — each with the mechanism behind it, read off the wire logs. Two wait on capability the twin declares it lacks: Outlook’s mail-writing paths, while every mail-reading operation already matches. One waits on a real answer nobody can measure without buying a paid Acuity add-on — until someone does, it counts against the twin, because unproven claims default against us. And one is kept open deliberately: making the twin match one Gmail refusal would break three other answers measured from the real Gmail, so it is documented rather than papered over. This revision’s ledger shrank the right way: Linear went from 33 matches to 54 after its error shapes were corrected, and twelve Acuity misses fell to a seeding fix without touching the twin.

The divergence ledger · every twin-attributable item · 4 of 721 units
UnitProduction saysTwin saysDirectionMechanism
Outlook · create‑draft‑messagePass404 not foundDeclared boundaryThe twin cannot draft mail yet and says so honestly instead of pretending. Every mail-reading operation already matches the real service; building the two write paths completes Outlook.
Outlook · send‑mailPass404 not foundDeclared boundaryThe second unbuilt write path, declared rather than faked. Anything relying on these two operations cannot be tested against the twin until they exist.
Acuity · certificatesPass500 rejectedCounted against us by defaultThe twin said “done” but its answer was missing a detail the calling software insists on. Measuring the real answer requires a paid add-on the test account does not have; until someone buys it, the unit stays counted against the twin — unproven claims default against us, not for us.
Gmail · get‑attachment403 PERMISSION_DENIED400 invalidSame refusal, different reasonBoth sides say no, with different stated reasons — and which reason matters, because “no such thing” quietly reveals whether a record exists. Kept open deliberately: any rule matching this one refusal would break three other answers measured from the real Gmail.

The fourteen set-aside mismatches, named too: six are the instrument’s own checklist demanding details the real services never send — a form id Calendly doesn’t have, a payment field that is often empty, a cycle name Linear itself calls optional; corrections are being filed with the public test-suite project. Four are leftover history in the real accounts (a calendar already removed, notification channels already used up). Three are a Notion outage on the day its real answers were recorded. One is a Gmail label our own earlier recording session had already deleted. Circumstance, not behaviour: counted among the 18 mismatches, attributed to their real causes rather than the twin.

5

The twin is the steadier instrument: 238 = 238

A repeat over 238 units across two freshly built deployments returned every verdict identical, down to the HTTP status, with zero flips. Over the same repeats, four verdicts on the real arm moved, on vendor-side memory of spent ids. For agents, a red test against the twin is not flake: no cycles burned retrying nondeterministic failures, and two agents testing the same change get the same answer. The oracle is held to the same standard: the recorded real-arm corpus is verified byte-stable before every scoring, and has not moved since it was taped.

FIG 4 · The repeat study. Amber marks on the live arm are schematic positions; the four flips trace to vendor-side memory of spent ids. Production is not a stable measurement; the twin is the more controlled instrument.
6

3.6× faster at the median; the cost is the missing tail

FIG 5· Median latency per service, twin ● vs live ○, log scale. The gap between the dots is the speedup, and the tail is on the record instead of clipped: live worst cases run to 22 s and 32 s of rate-limit backoff. * Open defect on an unclaimed refusal path, not a simulated delay; the twin’s slowest genuine response was 3.1 s. Percentiles in the table below.

A typical request is the same order of magnitude in both worlds; the twin runs about 3.6x faster at the median and its p90 stays near 130 ms on every service. The tail is where the two worlds separate: real vendors regularly take half a second and occasionally tens of seconds (Attio’s worst request sat through 32 s of rate-limit backoff), while the twin has no throttling and no multi-second stalls on someone else’s infrastructure. For agent loops this is the difference between running an integration suite once and running it hundreds of times per session. The cost is that same missing tail: timeout, retry, and backoff behavior under real-world latency is not exercised by default. Latency and fault injection exist in the product; twin behavior under injected conditions is not covered by this study.

Real vs twin latency · typical = median, slow = p90, worst = single slowest
ServiceReal typicalReal slowReal worstTwin typicalTwin slowTwin worst
Asana242 ms570 ms22 s67 ms121 ms3.1 s
Stripe207 ms969 ms6.0 s86 ms136 ms209 ms
Airtable147 ms722 ms1.6 s60 ms103 ms805 ms
Google Calendar370 ms772 ms22 s91 ms168 ms21 s *
Google Drive279 ms566 ms1.3 s89 ms118 ms3.1 s
Google Mail331 ms717 ms1.9 s77 ms118 ms255 ms
Calendly238 ms355 ms1.4 s54 ms74 ms84 ms
Attio490 ms901 ms32 s64 ms107 ms236 ms
All eight283 ms748 ms32 s78 ms134 ms21 s *
7

The users are measured too: ahead of a public baseline on every check

A high-fidelity twin proves the systems around the agent behave. Simulated users carry the conversation itself, so the same rule applies to them: measured, not asserted. We scored Veris persona actors on a five-check naturalness rubric in the style of the τ-USI framework (communication style, information pattern, clarification) against a public baseline, the user simulator of τ²-bench retail (Sierra Research). One judge model graded 546 baseline traces and 200 Veris sims from four customer scenario sets with byte-identical prompts and the same aggregation; the only variable is whose user it is judging.

Veris actors lead on all five checks and all three dimensions.The table shows the two dimensions where the instrument is most stable; the communication-style dimension, under active refinement on our side, leads the baseline by +19.2 pp as well.

Simulated-user naturalness · share of judged verdicts that look human
DimensionVeris actorsτ²-bench retailΔ
Information pattern · reveals details as asked, no goal-dump openers91.5%70.9%+20.6 pp
Clarification · hedges and pushes back the way a person does84.7%80.2%+4.5 pp
Pooled across both dimensions87.1%77.2%+9.9 pp

Rubric: five binary LLM-judge checks (v3), verdicts pass / fail / not-applicable, NAs skipped by the aggregation on both sides. Baseline: 546 fully-judged τ²-bench retail traces with a GPT-4-generation model playing the simulated user. Veris: 200 production sims, 50 per scenario set, personas from hand-curated specs. Pooled dimension rates are pass ÷ judged verdicts: 480/551 (Veris) vs 1262/1635 (baseline) across the two dimensions shown.

8

What this study cannot tell you

  • The instrument probes a focused slice intensely rather than sweeping the twin’s whole declared surface; what it measures, it measures independently, but it does not measure everything.
  • Twin behavior under injected latency and faults is not covered by this study.
  • The real-arm answers were recorded once, on 2026-08-18, and serve as the fixed answer key; the twin roster was re-measured in one sweep on a single twin release, with two services re-measured minutes later after our own test data was corrected. The two arms were not measured on the same day, and mismatches caused by the key aging are attributed as such rather than counted against the twin.
  • Salesforce was measured but its score is withheld this revision: the connector is migrating to API v67 and its real-side answers are being re-recorded. It re-enters the count next revision.
  • All measurements ran through an off-the-shelf integration gateway; behavior behind a gateway with mutual TLS or DLP inspection is not evidenced here.
  • Results are stamped per build; numbers from unstamped or mixed builds are not comparable.
9

Reproduce this

Every number on this page is reproducible from retained artifacts: a frozen claim manifest, a per-operation ledger, captured request and response corpora from both arms, per-operation diffs, per-test logs, latency tapes, the analyzers, and an identity trail binding each result to the software build that produced it. Each figure carries the command that produced it alongside the raw output. This is the artifact set to demand from any benchmarking vendor, including us.

Pinned build
The environment is rebuilt from a pinned software build immediately before each measurement, and every result is stamped with that build. Comparisons are only ever made between stamped worlds.
Fixed oracle
The instrument and its real-arm recording are pinned; between revisions only the twin build moves, so every delta on this page belongs to the twin and nothing else.
Sealed credentials
Credentials on the twin arm are minted by the environment’s own identity twin, so no real traffic can leak into a simulated measurement.
Fresh world
Each measurement starts from a clean world with no memory, which is why determinism holds.
List of effective revisions
RevDateChange
1.0August 2026First public version: 372 templates, 8 services, two-arm protocol
1.1August 2026Re-scored on a new twin build against the same recording: QuickBooks added (64 units), 436 templates across 9 services. The Asana status rule and the structural exception both closed; five open units remain, each named. Raw 97.2%, behaviour 98.9%.
2.0August 2026Nango Bench v3: instrument extended to 757 operations across 16 services — Acuity Scheduling, Figma, HubSpot, Linear, Notion, and Outlook added. Salesforce withheld while its connector migrates to API v67, leaving 721 scored operations across 15 services. Scoring reframed to exact match (same outcome, same error code) with every mismatch attributed to its cause: 703/721 · 97.5% exact, 98.1% on outcome alone, four mismatches twin-attributable (0.6%). Airtable sandbox leak closed and re-measured; Linear error shapes corrected (33 → 54 matches).

The benchmark re-runs on the same protocol as twins and instrument grow; new versions append here, and the tables above always show the current revision’s results. Questions, or a system you want to see measured: hello@veris.ai