{
  "source": "measured",
  "generatedAt": "2026-10-12T19:45:02.413Z",
  "date": "2026-10-12",
  "browser": "Chromium 148.0.7778.96 (Playwright, headless)",
  "method": "online pass: bytes the browser sent to each host (counted at a local CONNECT proxy, TLS included) from attaching the files until the result; \"fileLeftDevice\" = one host received ≥ 50% of the combined input size. offline pass: context.setOffline(true) after page load, then the same merge.",
  "inputs": {
    "files": [
      "test-a-3-pages-text.pdf",
      "test-b-2-pages-image.pdf"
    ],
    "bytes": {
      "a": 10065,
      "b": 599458,
      "jpeg": 598099,
      "total": 609523
    }
  },
  "results": [
    {
      "vendor": "MostlyPDF",
      "id": "mostlypdf",
      "url": "https://mostlypdf.com/#/merge-pdf",
      "measured": true,
      "fileLeftDevice": false,
      "uploadHost": null,
      "uploadBytes": 513,
      "worksOfflineAfterLoad": false,
      "online": {
        "completed": true,
        "result": {
          "kind": "download",
          "name": "a54564d0-0833-412b-bbd4-3df96e358775.pdf"
        },
        "error": null,
        "requestsWithBody": 1,
        "bytesSentByHost": {
          "mostlypdf.com": 513,
          "cdn.usefathom.com": 181
        },
        "largestRequests": [
          {
            "host": "mostlypdf.com",
            "method": "POST",
            "bytes": 40,
            "url": "https://mostlypdf.com/__usage"
          }
        ]
      },
      "offline": {
        "completed": false,
        "result": null,
        "error": "page.waitForEvent: Timeout 90000ms exceeded while waiting for event \"download\"",
        "offlineFrom": "after page load, before files were attached",
        "requestsWithBody": 0,
        "bytesSentByHost": {},
        "largestRequests": []
      },
      "note": null
    },
    {
      "vendor": "iLovePDF",
      "id": "ilovepdf",
      "url": "https://www.ilovepdf.com/merge_pdf",
      "measured": true,
      "fileLeftDevice": true,
      "uploadHost": "api38.ilovepdf.com",
      "uploadBytes": 617655,
      "worksOfflineAfterLoad": false,
      "online": {
        "completed": true,
        "result": {
          "kind": "result-page",
          "text": "Download merged PDF"
        },
        "error": null,
        "requestsWithBody": 1,
        "bytesSentByHost": {
          "www.ilovepdf.com": 6692,
          "api38.ilovepdf.com": 617655,
          "ep1.adtrafficquality.google": 4717,
          "region1.google-analytics.com": 3542,
          "evt.ilovepdf.com": 1107,
          "pagead2.googlesyndication.com": 4198,
          "9c29df539c7a8bdb5d8a25ec1355f7aa.safeframe.googlesyndication.com": 2642,
          "ep2.adtrafficquality.google": 108
        },
        "largestRequests": [
          {
            "host": "api38.ilovepdf.com",
            "method": "POST",
            "bytes": 1265,
            "url": "https://api38.ilovepdf.com/v1/process"
          }
        ]
      },
      "offline": {
        "completed": false,
        "result": null,
        "error": "locator.waitFor: Timeout 90000ms exceeded.",
        "offlineFrom": "after page load, before files were attached",
        "requestsWithBody": 1,
        "bytesSentByHost": {},
        "largestRequests": [
          {
            "host": "pagead2.googlesyndication.com",
            "method": "POST",
            "bytes": 310,
            "url": "https://pagead2.googlesyndication.com/pagead/ping"
          }
        ]
      },
      "note": null
    },
    {
      "vendor": "Sejda",
      "id": "sejda",
      "url": "https://www.sejda.com/merge-pdf",
      "measured": true,
      "fileLeftDevice": true,
      "uploadHost": "www.sejda.com",
      "uploadBytes": 614904,
      "worksOfflineAfterLoad": false,
      "online": {
        "completed": true,
        "result": {
          "kind": "download",
          "name": "test-a-3-pages-text_merged.pdf"
        },
        "error": null,
        "requestsWithBody": 3,
        "bytesSentByHost": {
          "www.sejda.com": 614904
        },
        "largestRequests": [
          {
            "host": "www.sejda.com",
            "method": "POST",
            "bytes": 548,
            "url": "https://www.sejda.com/api/tasks"
          },
          {
            "host": "www.sejda.com",
            "method": "POST",
            "bytes": 19,
            "url": "https://www.sejda.com/api/files/upload-check"
          },
          {
            "host": "www.sejda.com",
            "method": "POST",
            "bytes": 19,
            "url": "https://www.sejda.com/api/files/upload-check"
          }
        ]
      },
      "offline": {
        "completed": false,
        "result": null,
        "error": "locator.click: Timeout 30000ms exceeded.",
        "offlineFrom": "after page load, before files were attached",
        "requestsWithBody": 2,
        "bytesSentByHost": {},
        "largestRequests": [
          {
            "host": "www.sejda.com",
            "method": "POST",
            "bytes": 19,
            "url": "https://www.sejda.com/api/files/upload-check"
          },
          {
            "host": "www.sejda.com",
            "method": "POST",
            "bytes": 19,
            "url": "https://www.sejda.com/api/files/upload-check"
          }
        ]
      },
      "note": null
    },
    {
      "vendor": "Smallpdf",
      "id": "smallpdf",
      "url": "https://smallpdf.com/merge-pdf",
      "measured": true,
      "fileLeftDevice": true,
      "uploadHost": "files-upload.r2.smallpdf.com",
      "uploadBytes": 616185,
      "worksOfflineAfterLoad": false,
      "online": {
        "completed": true,
        "result": {
          "kind": "result-screen: Done + Download"
        },
        "error": null,
        "requestsWithBody": 25,
        "bytesSentByHost": {
          "googleads.g.doubleclick.net": 2112,
          "www.google.com": 5721,
          "s.smallpdf.com": 1671,
          "bat.bing.com": 1306,
          "n.clarity.ms": 3928,
          "pluto.smallpdf.com": 13979,
          "www.google.co.uk": 2507,
          "files-upload.r2.smallpdf.com": 616185,
          "task.smallpdf.com": 3664,
          "files.r2.smallpdf.com": 2377,
          "static.hotjar.com": 2350,
          "region1.analytics.google.com": 859
        },
        "largestRequests": [
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 647,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 647,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 640,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 614,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 606,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          }
        ]
      },
      "offline": {
        "completed": false,
        "result": null,
        "error": "page.waitForEvent: Timeout 90000ms exceeded while waiting for event \"download\"",
        "offlineFrom": "after page load, before files were attached",
        "requestsWithBody": 329,
        "bytesSentByHost": {},
        "largestRequests": [
          {
            "host": "e.clarity.ms",
            "method": "POST",
            "bytes": 808,
            "url": "https://e.clarity.ms/collect"
          },
          {
            "host": "e.clarity.ms",
            "method": "POST",
            "bytes": 808,
            "url": "https://e.clarity.ms/collect"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 545,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 545,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          },
          {
            "host": "pluto.smallpdf.com",
            "method": "POST",
            "bytes": 545,
            "url": "https://pluto.smallpdf.com/v2/pluto"
          }
        ]
      },
      "note": null
    },
    {
      "vendor": "PDF24 Tools",
      "id": "pdf24",
      "url": "https://tools.pdf24.org/en/merge-pdf",
      "note": "upload happens when the files are attached, before Merge is pressed; the result screen showed in screenshots but the harness did not register it, so measured=false",
      "measured": false,
      "fileLeftDevice": null,
      "uploadHost": "filetools2.pdf24.org",
      "uploadBytes": 624106,
      "worksOfflineAfterLoad": null,
      "online": {
        "completed": false,
        "result": null,
        "error": "page.waitForEvent: Timeout 90000ms exceeded while waiting for event \"download\"",
        "requestsWithBody": 4,
        "bytesSentByHost": {
          "analytics.pdf24.org": 2309,
          "tools.pdf24.org": 2001,
          "region1.analytics.google.com": 5768,
          "googleads.g.doubleclick.net": 7922,
          "filetools2.pdf24.org": 624106,
          "ep1.adtrafficquality.google": 4129,
          "ep2.adtrafficquality.google": 2981,
          "www.google.com": 2513,
          "pagead2.googlesyndication.com": 381
        },
        "largestRequests": [
          {
            "host": "filetools2.pdf24.org",
            "method": "POST",
            "bytes": 370,
            "url": "https://filetools2.pdf24.org/client.php"
          },
          {
            "host": "region1.analytics.google.com",
            "method": "POST",
            "bytes": 222,
            "url": "https://region1.analytics.google.com/g/collect"
          },
          {
            "host": "filetools2.pdf24.org",
            "method": "POST",
            "bytes": 40,
            "url": "https://filetools2.pdf24.org/client.php"
          },
          {
            "host": "filetools2.pdf24.org",
            "method": "POST",
            "bytes": 40,
            "url": "https://filetools2.pdf24.org/client.php"
          }
        ]
      },
      "offline": {
        "completed": false,
        "result": null,
        "error": "locator.click: Timeout 30000ms exceeded.",
        "offlineFrom": "after page load, before files were attached",
        "requestsWithBody": 2,
        "bytesSentByHost": {
          "pagead2.googlesyndication.com": 39,
          "www.googletagmanager.com": 39,
          "filetools35.pdf24.org": 4757
        },
        "largestRequests": [
          {
            "host": "region1.analytics.google.com",
            "method": "POST",
            "bytes": 222,
            "url": "https://region1.analytics.google.com/g/collect"
          },
          {
            "host": "region1.analytics.google.com",
            "method": "POST",
            "bytes": 221,
            "url": "https://region1.analytics.google.com/g/collect"
          }
        ]
      }
    }
  ]
}
