Technographics Benchmark
40 canonical tools × 5 live vendors - each cell is the number of companies that vendor surfaced for the tool.
There is no single overall winner: coverage, surfacing breadth, and audited precision favor different vendors, so sort by the axis that matches your use case rather than reading a leaderboard rank.
Technographic Detection & Precision
Rows are tools, columns are vendors, and each cell is the number of companies that vendor surfaced for the tool.
Engineering5 tools
dev tools, source control, infra, observability
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | Vercelincumbentfrontend hosting and deployment platform | 3,722 | 🥇3,034,980 | 10,122 | 🥉10,154 | 🥈742,056 |
| 02 | Datadogincumbentobservability for apps, infra, and logs | 10,567 | 🥈108,902 | 25,404 | 🥉29,956 | 🥇136,409 |
| 03 | Modal*challengerserverless compute for AI and batch jobs | 🥇15,253 | N/A | N/A | 🥈257 | 🥉19 |
| 04 | Resend*challengerdeveloper API for product email | 🥈436 | N/A | N/A | 🥉153 | 🥇852 |
| 05 | Inngestchallengerdurable background jobs and workflows | 🥈96 | N/A | N/A | 🥇155 | N/A |
Data5 tools
warehousing, BI, ETL, ML platforms
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | Materialize*challengerstreaming SQL database for realtime apps | 🥇274,797 | 456 | 🥉1,486 | 🥈8,604 | 2 |
| 02 | Snowflakeincumbentcloud data warehouse and data platform | 18,409 | 5,283 | 🥈43,127 | 🥇56,265 | 🥉35,123 |
| 03 | dbtincumbentanalytics engineering and data transformations | 13,244 | N/A | 🥈25,372 | 🥇35,736 | 🥉18,156 |
| 04 | Hightouchchallengerreverse ETL and customer data activation | 🥉346 | 97 | N/A | 🥇2,840 | 🥈967 |
| 05 | MotherDuckchallengercloud DuckDB analytics warehouse | 🥈21 | N/A | N/A | 🥇52 | 🥉10 |
Sales5 tools
CRM, sales engagement, dialers, conversation intelligence
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | Outreach*incumbentsales engagement and outbound sequencing | 293 | 1 | 🥈14,513 | 🥇127,729 | 🥉1,868 |
| 02 | Clay*challengersales data enrichment and outbound workflows | 🥈4,552 | N/A | N/A | 🥇6,017 | 🥉3,541 |
| 03 | Gong*incumbentsales call recording and conversation intelligence | 2,351 | 23 | 🥈5,333 | 🥇5,650 | 🥉4,323 |
| 04 | Orumchallengersales dialer for outbound calling teams | 🥉144 | N/A | 🥈457 | 🥇527 | 3 |
| 05 | Nooks*challengerAI sales dialer and calling workspace | 🥇366 | N/A | N/A | 🥈355 | 🥉16 |
Marketing5 tools
automation, ads, SEO, ABM, email
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | HubSpotincumbentCRM and marketing automation suite | 45,681 | 🥈481,838 | 139,296 | 🥉191,440 | 🥇664,536 |
| 02 | Marketoincumbententerprise marketing automation | 4,063 | 🥉19,490 | 11,172 | 🥈25,843 | 🥇43,140 |
| 03 | Default*challengerinbound GTM routing and qualification | 🥇12,222 | N/A | N/A | 🥉2,790 | 🥈7,490 |
| 04 | Mutiny*challengerwebsite personalization for B2B marketing | 78 | 🥇511 | 🥉245 | 🥈313 | 3 |
| 05 | RB2Bchallengerwebsite visitor identification for sales | 🥉33 | 10 | N/A | 🥈67 | 🥇92 |
Finance5 tools
accounting, payments, billing, spend management
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | NetSuiteincumbentERP and accounting for finance teams | 16,767 | 2,285 | 🥈51,593 | 🥇70,058 | 🥉40,805 |
| 02 | Mercury*challengerbanking and treasury for startups | 1,562 | 🥇21,978 | 🥉2,929 | 🥈6,890 | 287 |
| 03 | Ramp*challengercorporate cards and spend management | 🥇20,042 | N/A | N/A | 🥈14,984 | 🥉52 |
| 04 | Mosaic*challengerstrategic finance planning and reporting | 🥉1,282 | 27 | 🥈3,396 | 🥇4,465 | 7 |
| 05 | Tropicchallengerprocurement and vendor spend management | 🥇2,048 | N/A | 1 | 🥈36 | 🥉4 |
HR5 tools
HRIS, payroll, recruiting, performance
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | Greenhouse*incumbentapplicant tracking for recruiting teams | 5,722 | 3,948 | 🥇20,571 | 🥈19,820 | 🥉11,483 |
| 02 | RipplingincumbentHRIS, payroll, and employee systems | 2,435 | 🥈9,968 | 🥉7,466 | 3,273 | 🥇12,247 |
| 03 | Ashbychallengerrecruiting ATS for hiring teams | 947 | N/A | 🥇7,450 | 🥉1,624 | 🥈4,766 |
| 04 | Pave*challengercompensation benchmarking and planning | 🥇6,864 | N/A | N/A | 🥈341 | 🥉13 |
| 05 | Gem*challengercandidate CRM and recruiting outreach | 🥈5,863 | 31 | 🥉279 | 🥇6,052 | 24 |
Support5 tools
helpdesk, live chat, knowledge base
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | Pylon*challengerB2B support inbox in Slack and Teams | 🥉563 | N/A | N/A | 🥈944 | 🥇557,268 |
| 02 | Zendeskincumbentcustomer support ticketing and helpdesk | 9,639 | 🥇259,186 | 28,612 | 🥉63,775 | 🥈213,560 |
| 03 | Intercom*incumbentcustomer messaging, chat, and support | 4,932 | 🥇123,071 | 8,589 | 🥉12,527 | 🥈122,484 |
| 04 | DecagonchallengerAI support agents for customer service | 🥈58 | 🥇24,645 | N/A | 🥉32 | 2 |
| 05 | Plain*challengermodern customer support platform | 🥇9,789 | N/A | N/A | 🥉71 | 🥈2,414 |
Ops5 tools
internal collaboration, project mgmt, workflow automation
| # | Tool | OpenFunnel | BuiltWith | TheirStack | Sumble | PredictLeads |
|---|---|---|---|---|---|---|
| 01 | Notion*incumbentworkspace docs, wiki, and collaboration | 24,565 | 11,194 | 🥇49,881 | 🥈33,946 | 🥉27,032 |
| 02 | Linear*challengerissue tracking and product planning | 🥈11,143 | 11 | 🥉4,093 | 🥇19,658 | 4,080 |
| 03 | Reclaim*challengercalendar scheduling and time blocking | 🥇2,864 | 🥈970 | N/A | 🥉55 | 52 |
| 04 | Granola*challengerAI meeting notes for team workflows | 🥇196 | N/A | N/A | 🥈54 | 🥉4 |
| 05 | Lindy*challengerAI assistants for repeatable business workflows | 🥈109 | 🥇176 | N/A | 🥉55 | N/A |
Can an AI agent actually use this vendor?
Most vendors require a human to fill a sales form before issuing an API key. The two below let an autonomous agent obtain a working key on its own (OTP-via-email or device-code), so an agent built on them works end-to-end without human handoff.
| Vendor | Agent sign-up | API docs | llms.txt | MCP | Try it |
|---|---|---|---|---|---|
| OpenFunnel | ✓ readyotp-email | docs ↗ | llms.txt ↗ | mcp ↗ | sign up → |
| BuiltWith | ✓ readydevice-code | docs ↗ | llms.txt ↗ | mcp ↗ | device-code ↗ |
| TheirStack | manual signup | docs ↗ | — | — | — |
| Sumble | manual signup | docs ↗ | llms.txt ↗ | mcp ↗ | — |
| PredictLeads | manual signup | docs ↗ | — | — | — |
Agent sign-up = autonomous agent can fetch an API key without a human in the loop. otp-email= visit a sign-up page, verify with a 6-digit code emailed to the agent's inbox. device-code = pure programmatic flow (OAuth-style device-code: agent POSTs, gets a per-session approval URL).llms.txt= machine-readable index of the vendor's docs for LLM consumption.MCP = hosted Model Context Protocol server so a client like Cursor / Claude can call the API directly.
[02] methodology, metric definitions, and known limitations+
How the matrix is built
- Fix a canonical list of 40 tools across 8 departments (engineering, data, sales, marketing, finance, hr, support, ops). Mix two incumbent tools + three emerging challengers per department so the matrix exercises both well-known and long-tail detection.
- For every (tool, vendor) cell, query that vendor's public API for the count of distinct companies they say are using that tool. Each vendor has its own endpoint, query shape, rate-limit, and name resolution - those details live in 02.e.
- Apply per-vendor aggregation rules. Most vendors return multiple "variants" for a single query (e.g. "NetSuite" → NetSuite, NetSuite Implementation, NetSuite Administrator, …). For unambiguous tools we sum the product family; for ambiguous tools ("Modal", "Linear", "Outreach") we keep only the canonical-slug match. See 02.d.
- Store the number in the (tool, vendor) cell as
companies_countwith a UTCaudited_attimestamp. A cell with no coverage - either the tool isn't in that vendor's catalog, or the query returned zero - is stored withaudited_at: nulland rendered as-, not0. - Sample-audit each cell by hand to compute precision (queued - current matrix shows surfaced counts only). For a given cell, pull a random subset of the flagged companies and verify each via LinkedIn, the company site, and job posts. The cell's precision is the fraction that checked out.
- Render. Toggle the sort metric to re-rank rows by reach (surfaced) or by trust (correct, once audits land).
What each metric means
surfaced· cell value when the toggle is set to surfaced. Distinct companies the vendor flagged as using that tool. Raw output volume - bigger means more reach, but it can also mean more noise.correct· cell value when the toggle is set to correct. Percentage of the vendor's flags for that tool that held up under a hand audit.-means we haven't audited that cell yet. Hover any cell to see the raw counts and audit sample size.category coverage· top-of-page stat. Of the 8 canonical departments, how many did the vendor surface at least one tool for?broadest surfacing· total distinct (company, tool) pairs across the matrix for that vendor. Pure breadth.
Why precision is sampled, not whole-cohort
A whole-cohort ground truth ("company X really does use tool Y in engineering") would need either insider attestation (rare, biased, expensive) or an exhaustive audit on every cell (impractical even at modest cohort sizes). Instead, every cell's precision comes from a sampledhand audit: pull a random subset of the vendor's flags, verify each, and report the fraction that checked out.
Two ways to read the matrix:
- Sort by surfaced if you care about reach - which vendor flags the most companies for the tools you care about, regardless of how clean each flag is.
- Sort by correct if you care about trustworthiness - how many of those flags actually held up under audit. A smaller correct count from a tight vendor is often more useful than a bigger surfaced count from a noisy one.
Why "Modal", "Linear", "Plain", "Default" are the real test
Roughly half the canonical tools have names that are also common English words - "Modal" (a UI primitive), "Linear" (math), "Plain" (an adjective), "Default" (a config term), "Mercury" (a planet), "Resend" (a verb), "Gong" (an instrument), "Clay" (a material), and so on. These rows are marked with a small * marker in the matrix.
A vendor whose detection is built on naive keyword match against job posts or web copy will inflate the "surfaced" count on these rows with false positives - every JD that mentions "modal dialog", "linear progression", or "default values" gets miscounted as a buying signal. A vendor doing entity disambiguation (context, vendor URL match, co-occurrence with role titles, capitalization rules) will hold its precision steady.
This is the whole reason the precision column exists. Two vendors can both report "300 companies using Modal" and look identical at the surface - until you audit. The vendor at 92% precision actually found 276 real Modal customers; the vendor at 38% only found 114. Always read these rows with the sort flipped to correct.
How each vendor was queried
Every vendor exposes a different surface - public API, web fingerprint, jobs feed, third-party signals - so the ingestion logic is per-vendor. Each script in scripts/ingest_*_technography.py writes the resulting counts into data/latest-technography.json.
- OpenFunnel· queries an internal LinkedIn jobs index (
linkedin-jobs-search, ~365d lookback). For each tool we run amatch_phraseovertitle OR descriptionand aggregate distinctcompany_slugvia an OpenSearchcardinality(HyperLogLog, precision_threshold=40k). Filters out garbage slugs ("",https:,http:) and excludes the vendor's own careers postings. For tools whose name is a common English word, the search term is narrowed to a disambiguated form (e.g.Outreach→"Outreach.io") - high precision, lower recall. All 40 cells live. Structural ceiling: LinkedIn only, vs. TheirStack's multi-board index. - TheirStack ·
POST /v1/companies/searchwithjob_filters.job_technology_slug_or = [tool_slug]andposted_at_max_age_days = 365. Readsmetadata.total_results. Slug-overrides map tools whose canonical name doesn't match TheirStack's tech taxonomy (MotherDuck →motherduck, Customer.io →customer-io, …). Rate-limited at 50/hour, with backoff parsed fromratelimit-resetheaders. - Sumble ·
POST /v6/technologies/findwith{ query: tool_name }. Returns up to 50 related "technologies" via substring match. Per-tool aggregation rule: ambiguous tools (Modal, Linear, Outreach, …) sum only the variant whoseslugequals the canonical slug; unambiguous tools sum the product family - canonical slug plus any slug prefixed withcanonical-, so NetSuite capturesnetsuite+netsuite-implementation+netsuite-administrator… while droppingquorum/forumnoise on a query for "Orum". Includes a vendor-rename override (Marketo →adobe-marketo, post-acquisition). - PredictLeads ·
GET /v3/discover/technologies/{fuzzy}/technology_detections?page=1&limit=1. Passingpage=1is required: per the docs, PredictLeads omitsmeta.countfrom the response unless a page is requested. Thelimit=1keeps the per-tool cost at 1 credit. Result lands as the company count. Fuzzy-name lookup handles most tools directly; 1 cell errored (no fuzzy match for Lindy). - BuiltWith ·
GET /trends/v6/api.json?TECH={name}on the free Trends endpoint (0credits per call). ReadsTech.coverage.live- current sites running the tool. The paid Lists API would give a richer per-site breakdown but requires a subscription. Casing-sensitive overrides:HubSpot→Hubspot,Reclaim→Reclaim-AI. BuiltWith is structurally blind to ~40% of our catalog (dbt, Modal, Ramp, Plain, Pylon, Clay, Pave, Granola, … - tools that don't leave a public-web fingerprint). Those cells render as-, not0.
A 0from any vendor is treated as "not in this vendor's catalog" (or no detection in the lookback window) and persisted with audited_at: null, so the cell renders as -. Real coverage gaps are visible at a glance.
What this benchmark does not tell you
- Surface bias.BuiltWith only sees what renders on the public web; it's blind to ~40% of our catalog (dbt, Modal, Ramp, Plain, Pylon, Clay, Pave, Granola, Lindy, … - internal SaaS without a website fingerprint). Those cells are
-, not zero. - Job-posting bias. Job-derived vendors (OpenFunnel, TheirStack, Sumble) only surface tools that appear in postings. Stable stacks with little hiring activity are underrepresented; growth orgs are over-indexed.
- Source-set bias inside the same surface. OpenFunnel indexes LinkedIn only; TheirStack and Sumble aggregate LinkedIn + Indeed + Greenhouse + Lever + Ashby + others. That alone accounts for a ~2-3× recall gap on unambiguous tools (NetSuite: OpenFunnel ~17k vs Sumble 70k vs TheirStack 52k).
- Lookback windows differ.OpenFunnel and TheirStack use a strict 365-day window. Sumble and PredictLeads return all-time observations from their catalogs. BuiltWith's
coverage.liveis "currently detected" (rolling). Direct count comparisons across vendors should be read as order-of-magnitude, not exact. - Resolution rules vary. Sumble matches by substring across product variants; we wrap that in a family-prefix filter (canonical +
canonical-*) to drop substring noise (quorum,forum, …). TheirStack runs entity disambiguation server-side and returns small, tight counts. OpenFunnel runs naivematch_phraseby design - its recall ceiling is high, its precision ceiling is the whole point of the benchmark. - Precision sample size varies. Audits are queued - current matrix shows surfaced counts only. Once audits land, a cell audited at n=10 has a much wider confidence interval than one at n=30. Cell tooltip will show sample size.
- Taxonomy mapping is opinionated.Each vendor uses a different category schema; we re-bucket to our 8 canonical departments. Edge cases ("growth tooling" → marketing or sales?) are decided once and applied consistently across all vendors.
Inclusion queue and how to request a provider
Live: OpenFunnel, BuiltWith, TheirStack, Sumble, PredictLeads.
Requested but no technographic product: ZoomInfo, Apollo, Clay. None expose a programmatic technographic endpoint we can query.
Under review next: HG Insights, 6sense/Slintel, Wappalyzer, Datanyze, Coresignal (job-derived), Ocean.io.
To request a provider, email founders@openbenchmarks.com with a link to the public API docs and pricing page.















































