ScreenshotMachine Not Capturing Indian Websites Correctly: Common Fixes
Fix screenshot differences by checking the URL, cache, viewport, load delay, language, cookies, and overlays. Learn what these settings cannot tell you about capture location.
If ScreenshotMachine returns a page that looks different from the one you see in India, check the exact URL and response first, then rule out cached output, device and viewport differences, incomplete loading, language and cookie state, and obstructing overlays. These settings can help explain many mismatches. They do not prove that the capture came from an Indian IP address: the reviewed public API documentation does not document an India-specific renderer, selectable India egress, or capture geography.
Use the steps below to isolate one variable at a time. If the result still differs from what a browser in India shows, save a reproducible example and ask ScreenshotMachine support to confirm the capture worker’s egress region.
1. Inspect the URL and API response
Start with the exact page, including its path and query string. ScreenshotMachine recommends percent-encoding the target URL. Check the X-Screenshotmachine-Response header: an invalid or incomplete request can return an error image, which should not be mistaken for the website’s actual page.
Documented response codes include invalid_url, invalid_key, invalid_hash, missing_key, missing_url, no_credits, invalid_selector, invalid_crop, and system_error. The provider also says invalid_url can mean the target requires authorization and returned HTTP 401. See the [ScreenshotMachine API reference](https://www.screenshotmachine.com/website-screenshot-api.php) for parameter and error details.
For cURL, retain response headers while saving the image so you can inspect both:
curl -G 'https://api.screenshotmachine.com' \
--data-urlencode 'key=YOUR_SCREENSHOTMACHINE_KEY' \
--data-urlencode 'url=https://example.in/path?item=1' \
-D response-headers.txt \
-o capture.png
Use the endpoint and required credentials from your ScreenshotMachine account and current API documentation. Do not publish API keys or private cookies when sharing a reproduction.
2. Rule out stale cached output
Set cacheLimit=0 to request a fresh screenshot. The documented range is 0–14 days, and the API default is 14 days. A page that has changed since the cached capture can look like a rendering problem.
curl -G 'https://api.screenshotmachine.com' \
--data-urlencode 'key=YOUR_SCREENSHOTMACHINE_KEY' \
--data-urlencode 'url=https://example.in/' \
--data-urlencode 'cacheLimit=0' \
-o fresh.png
For a fair comparison, keep the URL and other capture settings fixed while changing only the cache limit.
3. Match the device and viewport
Compare the capture with the same layout you are inspecting in a browser. The API documents desktop, phone, and tablet device modes. Its examples include desktop at 1024×768, phone at 480×800, and tablet at 800×1280. Width can be 100–1920 pixels; height can be 100–9999 pixels or full.
| Comparison | What to check |
|---|---|
| Desktop versus desktop | Use the same viewport width and height as the browser. Responsive breakpoints can change navigation, columns, and images. |
| Phone versus phone | Try device=phone with a phone-sized dimension; do not compare a mobile browser to a desktop capture. |
| Tablet versus tablet | Use the corresponding tablet mode and dimensions if the mismatch occurs at an intermediate breakpoint. |
| Full page versus viewport | Use a height of full when you need a full-page capture, and allow enough time for content lower on the page to load. |
The provider’s generator notes that modern pages can look different across device types. Its [online screenshot generator](https://www.screenshotmachine.com/website-screenshot-generator.php) exposes device and delay controls. Test viewport and device before changing zoom.
4. Give the page time to finish rendering
Client-rendered sections, lazy images, animations, and other delayed content may not be ready when the screenshot is taken. Increase delay and compare again. The API lists delay settings from 0 through 10,000 milliseconds and documents 200 ms as its default. For long full-page captures with images or animation, its documentation suggests considering 2000 ms or more.
curl -G 'https://api.screenshotmachine.com' \
--data-urlencode 'key=YOUR_SCREENSHOTMACHINE_KEY' \
--data-urlencode 'url=https://example.in/' \
--data-urlencode 'delay=2000' \
-o delayed.png
The online generator describes delay in seconds and gives a 2-second default; do not assume the generator and API use the same default. A longer delay can improve readiness, but it also makes each capture take longer. It cannot fix content that the page never serves to the capture session.
5. Test language, user agent, and cookies separately
These request settings affect different parts of the site response. Change one at a time so you can tell which setting accounts for a difference.
| Setting | What it changes | What it does not establish |
|---|---|---|
accept-language |
Sends an Accept-Language request header. It can test whether the site selects translated content based on language preference. |
It does not prove the request came from India or change the documented capture network location. |
user-agent |
Sends a browser identity string; the docs show an Android/Samsung mobile example. It can help test a site that varies content by device identity. | It is not an India proxy and does not guarantee the site’s mobile layout; viewport and device settings matter too. |
cookies |
Supplies semicolon-separated cookie name/value pairs. This can test session, region-choice, or consent state if the site uses those cookies. | It does not create a logged-in session unless the supplied cookies are valid and accepted by the site. |
Percent-encode values that contain reserved characters. For example, encode spaces and semicolons in a cookie string according to the API’s parameter format. Use only cookies you are authorized to send, and avoid exposing session tokens in logs or support requests.
6. Handle cookie banners and other overlays
A consent dialog, newsletter popup, or other overlay can obscure the page even when the underlying content loaded correctly. ScreenshotMachine documents click to click a CSS selector before capture and hide to remove matching elements before capture. Its examples include selectors such as .cookie-banner and #cookie-banner.
- Use
clickwhen accepting the site’s banner is part of the state you intend to capture. Confirm the selector targets the intended button. - Use
hidewhen the overlay itself is outside the purpose of the screenshot and you want to inspect the page underneath. - Percent-encode reserved selector characters such as
#when passing selectors in a query string.
Do not treat a hidden banner as proof that the site accepted consent. Click and hide test different states.
7. Use zoom only after matching the viewport
The API’s zoom setting accepts 10–400 percent and defaults to 100. It changes page zoom before capture, but the documentation says zoom is ignored for screenshots smaller than a typical device dimension. First align device and dimensions; then test zoom if the page scale still differs. For full-page captures, use dimension with height full and consider a longer delay when the page has images or animation.
8. Isolate the cause with a controlled comparison
- Capture the exact URL with the default parameters and save the response header.
- Repeat with
cacheLimit=0to rule out stale output. - Match desktop, phone, or tablet mode and the dimensions of the browser view you are comparing.
- Increase delay, keeping all other parameters unchanged.
- Test
accept-language, thenuser-agent, then cookies as separate captures. - Test the relevant overlay selector with
clickorhide. - If the difference remains specific to a browser in India, ask support whether the capture worker’s egress location can be confirmed or selected.
For the support report, include the exact URL, capture time, parameters with keys and private cookies redacted, output image, response header, and a description or screenshot of what the browser in India shows. The reviewed public docs do not establish the capture worker’s location or an India-selectable proxy, so keep the cause open until support or a reproducible site-specific result confirms it.
Or skip the browser setup
ScreenshotNeo provides a website screenshot API and MCP server for developers. One GET request returns a screenshot or PDF; its parameters also accept the names used by other screenshot APIs, which can make switching straightforward. Review the [ScreenshotNeo documentation](https://screenshotneo.com/docs/) before using the API.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.in -o shot.webp
ScreenshotNeo accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and the response identifies the page verdict and billing status in headers. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
Performance, reliability, and cost notes
- Freshness:
cacheLimit=0avoids relying on a cached result, while the documented default cache age is 14 days. This is useful for diagnosis when a site has changed. - Capture time: Longer delays give dynamic pages more time to settle but increase waiting time. Full-page captures with lazy content may need more time than a simple viewport capture.
- Repeatability: Record the URL, viewport, device, language, user agent, cookie state, delay, and cache setting for each comparison. Otherwise, two captures may differ because their inputs differed.
- Credits and failures: Check the response header and your account’s current terms to understand provider-specific error and credit handling. The reviewed ScreenshotMachine parameter reference documents
no_creditsas an error code; it does not establish a general billing policy for every failed capture. - Regional reliability: The public documentation reviewed here does not say where capture workers run or offer an India egress control. Treat location-specific explanations as hypotheses until confirmed.
Troubleshooting common errors
| Symptom or response | Likely cause to check | Next step |
|---|---|---|
| Error image instead of the expected page | The API call may have failed; the image can represent an API error rather than the target. | Read X-Screenshotmachine-Response and check the exact URL and required parameters. |
invalid_url |
Malformed or incomplete URL, or a target that requires authorization and returns 401. | Pass the full encoded URL. Check whether the target is accessible without credentials. |
missing_key or invalid_key |
Key omitted, mistyped, or not valid for the account. | Check the account key and parameter spelling; keep the key private. |
missing_url |
The target URL was not sent or was parsed incorrectly. | Pass the full URL as the URL parameter and encode query-string characters. |
invalid_hash |
The request hash does not match the required form for the account/request. | Recreate the hash using the provider’s current instructions. |
no_credits |
The account has no available credits. | Check account usage and plan balance. |
invalid_selector |
A selector for click, hide, or another selector-based option is invalid or matches no supported target. | Inspect the selector in a browser, simplify it, and encode reserved characters. |
invalid_crop |
Crop parameters are malformed or outside the valid image area. | Recheck crop values against the documented dimensions. |
| Content missing below the fold | Lazy content or page scripts had not finished before capture. | Use a full-height capture and increase delay; compare again. |
| Wrong language or consent state | The site may use request language or cookies to select content or remember preferences. | Test accept-language and relevant cookies separately; do not infer network location from either. |
| Unexplained India-only difference | The cause could be site behavior or capture location, but the reviewed docs do not establish either. | Send support a reproducible capture and ask whether egress location is selectable or confirmable. |
FAQ
Does setting accept-language make ScreenshotMachine capture from India?
No. It sets the HTTP language preference. It is not evidence of an Indian IP address, and the reviewed public documentation does not describe an India-specific capture location.
Why does the screenshot show a consent dialog that I already accepted?
The capture may not share the browser’s cookie state. Test with an authorized consent cookie, use the documented click option to accept the banner, or hide the overlay if it is irrelevant to the capture.
Should I use a longer delay for every screenshot?
No. Add delay when the page has content that arrives late, animation, or lazy-loaded images. A longer delay increases capture time without helping a page that never serves the missing content.
Can a mobile user agent alone reproduce a phone screenshot?
Not reliably. Match the device mode and viewport dimensions too, because responsive layout can depend on viewport size.


