Research · measured 27 October 2026

Call tracking script size 2026: what seven number-swapping scripts weigh

Every call tracking tool that swaps phone numbers on a website does it with a JavaScript file. We downloaded that file for seven vendors on 27 October 2026 and measured what a browser receives. One of the seven is CallTracker, our own product, and it is not the smallest.

Key findings

  1. 1. Main scripts range from 2.6 KB to 58.4 KB on the wire

    Mediahawk sends the smallest main script and Ruler Analytics the largest. The median of the 7 is 14.8 KB.

  2. 2. CallTracker's snippet is the second smallest at 3.2 KB

    It decodes to 10.5 KB and is served with Brotli compression. Mediahawk's main script is smaller.

  3. 3. 1 of 7 scripts is sent without compression

    Ruler Analytics sent 58.4 KB uncompressed to a browser that accepts gzip and Brotli.

  4. 4. 2 of 7 scripts tell the browser not to reuse a cached copy without checking

    CallTrackingMetrics (no-cache, no-store, must-revalidate) and WhatConverts (max-age=0) — so returning visitors download the script again, or check with the server, on each page.

  5. 5. What vendors load on their own homepage varies more than the main script

    On its own homepage CallRail made 14 requests to its script hosts (45.5 KB), including any extra features it has switched on for its own site; Mediahawk made 2 (3.0 KB). Your total depends on which features you enable.

The data

Main number-swapping script per vendor, smallest first
VendorOn the wireDecodedCompressionCache-ControlOn vendor's homepage
Mediahawk2.6 KB6.4 KBgzippublic, max-age=72002 requests, 3.0 KB
CallTrackerOur product3.2 KB10.5 KBbrpublic, max-age=3600Not measured
WhatConverts11.5 KB78.9 KBgzipmax-age=03 requests, 12.4 KB
CallRail14.8 KB53.6 KBgzipmax-age=3600, public14 requests, 45.5 KB
Nimbata15.4 KB52.7 KBgzipmax-age=315360004 requests, 15.8 KB
CallTrackingMetrics18.2 KB56.5 KBgzipno-cache, no-store, must-revalidate4 requests, 19.7 KB
Ruler Analytics58.4 KB58.4 KBnonepublic, max-age=36004 requests, 60.3 KB

Download the data as CSV · Raw results (JSON) · Measurement script (Python) (CC BY 4.0, cite "CallTracker, Call tracking script size 2026").

1 KB = 1,000 bytes.

Method

  • Date: 27 October 2026.
  • Finding the script: we opened each vendor's homepage in headless Chromium with a fresh profile, made no consent choice, and took the vendor's own number-swapping script from the requests the page made. The script URL for each vendor is in the CSV.
  • Script size: we downloaded each script with curl, offering gzip and Brotli like a browser does (Accept-Encoding: br, gzip). "On the wire" is the bytes received; "decoded" is the size after decompression. We also recorded the Content-Encoding and Cache-Control headers.
  • Homepage requests: we loaded each vendor's homepage three times, waited for the load event plus 10 seconds, and counted the requests to that vendor's script hosts and their transferred bytes. The table shows the median of the three loads.
  • We ran the whole measurement twice on the same day. Script sizes differed by at most 4 bytes between the runs, and homepage totals by less than 0.1%.
  • CallTracker's snippet was downloaded from its production URL for a test placement. calltracker.dev does not run the snippet on its own pages, so there is no homepage measurement; from its code, the snippet makes one number-assignment request when a visitor session starts and one small keep-alive request every five minutes.
  • To repeat the test: python measure.py "" <placement-id>. The first argument is an optional Chromium path. The CallTracker row needs the ID of an active CallTracker placement; it is in the snippet URL on any site that runs CallTracker. We re-ran the script on 28 October 2026 and got the same script sizes to within 1 byte.
  • On 28 October 2026 we changed CallTracker's snippet: it now matches short source names such as "fb" and "ig" as whole words, and sends Google Analytics IDs correctly. That made it about 0.4 KB larger before compression and about 0.2 KB larger compressed. The table shows the version we measured on 27 October.

Not measured

  • Infinity (incl. ResponseTap): No Infinity tracking script loaded on infinity.co without a consent choice, so there was nothing to measure.
  • Invoca: No Invoca number-swapping script loaded on invoca.com without a consent choice.

Limitations

  • Script size is one part of page speed. We did not measure execution time, when the number is swapped, or the effect on Core Web Vitals.
  • Each vendor's homepage uses that vendor's own configuration. Scripts can be generated per account, so a customer's script may be larger or smaller.
  • Ruler Analytics and WhatConverts sell attribution beyond calls; their scripts also do other work, such as form tracking.
  • Seven vendors are not the whole market, and two well-known vendors could not be measured without a consent choice.
  • CallTracker is our product. We measured it by the same rules as the others and publish the script so anyone can repeat the test.

Questions

Does a call tracking script slow down my website?
It adds at least one more script download. In this test the main number-swapping scripts ranged from 2.6 KB to 58.4 KB on the wire. Whether that matters depends on the rest of your page; we did not measure execution time.
Why does CallTracker's script need a second request?
After it loads, the snippet asks CallTracker for a tracking number when a visitor session starts, and sends a small keep-alive request every five minutes while the page stays open so the number stays assigned to that visitor.
Can I check a vendor's script myself?
Yes. Open your site with the browser's developer tools, filter the Network tab by the vendor's script host and read the transferred and resource sizes. The script we used is linked on this page.

Author: CallTracker, Getia AS (Oslo, Norway). Corrections: [email protected]. Related: how dynamic number insertion works, call tracking pricing 2026, alternatives by need.

Track website calls with a small snippet

€9 per month base plus usage. No contract.