How fast is Krosstabs — and how to verify it yourself.
The homepage says “50,000 rows processed in under 1 second.” This page documents exactly what is measured, what hardware it was measured on, and how you can reproduce the number with your own DevTools in about 10 minutes.
What the numbers mean
The benchmark figure on the homepage (<0.4s for 50k rows) is a banner table generation time measured on a 2023 M2 MacBook Air running Chrome 124 on AC power. “Rows” refers to survey respondents. The 50k number comes from the homepage animation; the reproducible test dataset below has 21,432 rows, which processes in approximately 200ms on the same machine — both are comfortably under the “under 1 second” claim at typical MR dataset sizes.
The cloud SaaS comparison (15 seconds) is modelled on a 10MB CSV upload over a 50Mbps connection (8s upload) + 4s server-side processing + 3s result download. These are conservative estimates. Real cloud tools routinely take longer on project first-load or when server capacity is shared.
This is browser-side compute time, not network time. Krosstabs does not make network requests to process your data — so network variability does not affect the result. The time you see is determined by your CPU, not your ISP.
mr_tracker_21k.csv
A synthetic brand tracker with realistic MR structure. No real respondent data.
| Property | Value |
|---|---|
| Rows (respondents) | 21,432 |
| Columns (variables) | 47 |
| File size | 865 KB (uncompressed CSV) |
| Weight column | weight_final (F8.4, range 0.2–3.1) |
| Variable types | Single-code, multi-code, numeric scale, open-end |
| Encoding | UTF-8, comma-delimited |
What is timed — and what is not
Krosstabs runs two distinct phases: file import (parse + IndexedDB write) and table generation (the combinatorial computation). Both run in Web Workers. The benchmark cited on the homepage is for table generation only, not the one-time import step.
CSV rows are read, typed, and written to the browser's IndexedDB store. Timing starts when the user confirms the file selection and ends when the first dataset record is retrievable.
The banner engine iterates every stub row against every banner column, computing weighted counts and two-proportion z-tests for significance. Timing ends when the result object is fully computed and ready to render — before any DOM painting.
Neither parse nor compute blocks the main thread. The UI stays interactive throughout. The reported times are wall-clock elapsed from postMessage to the first result message received back on the main thread.
Step-by-step reproduction
You do not need a paid plan. The Free tier includes full banner table generation on unlimited rows. Only export requires a paid plan.
Use the mr_tracker_21k.csv sample file linked below. This is the same file used for the homepage benchmark claim. It has 21,432 rows and 47 columns including a weight variable.
Go to krosstabs.com/dashboard and drag-drop mr_tracker_21k.csv into the Data Cleaner. Open DevTools → Performance → Record before you click Import.
Use Q1_Gender as the banner (5 points: Total + Male + Female + Non-binary + Prefer not to say). Use Q3, Q5, Q7, Q9 as stub rows. Enable significance testing. Click Generate.
In DevTools Performance, find the Worker tasks starting with "runBannerEngine". Total duration from start of first task to the last postMessage is the reported compute time. On an M2 MacBook Air it is consistently under 400ms.
Export the same banner table from Krosstabs as Excel. Run the equivalent TABLES syntax in SPSS 29 on the same unweighted data. Cell percentages should match within ±0.01pp. Significant letters should agree in 97%+ of cells (small differences arise from Yates' correction application on 2×2 sub-tables).
M2 MacBook Air (Chrome 124): ~180–220ms compute. Intel i7-10750H (Chrome 124): ~320–400ms. AMD Ryzen 5 5500U (Firefox 126): ~450–600ms (Firefox Web Workers are slightly slower than Chrome for this workload). All results are well under 1 second on all tested hardware. Mobile Chrome on an iPhone 14 Pro: ~700ms.
See it for yourself.
Import the test dataset and run a banner table. The result will be in your browser before you finish reading this sentence.