How to Fix Browshot Screenshots Missing Images or Web Fonts
Diagnose missing images or web fonts in Browshot screenshots by checking cache, timing, browser settings, page status, redirects, and asset requests.
If a Browshot screenshot is missing images or web fonts, first request a fresh capture with cache=0. Then give the page more time to render, confirm image loading is enabled for the selected browser, and inspect the screenshot details, final URL, and page response. A successful screenshot job does not prove that every image or font request succeeded.
This sequence helps determine whether you are seeing an old capture, content that appeared after the screenshot, a browser configuration issue, a redirect or regional variant, or an asset-loading problem on the target page.
1. Rule out a stale screenshot
Browshot documents a 24-hour default cache for screenshots made with the same URL and instance. Add cache=0 to request a new capture before changing other settings. Otherwise, an old image can look like a current rendering failure. Browshot API documentation
curl -G 'https://api.browshot.com/api/v1/simple' \
--data-urlencode 'url=https://example.com/page' \
--data-urlencode 'instance_id=YOUR_INSTANCE_ID' \
--data-urlencode 'key=YOUR_API_KEY' \
--data-urlencode 'cache=0' \
-o screenshot.png
Use the exact URL and instance that produced the problem. If the fresh result contains the assets, the previous capture was stale; you do not need a longer wait. Browshot’s Simple API returns a PNG for a successful screenshot.
2. Allow time for late rendering
Browshot’s documented default delay is five seconds after the page-load event. Increase it when JavaScript inserts content or when assets arrive late. max_wait can allow a longer wait for the PageLoad event; delay still applies afterward. Raising either value is a diagnostic, not proof that the font or image itself is fixed. Browshot API documentation
curl -G 'https://api.browshot.com/api/v1/simple' \
--data-urlencode 'url=https://example.com/page' \
--data-urlencode 'instance_id=YOUR_INSTANCE_ID' \
--data-urlencode 'key=YOUR_API_KEY' \
--data-urlencode 'cache=0' \
--data-urlencode 'delay=10' \
--data-urlencode 'max_wait=30' \
-o screenshot.png
Change one timing value at a time and compare results. A longer delay adds capture time. If the page never requests or successfully loads the asset, waiting will not make it appear.
3. Try a script only when the page needs an action
If the application populates content asynchronously or needs a repeatable page action, Browshot supports script (a JavaScript file URL) and script_inline (inline JavaScript). The script runs after the page-load event and must finish within the configured delay. Browshot’s JavaScript guide gives a maximum of 10 seconds for script completion. Use a script to trigger or wait for known page behavior; it is not a guaranteed font-loading fix. Browshot JavaScript guide
curl -G 'https://api.browshot.com/api/v1/simple' \
--data-urlencode 'url=https://example.com/page' \
--data-urlencode 'instance_id=YOUR_INSTANCE_ID' \
--data-urlencode 'key=YOUR_API_KEY' \
--data-urlencode 'cache=0' \
--data-urlencode 'delay=10' \
--data-urlencode 'script_inline=window.scrollTo(0, document.body.scrollHeight)' \
-o screenshot.png
Use a small, bounded script. For example, scrolling can trigger lazy-loaded images, but it does not repair a broken image URL or a font request blocked by the page or its server.
4. Confirm the browser’s image-loading setting
Browshot says image loading can be enabled or disabled in a browser feature configuration. Check the selected browser or instance and make sure image loading is enabled. Its reviewed documentation identifies this image toggle but does not identify a corresponding web-font toggle. Browshot features
If images remain absent after confirming the setting and requesting a fresh capture, inspect the actual image requests on the target page. For missing web fonts, inspect the page’s font requests and browser console with the target site’s usual debugging tools. This asset-level investigation is general browser troubleshooting; Browshot’s reviewed documentation does not prescribe a specific missing-font diagnosis procedure.
5. Inspect status, errors, URL, and response
Check the screenshot status and error details, the final URL after redirects, and the main page response code. A finished screenshot job only says the capture completed; it does not establish that the page’s individual image or font requests succeeded.
| Simple API result | Meaning and next step |
|---|---|
| 200 | Successful PNG response. Check the image and font requests on the rendered page if assets are still missing. |
| 404 | Capture failed; read the explanation in the X-Error response header. |
| 400 | Invalid request; read X-Error and correct the parameters. |
| 302 | Screenshot is still in progress; follow the redirect as documented. |
For more detail, Browshot’s screenshot API offers a details setting and an info endpoint. The API documents html=1 for saving rendered HTML for later retrieval; it costs one credit per screenshot. Use it when seeing the rendered document structure would help distinguish missing markup from missing visual assets. Browshot API documentation
6. Check redirects and regional content
Compare the requested URL with the final URL in screenshot details. A redirect can lead to a sign-in page, an error page, or a different version of the site. Browshot documents regional IP options because some websites vary content by country. If that is plausible for the target, compare a supported region such as Germany, the UK, the USA, or Australia. Do not change region without a reason; it adds another variable to the diagnosis. Browshot browser and region features
7. Use this diagnostic order
- Repeat the same URL and instance with
cache=0. - If assets are still missing, increase
delayfrom the documented five-second default; testmax_waitseparately if page load itself is late. - Use
scriptorscript_inlineonly if the page needs a known action or asynchronous behavior to settle. - Confirm image loading is enabled in the selected browser feature configuration.
- Inspect status, error details, final URL, and the page response code.
- Inspect the target page’s specific image and font requests. Test a regional IP only if geographic variation is likely.
Change one variable per capture and keep the same URL and instance for comparisons. This makes it easier to tell whether the result changed because of cache, timing, browser configuration, or location.
Or skip the browser setup
For a managed capture path, ScreenshotNeo is a website screenshot API and MCP server. One GET request returns an image or PDF. Its capture flow accepts cookie and consent banners and removes 60+ known consent platforms, newsletter popups, and chat widgets before the shot; each step can be turned off. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and the response reports the page verdict and billing status. AI agents can take screenshots through its MCP server, which provides take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. See the ScreenshotNeo API documentation.
curl -G 'https://api.screenshotneo.com/v1/shot' \
-d access_key=YOUR_API_KEY \
--data-urlencode url=https://example.com/page \
-o shot.webp
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://example.com/page"},
timeout=90,
)
r.raise_for_status()
with open("shot.webp", "wb") as f:
f.write(r.content)
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://example.com/page'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const image = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', image));
Create a free ScreenshotNeo account for 1,000 screenshots a month with no card.
Performance, reliability, and cost
Start with the low-cost diagnostic: a fresh capture using cache=0, then adjust timing only if the evidence points to late rendering. Longer delays increase the time each capture takes. Browshot documents that html=1 costs one credit per screenshot; enable it only when the saved HTML will help your diagnosis. Browshot also says captures taking more than two minutes are aborted automatically and failed screenshots are not charged. These are Browshot’s stated service behaviors, not a guarantee that a target site’s assets will load. Browshot feature and pricing information
For repeatable comparisons, record the URL, instance, cache setting, timing values, selected browser features, final URL, and response or error details alongside each result. This preserves the evidence needed to diagnose intermittent asset failures.
Troubleshooting common symptoms
| Symptom | Likely cause to check | Next action |
|---|---|---|
| The old image is still shown | A cached capture was reused. | Set cache=0 and verify the URL and instance. |
| Images appear after a delay in a normal browser | Late JavaScript rendering or lazy loading. | Increase delay; use a small page action script only if needed. |
| No images appear anywhere | Image loading may be disabled for the selected browser feature set. | Confirm image loading is enabled. |
| Only some images or fonts are missing | Individual resource requests may fail or be delayed. | Inspect those requests and the browser console on the target site; a successful capture alone does not verify them. |
| The screenshot shows an unexpected page | A redirect or regional variation may have changed the page. | Compare requested and final URLs; test another region only when plausible. |
| Request returns 400 or 404 | Invalid parameters or failed capture. | Read the X-Error header and correct or investigate the reported cause. |
| Request returns 302 | The screenshot is still processing. | Follow the redirect as Browshot documents. |
FAQ
Does a successful Browshot screenshot mean every asset loaded?
No. Check the image and font resource requests separately; screenshot completion is not evidence that each asset request succeeded.
Is there a documented Browshot web-font loading switch?
The reviewed Browshot documentation describes an image-loading toggle, but not a separate web-font toggle.
Should I always use the longest delay?
No. Use the smallest delay that resolves a demonstrated late-rendering problem. Longer waits increase capture time and cannot fix a failed asset request.


