What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
To capture multiple URLs with PagePeeker in Python, send one V2 thumbnail request per URL in a loop. PagePeeker’s documented thumbnail endpoint accepts one target url at a time; its cited API documentation does not describe a multi-URL batch endpoint. V2 is PagePeeker’s current recommended API, and V1 is discontinued and redirects to V2. PagePeeker API documentation
Capture a list of URLs with Python
The example below builds a separate request for each URL, URL-encodes its parameters, checks for an HTTP error, and saves the response bytes. It is an illustrative client-side integration pattern based on PagePeeker’s documented HTTP URL format—not a PagePeeker Python SDK or a tested script. Install the dependency first with python -m pip install requests.
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"))
Replace the sample URLs and, for an account that uses an API code, set API_CODE to your server-side credential. The code makes sequential requests and writes one output file per URL. It does not implement readiness polling, retries, parallelism, or validation of the response image type.
Choose an endpoint and thumbnail size
PagePeeker documents free.pagepeeker.com for free use and api.pagepeeker.com for unbranded and paid accounts. The example uses the latter. Its V2 request format is http://{entrypoint}.pagepeeker.com/v2/thumbs.php?size={size}&code={code}&refresh={refresh}&wait={wait}&url={url}. The target URL must be URL-encoded; the example’s urlencode does that for the query parameters.
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 →#1 Best Overall
| Size code | Documented dimensions |
|---|---|
t |
90 × 68 px |
s |
120 × 90 px |
m |
200 × 150 px |
l |
400 × 300 px |
x |
480 × 360 px |
PagePeeker says premium accounts may have additional sizes. The ordinary thumbnail endpoint should not be confused with full-page capture: PagePeeker describes full-page screenshots as a Premium offering.
Protect credentials and choose filenames deliberately
- Keep the account code server-side. PagePeeker recommends the optional
codefor server-side calls and warns against placing it in client-side pages, where others could use it against the account quota. The free branded service ignores this parameter. - Use stable, unique output names. The sample numbers files to avoid overwriting them. For repeated runs, derive names from a URL hash or another collision-resistant scheme.
- Check what the selected account returns. PagePeeker documents thumbnail images and says paid and unbranded accounts can return headers such as
X-PP-Error,X-PP-Capture-Time,X-PP-Final-URL, andX-PP-Timestamp. The example only checks HTTP status; for production, inspect applicable headers and the response content type before treating bytes as an image.
Does PagePeeker have a batch API?
The cited PagePeeker V2 API documentation describes a single target url per thumbnail request, not a request containing a list. The supported pattern shown here is therefore one request per URL in a Python loop. Do not assume a batch endpoint or parameters documented by a different screenshot provider apply to PagePeeker.
Rank #2
The sample processes URLs sequentially, which is simple and makes it easy to associate each response with an output file. If you add concurrency, choose a limit appropriate to your account and workload; PagePeeker’s cited documentation does not establish a recommended Python concurrency level or a batch throughput guarantee.
Wait for a thumbnail to be ready
PagePeeker documents a separate readiness endpoint at /v2/thumbs_ready.php?size={size}&code={code}&url={url}. It returns JSON fields Error and IsReady. The documented sequence is to request generation, check readiness, then fetch the image. The API page does not specify a Python client or polling interval, so the retry interval below is an implementation choice rather than a PagePeeker requirement.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →from time import sleep
from urllib.parse import urlencode
import requests
ENTRYPOINT = "http://api.pagepeeker.com"
def wait_until_ready(url: str, size: str = "m", attempts: int = 10,
interval_seconds: float = 3.0) -> bool:
params = {"size": size, "code": API_CODE, "url": url}
endpoint = f"{ENTRYPOINT}/v2/thumbs_ready.php?{urlencode(params)}"
for attempt in range(attempts):
response = requests.get(endpoint, timeout=30)
response.raise_for_status()
data = response.json()
if data.get("Error"):
raise RuntimeError(f"PagePeeker readiness error: {data['Error']}")
if data.get("IsReady"):
return True
if attempt + 1 < attempts:
sleep(interval_seconds)
return False
This function only checks readiness; it does not itself initiate thumbnail generation or download the image. If it returns False, stop polling or handle that URL as pending rather than waiting indefinitely. Adapt error handling to the JSON your account receives.
Do readiness checks count against quota?
Yes. PagePeeker’s FAQ says an API call is counted when displaying a cached thumbnail, generating a thumbnail that is not cached, checking whether a thumbnail is ready, and using any other API exposed by the provider. Polling therefore adds calls beyond the thumbnail request. Unused monthly calls do not roll over, according to the FAQ. PagePeeker also says premium accounts exceeding five million calls per month can contact it about pay-as-you-go service. PagePeeker FAQ
Account options, caching, and capture capabilities
The following are PagePeeker’s published plan and product-page details, accessed in 2026; terms can change. Rendering-time ranges vary by account category, so they are not a universal latency promise.
| Option | Published allowance and price | Branding or link-back | Maximum listed image size | Published cache duration | Published rendering time |
|---|---|---|---|---|---|
| Free branded | No call limit listed | Branded free use | 480 × 360 | 20 days | Typically 30–60 seconds |
| Free unbranded | 100,000 calls/month listed | Link back required | 480 × 360 | 20 days | Typically 10–20 seconds |
| Basic | $5.99/month; 100,000 calls/month | Unbranded account category | Not stated on the pricing page | 7 days | Varies by account category; see PagePeeker’s current plan pages |
| Advanced | $39.99/month; 1,000,000 calls/month | Unbranded account category | Not stated on the pricing page | 5 days | Varies by account category; see PagePeeker’s current plan pages |
| Premium | Custom pricing; no call limit listed | Premium account | Additional sizes may be available | Customizable | Varies by account category; see PagePeeker’s current plan pages |
Plan figures and rendering times are PagePeeker’s published terms, not independent measurements. Confirm the current limits and account-specific behavior before choosing a plan. PagePeeker free thumbnails · PagePeeker pricing
Best Value
What the thumbnail endpoint does—and does not promise
PagePeeker’s feature page describes adjustable width and maximum height, compression, thumbnail sizes, overlay text, and capture waiting options. It identifies full-page screenshots as Premium; the basic thumbnail request shown above should not be represented as a full-page screenshot. PagePeeker full-page screenshots
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshooting the Python integration
- The request fails with a URL or query parsing problem: ensure you pass the original target URL as the
urlparameter and encode query parameters. Avoid manually concatenating a target URL containing its own&characters without encoding it. - You receive an HTTP error:
raise_for_status()surfaces non-success HTTP responses. Check the entry point, V2 path, account access, and any account-specific response details before retrying. - The response saves but is not a usable image: do not assume every successful transport response is a completed thumbnail. Where available for your account, inspect
X-PP-Errorand content type; for asynchronous generation, use the readiness endpoint and fetch the thumbnail after it is ready. - Readiness never becomes true within the chosen wait: the sample bounds polling attempts. Treat the URL as pending or failed for your workflow instead of polling forever, and remember each status check counts toward API usage.
- Your monthly allowance drains faster than expected: cached displays, thumbnail generation, readiness checks, and other exposed API calls all count according to PagePeeker’s FAQ. Reduce unnecessary polling and account for retries.
- Your API code appears in browser traffic: move requests to a backend service. PagePeeker warns that client-side exposure allows others to use the code and consume quota.
Or skip the browser setup
For an alternative that returns a screenshot through one GET request, try ScreenshotNeo. Its API can return PNG, JPEG, WebP, or PDF; it removes cookie/consent banners, newsletter popups, and chat widgets before capture, and bot checks, blank pages, timeouts, failed loads, and cache hits are not billed. It also offers an MCP server for AI agents. The free plan includes 1,000 screenshots 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 -o shot.webp
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
Frequently Asked Questions
Does PagePeeker provide a Python SDK?
The cited API documentation describes an HTTP endpoint; it does not document a Python SDK. The Python example uses the general-purpose Requests library.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Can I use PagePeeker V1 for new integrations?
PagePeeker identifies V2 as its current recommended API and says V1 is discontinued and redirects to V2.
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.

