Skip to content

Save Screenshots to S3 Automatically

Wire the S3 or AWS S3 app to your account, craft path templates, pass apps= on each API call, and combine batches with automatic object storage delivery.

Why push to S3?

Object storage is the durable sink for compliance archives, ML datasets, and customer deliverables. Instead of downloading every PNG from ScreenshotCenter yourself, configure an S3-compatible app so each finished screenshot lands in your bucket with a predictable key.

Read the integration pages for generic S3, AWS S3, and the S3 help doc. For historical context, see Save automated screenshots to S3.

Credentials and bucket policy

Create an IAM user or role with s3:PutObject (and optional s3:PutObjectAcl if you set canned ACLs). Scope the policy to one prefix. Store access keys in the ScreenshotCenter app configuration — rotate them on the same schedule as your other CI secrets.

Path templates

Templates support tokens such as {domain}, {yyyy}, {mm}, {dd}, and {id}. Example: archives/{domain}/{yyyy}/{mm}/{dd}/{id}.png keeps millions of objects sharded by day.

Per-request API call

After the app is verified, pass its app_id via the apps parameter. You can also override the template for a single job:

curl -sS "https://api.screenshotcenter.com/api/v1/screenshot/create?key=${SCREENSHOTCENTER_API_KEY}&url=https://example.com&apps%5Bprod-screenshots%5D=catalog%2F{domain}%2F{id}.png"

URL-encoded brackets (apps%5Bprod-screenshots%5D) keep shells from mangling the query string.

Batches + S3

Upload a CSV through /batch/create with the same apps mapping per row (or rely on the default template). When the batch completes, every successful row triggers the configured storage apps — ideal for nightly sitemap captures.

Verification checklist

CheckReason
Bucket blocks public ACLsPrevent accidental world-readable compliance data.
Lifecycle rulesMove cold screenshots to Glacier after N days.
App test buttonValidates credentials before production traffic.

Fallback download

Keep using /screenshot/thumbnail as a safety net until you confirm the app status reads finished inside the API response — the apps array on /screenshot/info exposes per-integration states.