Skip to main content
Glama

catalyst-labs/website-screenshot-pdf-api

catalyst-labs--website-screenshot-pdf-api
Destructive

This tool calls the Actor "catalyst-labs/website-screenshot-pdf-api" and retrieves its output results. Actor description: Starts a screenshot/PDF capture of public URLs (cookie banners removed) and waits up to waitSecs (max 45s). Returns file links, or a runId to poll with get-actor-run, then get-dataset-items. Use those for runs already started. $0.01/run + $0.008/screenshot, $0.012/PDF; failures free.

Input Schema

NameRequiredDescriptionDefault
urlsYes**REQUIRED** Web pages to capture. Each URL gives one file per format. https:// is added if missing; duplicates are removed and invalid entries are reported for free. Example: ["https://apify.com", "example.com/pricing"] Memory: keep the default 4096 MB or more. Below 4 GB heavy pages load 2-3x slower and large batches can time out (a 28-URL test at 2 GB timed out at 900 s; at 4 GB it finished in 446 s). Example values: ["https://apify.com","https://en.wikipedia.org/wiki/Web_scraping"]
widthNoCustom viewport width in CSS pixels; overrides the preset width. Example: 1366
deviceNoViewport preset: "desktop" (1440x900), "desktop-hd" (1920x1080), "laptop" (1280x800), "tablet" (820x1180 @2x) or "mobile" (iPhone 390x844 @3x, mobile user agent). Default: "desktop". Example: "mobile" Example values: "desktop"desktop
heightNoCustom viewport height in CSS pixels; overrides the preset. With fullPage false this is the image height. Example: 768
cookiesNoCookies set before loading, for logged-in or region-specific pages. Each needs name and value; domain defaults to the URL host. Example: [{"name": "session", "value": "abc123", "domain": ".example.com"}]
delayMsNoExtra wait in milliseconds after loading and before capturing, for animations or late widgets. Max 60000. Default: 0. Example: 2000
formatsNoOutput formats per URL: "png", "jpeg", "webp" (screenshots) and/or "pdf". Each format is a separate file and charge. Default: ["png"]. Example: ["webp", "pdf"] Example values: ["png"]
headersNoExtra HTTP headers sent with every request (Host, Content-Length and similar are ignored). Example: {"Accept-Language": "de-DE", "Authorization": "Bearer abc"} Example values: {}
qualityNoJPEG/WebP quality, 1-100. Ignored for PNG and PDF. Default: 80. Example: 60 for smaller files. Example values: 80
blockAdsNoBlock common ad and tracking hosts. Faster, cleaner captures. Default: true. Example values: true
darkModeNoEmulate the dark color scheme (prefers-color-scheme: dark). Only changes sites that support dark mode. Default: false.
fastModeNoTrade completeness for speed. Skips the slow scroll that loads lazy images and scroll animations, and takes one full-page shot (up to 16,000 device px) instead of stitched tiles, so very long pages are cut off and below-the-fold images may be missing. Cookie walls, popups and sticky headers are still handled. Same price. Example: true
fullPageNoCapture the whole scrollable page (true) or only the first screen/viewport (false). Default: true. Example: false for a quick above-the-fold thumbnail. Example values: true
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
customCssNoCSS injected before capturing. Example: "body { font-size: 18px } .banner { display: none }"
maxHeightNoLongest page part to capture, in CSS pixels. Leave empty for the default: the whole page up to 36,000 device pixels (36,000 px on desktop, 18,000 on tablet, 12,000 on mobile), which covers almost every real page, including very long news front pages and Wikipedia lists. Longer pages are cut here and flagged with truncatedAtMaxHeight: true. Max 50,000 (PNG/JPEG are also limited to 60,000 device pixels, WebP to 16,383). Example: 8000 for smaller, faster files.
pdfFormatNoPDF paper size: "A4" (default), "Letter", "Legal", "A3" or "Tabloid". Example: "Letter" Example values: "A4"A4
pdfMarginNoPDF page margin on all sides, in CSS units. Default: "10mm". Example: "0" or "0.5in" Example values: "10mm"10mm
waitUntilNoWhen the page counts as loaded: "domcontentloaded" (fastest), "load" (default, waits up to 15 s for images) or "networkidle" (slowest, for heavy single-page apps). Example: "networkidle" Example values: "load"load
hidePopupsNoHide newsletter popups, full-screen overlays and chat widgets (Intercom, Drift, HubSpot, Zendesk and others). Default: true. Example values: true
maxRetriesNoRetries for temporary errors (timeouts, network, crashes, blank pages). DNS, HTTP and selector errors are not retried. Default: 1. Example: 2 Example values: 1
referrer_idNoReferral code from another user's receipt (ref_...). They earn 10% of this run's price as credit.
pdfLandscapeNoLandscape PDF pages. Default: false.
pdfMediaTypeNoCSS media for PDFs: "screen" (looks like the website, default) or "print" (uses the site's print stylesheet, often cleaner for articles). Example: "print" Example values: "screen"screen
hideSelectorsNoCSS selectors of elements to hide before capturing. Example: [".ad-slot", "#promo-bar"]
pdfSinglePageNoMake the PDF one long page with the full page height and no page breaks, like a full-page screenshot in vector form. Default: false.
buyerPublicKeyNoBase64 Ed25519 public key (SPKI). Lets you sign a useful/not useful verdict on this run's receipt. Verdicts are recorded but never earn credit or discounts.
fileNamePrefixNoPrefix for file keys in the key-value store. Example: "release-42" gives keys like "release-42-0000-example.com.png"
maxConcurrencyNoHow many pages to load in parallel. Leave empty for automatic: 1 below 2 GB memory, 2 at 2–4 GB, then 1 per 2 GB (4 at 8 GB, max 8). New pages also wait while memory is above 70% or CPU is saturated, and only one very tall page per vCPU is laid out at a time.
scrollToBottomNoScroll through the page in steps (with short pauses) so lazy images, scroll-triggered sections and content loaded on scroll appear; keeps going while the page grows (bounded), then returns to the top. Default: true. Example: false for faster captures of short pages. Example values: true
stickyElementsNoHow to handle sticky/fixed headers in full-page captures: "static" (show once at the top, default), "hide" (remove them) or "keep" (leave as the browser draws them; may repeat). Example: "hide" Example values: "static"static
captureSelectorNoCapture only this element instead of the page (screenshots only). Fails as SELECTOR_NOT_FOUND (not charged) if missing. Example: "article", "#pricing-table"
pageTimeoutSecsNoTime limit in seconds for one URL (load, scroll and capture). Leave empty for 120 s, or up to 240 s automatically on runs with less than 4 GB memory (less than 1 vCPU). Very tall pages automatically get extra time (up to +120 s) once their height is known.
waitForSelectorNoWait until this CSS selector is visible before capturing (up to navigationTimeoutSecs). Use it for apps that render data late. Fails as SELECTOR_NOT_FOUND (not charged) if it never appears. Example: "#main-chart"
freezeAnimationsNoPut CSS animations, transitions and scroll-reveal effects (fade-ins, slide-ins, animated cards) in their final state, so the screenshot shows the finished page instead of half-faded or empty sections. Default: true. Example: false to capture the page exactly mid-animation. Example values: true
captureErrorPagesNoCapture and charge pages that return HTTP 4xx/5xx (for example to document a 404). Default: false, so error pages fail as HTTP_ERROR and are not charged.
deviceScaleFactorNoPixel density (1-3). 2 or 3 gives retina-sharp images but larger files. Default: from the preset (desktop 1, mobile 3). Example: 2
pdfPrintBackgroundNoInclude background colors and images in PDFs. Default: true. Example values: true
perHostConcurrencyNoMax parallel pages on the same website, to stay polite and avoid rate limits. Default: 2. Example values: 2
proxyConfigurationNoProxy for all requests. Not needed for most sites; for sites that block data centers use Apify residential proxy. Example: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} Example values: {"useApifyProxy":false}
captureBlockedPagesNoCapture and charge bot-check/challenge pages (Cloudflare, DataDome...) instead of failing as BLOCKED. Default: false, so blocked pages are not charged.
dismissCookieBannersNoClick "Accept" on cookie/consent banners (about 20 platforms such as OneTrust, Didomi, Sourcepoint, Cookiebot and Usercentrics, plus accept buttons in 18 languages) and hide what is left. Default: true. Example: false to capture the banner itself. Example values: true
navigationTimeoutSecsNoSeconds to wait for the page to start loading and for waitForSelector. Default: 45. Example: 90 for slow sites. Example values: 45
retryBlockedWithProxyNoWhen a site answers with a bot check and you did not set your own proxy, retry that URL once through Apify Proxy (datacenter) with a fresh, regular browser. Blocked pages are never charged, whether or not the retry works. Default: true. Example: false to fail fast on blocked sites. Example values: true

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / cookieBannerMethod / type
      Previous value: -"null"New value: +[
      +  "null",
      +  "string"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / cookieBannerMethod / type
      Previous value: -[
      -  "null",
      -  "string"
      -]New value: +"null"
  3. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / cookieBannerMethod / type
      Previous value: -"null"New value: +[
      +  "null",
      +  "string"
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / buyerPublicKey / description
      Previous value: -"Base64 Ed25519 public key (SPKI). Lets you sign a useful/not useful verdict on this run's receipt for 5% off your next run."New value: +"Base64 Ed25519 public key (SPKI). Lets you sign a useful/not useful verdict on this run's receipt. Verdicts are recorded but never earn credit or discounts."
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / cookieBannerMethod / type
      Previous value: -[
      -  "null",
      -  "string"
      -]New value: +"null"
  5. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "animationsFinished": {
      +      "type": "number"
      +    },
      +    "attempts": {
      +      "type": "number"
      +    },
      +    "bytes": {
      +      "type": "number"
      +    },
      +    "capturedAt": {
      +      "type": "string"
      +    },
      +    "charged": {
      +      "type": "boolean"
      +    },
      +    "contentType": {
      +      "type": "string"
      +    },
      +    "cookieBannerDismissed": {
      +      "type": "boolean"
      +    },
      +    "cookieBannerMethod": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "device": {
      +      "type": "string"
      +    },
      +    "durationMs": {
      +      "type": "number"
      +    },
      +    "error": {
      +      "type": "null"
      +    },
      +    "errorCode": {
      +      "type": "null"
      +    },
      +    "errorType": {
      +      "type": "null"
      +    },
      +    "fastMode": {
      +      "type": "boolean"
      +    },
      +    "fileUrl": {
      +      "type": "string"
      +    },
      +    "finalUrl": {
      +      "type": "string"
      +    },
      +    "format": {
      +      "type": "string"
      +    },
      +    "fullPage": {
      +      "type": "boolean"
      +    },
      +    "height": {
      +      "type": "number"
      +    },
      +    "hint": {
      +      "type": "string"
      +    },
      +    "httpStatus": {
      +      "type": "number"
      +    },
      +    "key": {
      +      "type": "string"
      +    },
      +    "loadMs": {
      +      "type": "number"
      +    },
      +    "outcome": {
      +      "type": "string"
      +    },
      +    "pageHeight": {
      +      "type": "number"
      +    },
      +    "pdfPages": {
      +      "type": "null"
      +    },
      +    "popupsHidden": {
      +      "type": "number"
      +    },
      +    "receipt_key": {
      +      "type": "string"
      +    },
      +    "receipt_verify_url": {
      +      "type": "string"
      +    },
      +    "referral_code": {
      +      "type": "string"
      +    },
      +    "retryable": {
      +      "type": "boolean"
      +    },
      +    "scrollGrowthRounds": {
      +      "type": "number"
      +    },
      +    "scrollSteps": {
      +      "type": "number"
      +    },
      +    "selector": {
      +      "type": "null"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "stickyElementsFixed": {
      +      "type": "number"
      +    },
      +    "textLength": {
      +      "type": "number"
      +    },
      +    "timingsMs": {
      +      "properties": {
      +        "capture": {
      +          "type": "number"
      +        },
      +        "consent": {
      +          "type": "number"
      +        },
      +        "layout": {
      +          "type": "number"
      +        },
      +        "navigate": {
      +          "type": "number"
      +        },
      +        "networkIdle": {
      +          "type": "number"
      +        },
      +        "prepare": {
      +          "type": "number"
      +        },
      +        "scroll": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "truncatedAtMaxHeight": {
      +      "type": "boolean"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "viewportSizedElementsPinned": {
      +      "type": "number"
      +    },
      +    "warnings": {
      +      "items": {},
      +      "type": "array"
      +    },
      +    "width": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  6. Changed3 schema fields changed
    • addedInput schema / properties / buyerPublicKey
      Added value: +{
      +  "description": "Base64 Ed25519 public key (SPKI). Lets you sign a useful/not useful verdict on this run's receipt for 5% off your next run.",
      +  "title": "Your verdict public key (optional)",
      +  "type": "string"
      +}
    • addedInput schema / properties / referrer_id
      Added value: +{
      +  "description": "Referral code from another user's receipt (ref_...). They earn 10% of this run's price as credit.",
      +  "title": "Referral code (optional)",
      +  "type": "string"
      +}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "animationsFinished": {
      -      "type": "number"
      -    },
      -    "attempts": {
      -      "type": "number"
      -    },
      -    "blockedRetryUsed": {
      -      "type": "boolean"
      -    },
      -    "bytes": {
      -      "type": "number"
      -    },
      -    "capturedAt": {
      -      "type": "string"
      -    },
      -    "charged": {
      -      "type": "boolean"
      -    },
      -    "contentType": {
      -      "type": "string"
      -    },
      -    "cookieBannerDismissed": {
      -      "type": "boolean"
      -    },
      -    "cookieBannerMethod": {
      -      "type": "null"
      -    },
      -    "device": {
      -      "type": "string"
      -    },
      -    "durationMs": {
      -      "type": "number"
      -    },
      -    "error": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "errorCode": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "errorType": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "fastMode": {
      -      "type": "boolean"
      -    },
      -    "fileUrl": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "finalUrl": {
      -      "type": "string"
      -    },
      -    "format": {
      -      "type": "string"
      -    },
      -    "fullPage": {
      -      "type": "boolean"
      -    },
      -    "height": {
      -      "type": "number"
      -    },
      -    "hint": {
      -      "type": "string"
      -    },
      -    "httpStatus": {
      -      "type": [
      -        "null",
      -        "number"
      -      ]
      -    },
      -    "key": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "loadMs": {
      -      "type": "number"
      -    },
      -    "outcome": {
      -      "type": "string"
      -    },
      -    "pageHeight": {
      -      "type": "number"
      -    },
      -    "pdfPages": {
      -      "type": "null"
      -    },
      -    "popupsHidden": {
      -      "type": "number"
      -    },
      -    "retryable": {
      -      "type": "boolean"
      -    },
      -    "runNote": {
      -      "type": "string"
      -    },
      -    "scrollGrowthRounds": {
      -      "type": "number"
      -    },
      -    "scrollSteps": {
      -      "type": "number"
      -    },
      -    "selector": {
      -      "type": "null"
      -    },
      -    "status": {
      -      "type": "string"
      -    },
      -    "stickyElementsFixed": {
      -      "type": "number"
      -    },
      -    "textLength": {
      -      "type": "number"
      -    },
      -    "timingsMs": {
      -      "properties": {
      -        "capture": {
      -          "type": "number"
      -        },
      -        "consent": {
      -          "type": "number"
      -        },
      -        "layout": {
      -          "type": "number"
      -        },
      -        "navigate": {
      -          "type": "number"
      -        },
      -        "networkIdle": {
      -          "type": "number"
      -        },
      -        "prepare": {
      -          "type": "number"
      -        },
      -        "scroll": {
      -          "type": "number"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "truncatedAtMaxHeight": {
      -      "type": "boolean"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "viewportSizedElementsPinned": {
      -      "type": "number"
      -    },
      -    "warnings": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "width": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  7. Changed5 schema fields changed
    • changedInput schema / properties / urls / description
      Previous value: -"**REQUIRED** Web pages to capture. Each URL gives one file per format. https:// is added if missing; duplicates are removed and invalid entries are reported for free. Example: [\"https://apify.com\", \"example.com/pricing\"]\nExample values: [\"https://apify.com\",\"https://en.wikipedia.org/wiki/Web_scraping\"]"New value: +"**REQUIRED** Web pages to capture. Each URL gives one file per format. https:// is added if missing; duplicates are removed and invalid entries are reported for free. Example: [\"https://apify.com\", \"example.com/pricing\"] Memory: keep the default 4096 MB or more. Below 4 GB heavy pages load 2-3x slower and large batches can time out (a 28-URL test at 2 GB timed out at 900 s; at 4 GB it finished in 446 s).\nExample values: [\"https://apify.com\",\"https://en.wikipedia.org/wiki/Web_scraping\"]"
    • changedInput schema / properties / urls / items / description
      Previous value: -"**REQUIRED** Web pages to capture. Each URL gives one file per format. https:// is added if missing; duplicates are removed and invalid entries are reported for free. Example: [\"https://apify.com\", \"example.com/pricing\"]"New value: +"**REQUIRED** Web pages to capture. Each URL gives one file per format. https:// is added if missing; duplicates are removed and invalid entries are reported for free. Example: [\"https://apify.com\", \"example.com/pricing\"] Memory: keep the default 4096 MB or more. Below 4 GB heavy pages load 2-3x slower and large batches can time out (a 28-URL test at 2 GB timed out at 900 s; at 4 GB it finished in 446 s)."
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / httpStatus / type
      Previous value: -"number"New value: +[
      +  "null",
      +  "number"
      +]
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / runNote
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / warnings / items / type
      Added value: +"string"
  8. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / httpStatus / type
      Previous value: -[
      -  "null",
      -  "number"
      -]New value: +"number"
  9. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "animationsFinished": {
      +      "type": "number"
      +    },
      +    "attempts": {
      +      "type": "number"
      +    },
      +    "blockedRetryUsed": {
      +      "type": "boolean"
      +    },
      +    "bytes": {
      +      "type": "number"
      +    },
      +    "capturedAt": {
      +      "type": "string"
      +    },
      +    "charged": {
      +      "type": "boolean"
      +    },
      +    "contentType": {
      +      "type": "string"
      +    },
      +    "cookieBannerDismissed": {
      +      "type": "boolean"
      +    },
      +    "cookieBannerMethod": {
      +      "type": "null"
      +    },
      +    "device": {
      +      "type": "string"
      +    },
      +    "durationMs": {
      +      "type": "number"
      +    },
      +    "error": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "errorCode": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "errorType": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "fastMode": {
      +      "type": "boolean"
      +    },
      +    "fileUrl": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "finalUrl": {
      +      "type": "string"
      +    },
      +    "format": {
      +      "type": "string"
      +    },
      +    "fullPage": {
      +      "type": "boolean"
      +    },
      +    "height": {
      +      "type": "number"
      +    },
      +    "hint": {
      +      "type": "string"
      +    },
      +    "httpStatus": {
      +      "type": [
      +        "null",
      +        "number"
      +      ]
      +    },
      +    "key": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "loadMs": {
      +      "type": "number"
      +    },
      +    "outcome": {
      +      "type": "string"
      +    },
      +    "pageHeight": {
      +      "type": "number"
      +    },
      +    "pdfPages": {
      +      "type": "null"
      +    },
      +    "popupsHidden": {
      +      "type": "number"
      +    },
      +    "retryable": {
      +      "type": "boolean"
      +    },
      +    "scrollGrowthRounds": {
      +      "type": "number"
      +    },
      +    "scrollSteps": {
      +      "type": "number"
      +    },
      +    "selector": {
      +      "type": "null"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "stickyElementsFixed": {
      +      "type": "number"
      +    },
      +    "textLength": {
      +      "type": "number"
      +    },
      +    "timingsMs": {
      +      "properties": {
      +        "capture": {
      +          "type": "number"
      +        },
      +        "consent": {
      +          "type": "number"
      +        },
      +        "layout": {
      +          "type": "number"
      +        },
      +        "navigate": {
      +          "type": "number"
      +        },
      +        "networkIdle": {
      +          "type": "number"
      +        },
      +        "prepare": {
      +          "type": "number"
      +        },
      +        "scroll": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "truncatedAtMaxHeight": {
      +      "type": "boolean"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "viewportSizedElementsPinned": {
      +      "type": "number"
      +    },
      +    "warnings": {
      +      "items": {},
      +      "type": "array"
      +    },
      +    "width": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  10. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the wait cap (max 45s), that the response may be file links or a runId for polling, and the pricing structure including free failures. It does not explain the destructiveHint or permission/authorization context, but the annotations already carry the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded, and every sentence adds operational value: purpose, return/polling behavior, alternative tools, and cost. There is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex 44-parameter schema, existing output schema, and annotations, the description is complete enough for an agent to understand what the tool does, how long it waits, what it returns, and when to use the polling siblings instead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 44 parameters are already documented in the input schema. The tool description only highlights waitSecs and cookie-banner removal, which is useful but does not add much beyond the schema's own detailed parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: it calls the catalyst-labs/website-screenshot-pdf-api Actor and starts a screenshot/PDF capture of public URLs. It also distinguishes itself from related siblings by directing already-started runs to get-actor-run and get-dataset-items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates this tool starts a new capture and that get-actor-run/get-dataset-items should be used for runs already started. The public-URL scope is stated, but there is no explicit exclusion for private pages or other capture cases beyond the poller alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.