URL2PNG Screenshot Is Cut Off: How to Capture the Full Page
Fix a cut-off URL2PNG screenshot with full-page capture, render timing, and cache checks. Includes runnable request examples and a ScreenshotNeo alternative.
If a URL2PNG screenshot is cut off, add fullpage=true to the request. URL2PNG defaults to a viewport-only capture; the full-page option attempts to capture the entire document canvas. If content is still missing, check when the page finishes rendering, then check whether you are seeing a cached image.
1. Request a full-page capture
URL2PNG documents fullpage as an attempt to capture the entire document canvas. It is separate from the viewport setting: the viewport controls the browser’s render dimensions, while fullpage=true requests the whole page. The documented default viewport is 1480×1037. Increasing viewport dimensions alone does not request a full-page capture. See the URL2PNG quickstart and API documentation.
https://api.url2png.com/v6/P_api_key/P_private_key/...
URL2PNG’s API uses a signed request URL, so build the request using its official quickstart or SDK and include fullpage=true among the screenshot options. The exact signing fields depend on your account credentials and chosen endpoint; do not put a private key in browser-side code.
cURL
Use the signed URL generated according to your URL2PNG account’s documented format:
curl 'SIGNED_URL2PNG_REQUEST_URL_WITH_fullpage=true' -o page.png
Replace the placeholder with the complete signed request URL. A placeholder URL is not itself a valid API request.
Python
Generate or obtain a signed URL using URL2PNG’s documented signing scheme, adding fullpage=true to the options before signing. Then fetch the image:
import requests
signed_url = "SIGNED_URL2PNG_REQUEST_URL_WITH_fullpage=true"
response = requests.get(signed_url, timeout=90)
response.raise_for_status()
with open("page.png", "wb") as image:
image.write(response.content)
Node.js
As with Python, sign the URL using the URL2PNG credentials and documented request format before fetching it:
const signedUrl = 'SIGNED_URL2PNG_REQUEST_URL_WITH_fullpage=true';
const response = await fetch(signedUrl);
if (!response.ok) {
throw new Error(`URL2PNG returned ${response.status}`);
}
const image = new Uint8Array(await response.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('page.png', image));
These snippets show the image download step, not URL2PNG’s signature generation. Consult the official quickstart for the signing details and endpoint syntax for your account.
2. Keep full-page capture separate from viewport size
Choose a viewport that matches the layout you want to render, then request full-page output independently. A desktop-width viewport produces a desktop layout captured down the document; a narrow viewport may trigger a mobile layout, also captured down the document. Changing the viewport can alter responsive content, but it is not a substitute for fullpage=true.
| Setting | What it affects | Use it when |
|---|---|---|
fullpage=true |
Requests the entire document canvas | The image stops at the initial viewport |
| Viewport dimensions | Browser render width and height, and therefore responsive layout | The page layout is too narrow, too wide, or using the wrong breakpoint |
Full-page capture is documented as an attempt. A page with unusual scrolling, dynamically inserted sections, or content that has not rendered yet can still produce an incomplete result.
3. Wait for content before capturing
When content below the fold is populated after initial page readiness, adjust capture timing. URL2PNG documents a fixed delay after document readiness and asset loading. Use a delay when the page needs a known additional amount of time.
# Add these documented options to the URL2PNG request before signing:
delay=3
fullpage=true
The value 3 is an example delay, not a universal recommendation. Use the shortest delay that reliably allows the target page’s content to appear.
For pages that can expose an explicit readiness signal, URL2PNG documents say_cheese=true. The page should contain the expected element, such as <div id='url2png-cheese'></div>, when its capture-ready content is present. This gives the capture a page-specific signal instead of relying only on a fixed wait. Timing and full-page capture solve different problems: use fullpage=true to request the document canvas, and a delay or readiness signal when content is not ready in time.
4. Rule out a stale cached screenshot
If the page has changed but the screenshot looks old, URL2PNG documents the unique option to force a fresh screenshot by varying its value. Its documented default cache TTL is 2,592,000 seconds (30 days). Include a changing value when freshness matters, and sign the request according to the documented format.
# Example request options; choose a new unique value when you need a fresh image:
fullpage=true
unique=release-2026-10-04-1
Do not change unique to solve a screenshot that is simply viewport-only or captured before content appeared. Cache freshness, capture dimensions, and render timing are separate checks.
5. Diagnose the result
- Confirm the request contains
fullpage=true. Without it, URL2PNG’s documented default is viewport-only. - Check the viewport. Confirm its width produces the intended responsive layout. Do not treat a taller viewport as the full-page switch.
- Inspect when missing content appears. If it loads after readiness, try an appropriate
delayor use the documented readiness element withsay_cheese=true. - Check whether the image is stale. Vary
uniqueto force a fresh capture when cache freshness is suspect. - Inspect the page’s own rendering behavior. If full-page mode and readiness are correct, check whether the site uses custom scrolling containers or creates lower-page regions dynamically. URL2PNG describes full-page capture as an attempt, not a guarantee for every page structure.
6. Common errors and fixes
| Symptom | Likely cause | What to try |
|---|---|---|
| Image ends at the first screen | fullpage is omitted or false |
Set fullpage=true in the signed request. |
| Lower sections are blank or missing | Content had not rendered when capture began | Use a suitable delay, or signal readiness with say_cheese=true and the documented element. |
| Image has the wrong layout | Viewport dimensions select a different responsive breakpoint | Set the viewport to the width you intend to render, keeping full-page enabled separately. |
| Image shows an old version | A cached result is being returned | Vary unique to force a fresh screenshot. |
| Some content remains absent despite full-page mode | The page may render content dynamically or use nonstandard scrolling behavior | Inspect the target page’s rendering and scrolling behavior and ensure its content-ready signal occurs before capture. |
| Request fails after adding an option | The signed URL may no longer match the request options | Follow URL2PNG’s request-building instructions and include options in the documented signing process; keep private credentials server-side. |
7. Performance, reliability, and cost considerations
Full-page captures include more document content than viewport-only captures, so the resulting image can be taller and contain more pixels. Choose a viewport that matches the intended layout, and use only as much extra wait time as the page needs. A fixed delay adds waiting even when a page is ready sooner; an explicit readiness signal can better match pages whose load time varies, provided the page reliably exposes the documented element.
URL2PNG describes full-page capture as an attempt, so validate pages with unusual scroll behavior or late-loading sections. For repeatable captures, keep the viewport, readiness condition, and cache-busting policy consistent. The documentation gives a 30-day default TTL; vary unique when you need fresh output. The research sources provide no relevant performance benchmark or per-request cost figure, so check your current URL2PNG account and plan for pricing and limits.
8. Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server from Yorker Media. Its one-request API can return PNG, JPEG, WebP, or PDF, and its screenshot options include full-page capture with lazy images loaded. Add full_page=true to capture the complete page. See the ScreenshotNeo API documentation.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -d full_page=true -o shot.webp
Python
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com", "full_page": "true"},
timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://stripe.com',
full_page: 'true',
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`ScreenshotNeo returned ${res.status}`);
const image = new Uint8Array(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', image));
ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before capture. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; response headers report the page verdict and billing status. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots.
Sign up for ScreenshotNeo and get 1,000 screenshots a month free, with no card.
FAQ
Does changing the viewport make URL2PNG capture the full page?
No. Viewport dimensions set the browser render size; fullpage=true requests the full document canvas.
Should I use a delay or a readiness element?
Use a delay when a short additional wait is sufficient. Use say_cheese=true when the page can expose URL2PNG’s documented readiness element after content is ready.
How do I get a fresh URL2PNG screenshot?
Vary the unique value to force a fresh screenshot when cached output is suspected.


