Zapier
Connect ScreenshotFreeAPI to 6,000+ apps via Zapier. Use the native REST Hook trigger to receive screenshot completions, or use the HTTP action to capture inside any Zap.
What you can build
- Screenshot every new row URL in Google Sheets → save PNG to Google Drive
- Capture a webpage when a form is submitted → attach to CRM contact
- Monitor competitor pages on a schedule → post screenshot to Slack
- Take app store screenshots when Airtable gets a new record → attach to the record
Before you begin
You need a ScreenshotFreeAPI account, your API key (for capture requests), and your dashboard session token (for registering the webhook subscription below — these are two different credentials). You also need a Zapier account — the free plan works for this integration.
Option A: REST Hook trigger (recommended)
ScreenshotFreeAPI supports Zapier's REST Hooks pattern. Zapier registers a webhook URL with the API; the API pushes the completion event to Zapier when the job finishes. No polling loop needed.
Setup steps in Zapier:
- Create a new Zap → Trigger: "Webhooks by Zapier" → "Catch Hook"
- Copy the Zapier webhook URL (e.g. https://hooks.zapier.com/hooks/catch/…)
- Register it with ScreenshotFreeAPI using the curl command below
- Submit a test screenshot job — Zapier shows the incoming payload
- Map jobId and resultUrl to your next step — fetch resultUrl with your API key to get the screenshot
1# This call is authenticated with your DASHBOARD SESSION TOKEN (JWT from
2# POST /auth/token after logging in) — NOT your API key. The API key is only
3# used for /screenshots/* and /jobs/* capture endpoints.
4curl -X POST https://api.screenshotfreeapi.com/integrations/zapier/subscribe \
5 -H "Authorization: Bearer $SCREENSHOTFREEAPI_SESSION_TOKEN" \
6 -H "Content-Type: application/json" \
7 -d '{
8 "triggerEvent": "job.completed",
9 "targetUrl": "https://hooks.zapier.com/hooks/catch/123456/abcdef/",
10 "label": "Zapier"
11 }'
12
13# Response — save signingSecret, it's shown once and needed to verify deliveries
14{
15 "id": "sub_abc123",
16 "triggerEvent": "job.completed",
17 "targetUrl": "https://hooks.zapier.com/...",
18 "active": true,
19 "signingSecret": "whsec_..."
20}The payload Zapier receives when a job completes:
1// Zapier receives this payload when a job completes (flat shape, no nesting):
2{
3 "event": "job.completed",
4 "jobId": "job_web_7a91bcd3",
5 "type": "WEB",
6 "status": "completed",
7 "resultUrl": "/jobs/job_web_7a91bcd3/result",
8 "timestamp": "2026-06-03T09:21:04Z"
9}
10
11// resultUrl is a RELATIVE path — fetch it against the API base URL with your
12// API key (not the session token) to get the actual screenshot:
13// GET https://api.screenshotfreeapi.com/jobs/job_web_7a91bcd3/result
14// Authorization: Bearer <your sfa_... API key>
15//
16// Every delivery includes an X-ScreenshotFree-Signature header:
17// t=<unix_ts>,v1=<hex_hmac_sha256 of "{timestamp}.{rawBody}" using your signingSecret>
18// Verify it before trusting the payload — see the SDK pages for verification code.Option B: Submit via HTTP action
In your Zap, add a Webhooks by Zapier action set to POST, URL https://api.screenshotfreeapi.com/screenshots/web, with header Authorization: Bearer YOUR_KEY and JSON body. The response includes a jobId you can use in subsequent steps or store for later lookup.
jobId immediately — not the screenshot URL. Use Option A (webhook trigger) to receive the result without polling.