You can process a CSV with PagePeeker by running a script that sends one request per URL to its documented V2 thumbnail endpoint and saves each response. PagePeeker’s reviewed documentation describes per-URL requests, not a native CSV import or batch-capture endpoint, so this is a client-side loop—not a built-in bulk feature.
What you need before starting
- A CSV file with a clearly named
urlcolumn containing absolute page URLs, such ashttps://example.com/. - Python 3 installed on a machine that can make HTTP requests.
- For account-associated requests, the PagePeeker account code, kept out of public client-side code. PagePeeker recommends using the code for server-side calls and warns that exposing it can let others consume your quota.
The example below uses Python’s standard library. It writes each response to a numbered file and records failures in the terminal. It is a starting point, not a live-account test; confirm the account-specific endpoint and options before relying on it for a production run.
As an Amazon Associate I earn from qualifying purchases.
Choose the thumbnail size
PagePeeker documents these standard V2 thumbnail dimensions. Premium accounts may have additional sizes.
Recommended Free Tools
| Size value | Documented dimensions | Typical consideration |
|---|---|---|
t |
90 × 68 px | Small previews |
s |
120 × 90 px | Compact lists |
m |
200 × 150 px | Larger previews |
l |
400 × 300 px | Detailed thumbnail display |
x |
480 × 360 px | Largest documented standard thumbnail |
These are thumbnail outputs, not full-page images. PagePeeker describes full-page capture as a premium-account feature, with options including custom page width and maximum height, compression, thumbnail renditions, overlay text, and wait settings. Check the full-page capture details against your required dimensions and whether you need content below the fold.
#1 Best Overall
Run a CSV capture loop in Python
PagePeeker documents the V2 request pattern as http://{entrypoint}.pagepeeker.com/v2/thumbs.php?size={size}&code={code}&refresh={refresh}&wait={wait}&url={url}. The documented entrypoints are free and api. The script builds that request with URL-encoding utilities instead of concatenating raw page URLs into the query string.
- Save your file as
urls.csv, with a header namedurl. - Save the script below as
capture_csv.py. - Run
python capture_csv.pyfrom the directory containing the CSV.
import csv
import os
import time
from pathlib import Path
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen
CSV_FILE = Path("urls.csv")
OUT_DIR = Path("screenshots")
ENTRYPOINT = "free" # Use the entrypoint appropriate for your account.
SIZE = "x" # t, s, m, l, or x; x is 480x360.
TIMEOUT_SECONDS = 60
PAUSE_SECONDS = 0.5
# Set PAGEPEEKER_CODE in your environment for account-associated requests.
# Do not put a private account code in a public webpage or shared repository.
ACCOUNT_CODE = os.environ.get("PAGEPEEKER_CODE")
OUT_DIR.mkdir(exist_ok=True)
with CSV_FILE.open(newline="", encoding="utf-8-sig") as csv_file:
reader = csv.DictReader(csv_file)
if not reader.fieldnames or "url" not in reader.fieldnames:
raise ValueError("CSV must have a header named 'url'")
for row_number, row in enumerate(reader, start=1):
page_url = (row.get("url") or "").strip()
if not page_url.startswith(("http://", "https://")):
print(f"Row {row_number}: skipped; expected an absolute http(s) URL")
continue
params = {"size": SIZE, "url": page_url}
if ACCOUNT_CODE:
params["code"] = ACCOUNT_CODE
request_url = (
f"http://{ENTRYPOINT}.pagepeeker.com/v2/thumbs.php?"
+ urlencode(params)
)
try:
request = Request(request_url, headers={"User-Agent": "CSV screenshot script"})
with urlopen(request, timeout=TIMEOUT_SECONDS) as response:
content_type = response.headers.get("Content-Type", "")
image_bytes = response.read()
if response.status != 200 or not content_type.lower().startswith("image/"):
print(
f"Row {row_number}: unexpected response "
f"(status {response.status}, content-type {content_type!r})"
)
continue
output_path = OUT_DIR / f"capture-{row_number:05}.img"
output_path.write_bytes(image_bytes)
print(f"Row {row_number}: saved {output_path}")
except HTTPError as error:
print(f"Row {row_number}: HTTP error {error.code}: {error.reason}")
except (URLError, TimeoutError) as error:
print(f"Row {row_number}: request failed: {error}")
time.sleep(PAUSE_SECONDS)
The .img extension is intentional: the example validates that the response is an image but does not assume its precise image format from the endpoint. If your downstream system requires a particular extension or format, verify the actual response and name files accordingly. For easier retry and auditing, a production version should write a results CSV with the original URL, status, response metadata, and saved filename.
Account for readiness, cache, and quota
A successful HTTP response does not by itself establish that a newly requested capture is ready or that the body is a final screenshot. PagePeeker documents a readiness API and a premium wait option. Its V2 documentation also describes response headers for capture method, capture duration, final redirected URL, capture timestamp, and error status for paid and unbranded accounts. Inspect available headers and the readiness status for your account before accepting a row as complete; preserve unresolved rows for another attempt rather than silently treating every response as a usable image.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →Rank #2
- Intuitive interface of a conventional FTP client
- Easy and Reliable FTP Site Maintenance.
- FTP Automation and Synchronization
Budget calls before running a large file. PagePeeker’s FAQ says that displaying a cached thumbnail, generating an uncached thumbnail, checking readiness, and any exposed API call each add one API call. Unused monthly quota does not roll over. PagePeeker’s pricing page, accessed in 2026, listed Basic at $5.99 per month for 100,000 API calls and Advanced at $39.99 per month for 1,000,000 API calls; prices and quotas can change, so check current terms before starting a large job.
The docs reviewed do not state a maximum batch size or API request-rate limit. This script makes requests sequentially and inserts a short pause, but that pause is not a documented safe rate. For large jobs, avoid assuming unlimited throughput: check the current account terms or contact PagePeeker, and keep a retry queue for timeouts or unresolved captures.
Troubleshoot common problems
The script says the CSV needs a url header
Rename the column header to exactly url, or change the script to match your existing header. The CSV reader treats the header as a key.
Rank #3
A row is skipped as an invalid URL
Provide an absolute URL beginning with http:// or https://. A hostname alone, a blank cell, or a relative path is not enough for this script’s check.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
The request times out or returns an HTTP error
Check that the target URL is reachable and correctly encoded by the script, then retry the failed row. A timeout does not tell you whether PagePeeker has completed a capture. Use the documented readiness endpoint or, if available to your account, the premium wait parameter to handle capture readiness.
The response is not identified as an image
The script deliberately refuses to save non-image responses as screenshots. Examine the status, content type, and PagePeeker response headers; a request may need a readiness check or may have returned an error rather than a finished thumbnail. Keep the row in a retry or review log.
Rank #4
Usage is higher than the number of CSV rows
Requests may involve more than the initial thumbnail call: PagePeeker’s FAQ counts readiness checks and exposed API calls as calls too, and a cached display or uncached generation each adds a call under its stated accounting. Estimate those steps as well as the URL count before a run.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.When PagePeeker is not the right workflow
If you need local browser control and a different input format, shot-scraper’s multi workflow uses a YAML list of URLs and output filenames. It is a separate local tool, not a PagePeeker batch feature; evaluate setup, output needs, authentication or interactions, storage, and cost for your own workload.
PC 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 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePagePeeker says its robot attempts to capture a site or page when requested and tries to fetch a page only once every 5–7 days. That is the vendor’s stated cadence, not a universal refresh guarantee. Site owners who want to block the PagePeeker robot can add this to robots.txt:
Best Value
User-agent: PagePeeker
Disallow: /
Or skip the browser setup
For a single request without building a CSV loop, ScreenshotNeo accepts a URL and returns a screenshot or PDF. See the ScreenshotNeo API documentation for its request options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; those cleanup steps can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers indicate the page verdict and billing status. Its MCP server lets AI agents use screenshot tools. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. ScreenshotNeo is another service, not a PagePeeker feature.
Sign up for ScreenshotNeo’s free plan to try 1,000 screenshots a month with no card.
Frequently Asked Questions
Does PagePeeker accept a CSV directly?
The reviewed V2 documentation describes requests for individual URLs; it does not document a CSV upload or native batch endpoint.
Can I capture content below the fold with the standard thumbnail endpoint?
The standard V2 sizes are thumbnails. PagePeeker describes full-page capture as a premium feature with separate customization options.
Can I change the delay between requests to a guaranteed safe rate?
No rate limit is stated in the reviewed documentation. Ask PagePeeker about current account terms before scaling request volume.
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.

