Free tools Windows power users keep installed
One-click scans. No signup required.
To capture screenshots of multiple URLs with PagePeeker in Python, send one request per URL and save each response’s image bytes. PagePeeker documents a single-target thumbnail endpoint, not a multi-URL batch endpoint. Its API V2 is the current recommended version; V1 is discontinued and redirects to V2. The Python example below is a client-side integration pattern based on PagePeeker’s documented HTTP parameters, not a published or tested PagePeeker SDK example.
Capture a list of URLs with Python
Install the HTTP client first:
python -m pip install requests
Then loop through the URLs, URL-encode each target in the query string, check the HTTP status, and write the returned bytes to a file:
As an Amazon Associate I earn from qualifying purchases.
from pathlib import Path
from urllib.parse import urlencode
import requests
BASE = "http://api.pagepeeker.com/v2/thumbs.php"
API_CODE = "YOUR_SERVER_SIDE_CODE"
def capture(url: str, output: Path, size: str = "m") -> None:
params = {"size": size, "code": API_CODE, "url": url}
response = requests.get(f"{BASE}?{urlencode(params)}", timeout=60)
response.raise_for_status()
output.write_bytes(response.content)
urls = ["https://example.com", "https://example.org"]
for index, url in enumerate(urls, start=1):
capture(url, Path(f"capture-{index}.jpg"))
This uses the unbranded/paid entry point, api.pagepeeker.com. For PagePeeker’s free branded service, use http://free.pagepeeker.com/v2/thumbs.php; that service ignores the optional account code. PagePeeker documents the target URL as URL-encoded and recommends using an account code for server-side calls. Do not put the code in browser-side JavaScript or another public client: someone else could use it and consume calls from the account.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesThe example writes the response body to a file; it does not inspect the returned content type or provider-specific error headers. For production use, check the response content type and, for paid or unbranded accounts, consider logging PagePeeker’s documented headers such as X-PP-Error, X-PP-Capture-Time, X-PP-Final-URL, and X-PP-Timestamp. Choose filenames and retry handling appropriate to your workload.
#1 Best Overall
Choose a thumbnail size
| Size code | Documented dimensions |
|---|---|
t |
90 × 68 px |
s |
120 × 90 px |
m |
200 × 150 px |
l |
400 × 300 px |
x |
480 × 360 px |
Premium accounts may have additional sizes. These are thumbnail dimensions; do not assume the standard endpoint returns a full-page screenshot.
Does PagePeeker have a batch API?
The documented V2 thumbnail URL accepts one url parameter per request. The cited API documentation does not document a multi-URL batch endpoint, so capture a list by iterating over it and making a separate request for each URL. Keep concurrency conservative unless your account terms and provider guidance support higher parallelism; the cited documentation does not specify a safe concurrency limit.
Rank #2
How to handle thumbnails that are not ready
PagePeeker provides a separate readiness endpoint at /v2/thumbs_ready.php?size={size}&code={code}&url={url}. It returns JSON fields named Error and IsReady. The documented flow is to request generation, check readiness, and then fetch the image when ready.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →The documentation does not prescribe a Python client or polling interval. If you implement polling, use a bounded retry strategy with a delay chosen for your workload, stop after a defined deadline, and handle an error or a still-not-ready result rather than polling indefinitely. A readiness check itself consumes an API call, so frequent polling can use quota quickly.
Request options and limits
code: Optional account API key. Keep it server-side. The free branded endpoint ignores it.refresh=1: Forces regeneration for premium accounts.wait: Premium-only maximum number of seconds to wait for a thumbnail before returning the generated image or a placeholder.
PagePeeker describes full-page screenshots as a Premium offering. Its feature page lists adjustable width and maximum height, compression, thumbnail sizes, overlay text, and capture waiting options. The ordinary free thumbnail endpoint should not be treated as a full-page capture service.
Quotas, caching, and account choices
PagePeeker’s published terms differ by account type and may change. The figures below reflect the vendor pages accessed in 2026; confirm current terms before selecting an account. Rendering-time ranges are PagePeeker’s published typical ranges for the named options, not a universal latency guarantee.
| Option | Monthly calls | Branding or link-back | Maximum listed size | Cache duration | Published typical rendering time |
|---|---|---|---|---|---|
| Free branded | No call limit listed | Branded | 480 × 360 | 20 days | 30–60 seconds |
| Free unbranded | 100,000 | Link back required | 480 × 360 | 20 days | 10–20 seconds |
| Basic | 100,000 | Not stated on the cited pricing page | Not stated on the cited pricing page | 7 days | Not stated on the cited pricing page |
| Advanced | 1,000,000 | Not stated on the cited pricing page | Not stated on the cited pricing page | 5 days | Not stated on the cited pricing page |
| Premium | No listed call limit; custom pricing | Not stated on the cited pricing page | Additional sizes may be available | Customizable | Varies by account category |
PagePeeker’s pricing page accessed in 2026 lists Basic at $5.99/month for 100,000 calls and Advanced at $39.99/month for one million calls; Premium pricing is custom. These are vendor-listed plan terms, not independent usage measurements.
Count readiness checks and cache hits in your budget
PagePeeker’s FAQ says calls count when displaying a cached thumbnail, creating a thumbnail, checking whether one is ready, and using any other exposed API. Readiness polling therefore adds calls on top of the thumbnail request. Unused monthly calls do not roll over. The FAQ also describes pay-as-you-go for premium accounts above five million calls per month by contacting PagePeeker.
Best Value
Or skip the browser setup
If you want a screenshot workflow with a one-request API, ScreenshotNeo accepts one URL and returns a PNG, JPEG, WebP, or PDF. For a list, make a request per URL, just as with the loop above. Its distinguishing options include removing cookie/consent banners, newsletter popups, and chat widgets before capture; its response identifies bot checks, blank pages, failed loads, and cache hits, and only clean shots are billed. It also offers an MCP server for AI agents.
Install Requests with python -m pip install requests, then use this one-call example for a target URL. See the ScreenshotNeo API documentation for request options.
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
timeout=90,
)
open("shot.webp", "wb").write(r.content)
ScreenshotNeo includes 1,000 screenshots per month free with no card; paid plans start at $5 for 3,000. Sign up for ScreenshotNeo free.
Troubleshooting
- The request fails or returns an HTTP error: Check that you are using the V2 path and a valid entry point, and call
raise_for_status()so your script does not silently save an error response as an image. - The saved file is not a usable image: Inspect the response content type and provider-specific error headers, rather than assuming every response body is a thumbnail.
- The thumbnail is not ready: Use the readiness endpoint and stop after a bounded number of checks; PagePeeker does not specify a polling interval.
- Your account calls are being consumed faster than expected: Account for the original request, readiness checks, and cached-thumbnail displays, all of which PagePeeker says count as calls.
- Your API code appears exposed: Move it to a server-side environment variable or secret store and avoid embedding it in browser code.
- You expected a full-page image: Full-page capture is listed as a Premium feature; the normal thumbnail sizes are small fixed dimensions.
Prevent PagePeeker captures of your site
PagePeeker says site owners who do not want its robot to capture pages can add this to robots.txt:
User-agent: PagePeeker
Disallow: /
Frequently Asked Questions
Can I save PagePeeker screenshots with a different file extension?
Choose an extension that matches the response’s actual image format; the cited API details describe returned thumbnails but do not establish one universal format for every account or response.
Does PagePeeker publish a Python SDK?
The cited API page documents HTTP URLs and parameters, not a Python SDK or a Python list-batch example.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →




