Page Size Profiler avatar

Page Size Profiler

Pricing

$2.99/month + usage

Go to Apify Store
Page Size Profiler

Page Size Profiler

Page size profiler that measures web page weight broken down by HTML, CSS, JavaScript, and images, so SEO teams can pinpoint what makes pages slow and decide what to cut.

Pricing

$2.99/month + usage

Rating

0.0

(0)

Developer

ZeroBreak

ZeroBreak

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

Page Size Profiler: Measure Web Page Weight by Resource Type

Page Size Profiler fetches any public web page and tells you exactly how much it weighs. You get the HTML size, plus a breakdown of every CSS file, JavaScript bundle, image, and font the page loads. Useful when you already suspect a page is too heavy and want numbers before deciding what to cut.

SEO performance and page load time are directly tied to page weight. This actor gives you the raw data to make that case without guessing.

Use cases

  • SEO auditing: find pages dragging down your Core Web Vitals scores by identifying which ones load the most CSS, JS, or image weight
  • Performance budgeting: measure page size before and after optimizations to confirm the change actually helped
  • Content audits: run a list of landing pages through the profiler and sort by total weight to find the worst offenders fast
  • Agency reporting: pull page size data for client reports without manually checking each URL in a browser
  • QA before launch: verify that a newly built page doesn't ship with uncompressed images or an oversized JS bundle

What data does this actor extract?

Each result contains the HTML size, total page weight, per-type size totals, resource counts, server response time, and the final URL after redirects.

{
"url": "https://apify.com",
"finalUrl": "https://apify.com/",
"statusCode": 200,
"pageTitle": "Apify: Full-Stack Web Scraping and Data Extraction Platform",
"htmlSizeBytes": 142318,
"htmlSizeKb": 138.98,
"cssSizeBytes": 89423,
"jsSizeBytes": 1247891,
"imageSizeBytes": 384210,
"fontSizeBytes": 62144,
"otherSizeBytes": 0,
"totalSizeBytes": 1925986,
"totalSizeKb": 1880.85,
"resourceCount": 34,
"cssCount": 3,
"jsCount": 18,
"imageCount": 12,
"fontCount": 1,
"otherCount": 0,
"loadTimeMs": 412,
"scrapedAt": "2026-03-08T10:00:00.000000+00:00",
"error": null
}

Input

ParameterTypeDefaultDescription
urlstringSingle URL to profile.
urlsarrayList of URLs to profile, one per line.
fetchResourcesbooleantrueFetch all linked CSS, JS, image, and font files to measure their sizes. Disable for HTML-only measurements.
maxUrlsinteger100Maximum number of URLs to process per run.
timeoutSecsinteger300Overall actor run timeout in seconds.
requestTimeoutSecsinteger30Timeout per individual HTTP request in seconds.
proxyConfigurationobjectDatacenter (Anywhere)Proxy type and location for requests. Supports Datacenter, Residential, Special, and custom proxies. Optional.

Example input

{
"urls": [
"https://apify.com",
"https://docs.apify.com"
],
"fetchResources": true,
"maxUrls": 100,
"requestTimeoutSecs": 30,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

The actor stores one result per URL in the default dataset. Each entry contains:

FieldTypeDescription
urlstringThe input URL.
finalUrlstringThe URL after following redirects.
statusCodeintegerHTTP status code from the server.
pageTitlestringText from the page's <title> element.
htmlSizeBytesintegerRaw HTML response size in bytes.
htmlSizeKbnumberRaw HTML response size in kilobytes.
cssSizeBytesintegerCombined size of all linked CSS files in bytes.
jsSizeBytesintegerCombined size of all linked JavaScript files in bytes.
imageSizeBytesintegerCombined size of all linked images in bytes.
fontSizeBytesintegerCombined size of all linked font files in bytes.
otherSizeBytesintegerCombined size of all other linked resources in bytes.
totalSizeBytesintegerHTML plus all linked resources in bytes.
totalSizeKbnumberHTML plus all linked resources in kilobytes.
resourceCountintegerTotal number of linked resources found.
cssCountintegerNumber of CSS stylesheets linked.
jsCountintegerNumber of JavaScript files linked.
imageCountintegerNumber of images linked.
fontCountintegerNumber of font files linked.
otherCountintegerNumber of other resource types linked.
loadTimeMsintegerTime to fetch the main HTML page in milliseconds.
scrapedAtstringISO 8601 timestamp of when the page was profiled.
errorstringError message if the page failed. Null on success.

How it works

  1. Accepts a single URL or a list of URLs via input.
  2. Fetches each page with a realistic browser User-Agent, following redirects.
  3. Measures the HTML response body size in bytes.
  4. Parses the HTML to find all linked CSS, JavaScript, image, and font resources.
  5. If fetchResources is enabled, fetches each resource (HEAD first, then GET if needed) and records its size.
  6. Sums everything up and pushes one result row per URL to the dataset.

Integrations

Connect Page Size Profiler with other tools using Apify integrations. Export results directly to Google Sheets, trigger Slack alerts when a page exceeds a size threshold, or pipe data into Zapier and Make automations. You can also use webhooks to kick off a downstream action the moment results are ready.

FAQ

Does this actor handle pages that redirect? Yes. The actor follows all HTTP redirects and records the final URL in the finalUrl field alongside the original input URL.

What if I only want the HTML size and not the full resource breakdown? Set fetchResources to false. The actor will still fetch and parse the page but skip the individual resource requests. Runs are much faster this way.

Can it profile pages that require a login? No. The actor works with publicly accessible pages only. It does not support cookies, sessions, or authentication headers.

How many URLs can it process per run? Up to 1000, controlled by the maxUrls input. The default is 100. For very large lists, consider splitting into multiple runs.

Why are some resource sizes zero even with fetchResources enabled? Some resources return 0 if the server rejects HEAD and GET requests for that file, or if the resource URL is behind authentication. The HTML size is always accurate.

Does it work on JavaScript-rendered pages? The actor uses plain HTTP requests, not a browser. It measures the raw HTML the server returns, which may not include dynamically injected resources. For full SPA profiling, a browser-based approach is needed.