Add screenshot capture, PDF generation, and content extraction to any Zapier workflow in under 5 minutes — no native Zapier app needed. Use "Webhooks by Zapier" to call the SnapAPI REST API directly.
SnapAPI does not currently have a listed Zapier app. Instead, use the free Webhooks by Zapier action (available on all plans) to make HTTP requests to SnapAPI. This guide explains exactly how.
Every Zap that calls SnapAPI follows the same pattern:
SnapAPI's free plan includes 200 requests per month. For active Zaps, consider the Starter plan ($19/month for 5,000 requests). Rate limits apply: 60 requests/minute on free, 300/minute on paid plans.
Log in to zapier.com. Click the + Create Zap button at the top left. Give your Zap a descriptive name like "Screenshot new Google Sheets rows".
Click the Trigger box and search for your trigger app. Common examples:
| Trigger | Use case | URL source |
|---|---|---|
| Google Sheets — New Row | Screenshot URLs from a spreadsheet | A column containing URLs |
| Typeform — New Entry | Screenshot submitted URLs | A "website" field |
| Schedule by Zapier | Monitor a site daily | Hardcoded URL in the action |
| Webhooks by Zapier — Catch Hook | Screenshot on-demand via webhook | Payload url field |
| Airtable — New Record | Screenshot URLs in a base | A URL field |
| Notion — New Database Item | Screenshot page URLs | A URL property |
Connect your trigger account, configure it, and test it to get sample data. Zapier will show you what fields are available — you will map these to the SnapAPI request body in Step 4.
Click the + button to add an action. Search for "Webhooks" and select Webhooks by Zapier. Choose the event Custom Request. This lets you make any HTTP request — POST, GET, etc.
The "Custom Request" event lets you set the Content-Type header and send a JSON body, which is required by SnapAPI. The simpler "POST" event sends form-encoded data, which will not work.
Zapier will show a form with Method, URL, Headers, and Data. Copy the values from the table below.
| Zapier Field | Value to Enter |
|---|---|
| Method | POST |
| URL | https://api.snapapi.pics/v1/screenshot |
| Headers — Name | X-Api-Key |
| Headers — Value | YOUR_API_KEY (from dashboard) |
| Headers — Name 2 | Content-Type |
| Headers — Value 2 | application/json |
| Data | JSON body (see below) |
| Unflatten | yes |
In the Data field, enter the JSON body. Use Zapier's variable syntax {{step.field}} to map fields from your trigger. Replace {{1.url}} with the actual field from your trigger step:
{
"url": "{{1.url}}",
"format": "png",
"width": 1280,
"height": 800,
"fullPage": false,
"responseType": "url"
}
responseType: "url" in Zapier.
Without it, SnapAPI returns raw binary image data, which Zapier cannot pass to downstream steps easily. With "responseType": "url", you receive a JSON response containing a hosted URL — easy to map to email, Drive, Slack, etc.
| Parameter | Type | Default | Description |
|---|---|---|---|
| url | string | required | Full URL to screenshot (must include https://) |
| format | string | "png" | Output format: png, jpeg, webp, pdf |
| width | integer | 1280 | Viewport width in pixels (100–3840) |
| height | integer | 800 | Viewport height in pixels (100–2160) |
| fullPage | boolean | false | Capture the full scrollable page |
| delay | integer | 0 | Wait N milliseconds after load (0–30000) |
| blockAds | boolean | false | Block ads and trackers for cleaner screenshots |
| blockCookieBanners | boolean | false | Hide cookie consent popups |
| responseType | string | "binary" | Use "url" to get a hosted URL instead of binary |
| cache | boolean | true | Return cached result if available (10-minute TTL) |
Click Test Step in Zapier. If successful, you will see a response with a url field. Copy the field name to map it in the next action.
The SnapAPI response (with responseType: "url") looks like this:
{ "url": "https://cdn.snapapi.pics/screenshots/xk92mf.png", "width": 1280, "height": 800, "format": "png", "cached": false, "credits": 1 }
Now add a third action to your Zap. In any field that accepts a URL, click inside and select the Webhooks step, then url from the available fields. Examples:
url field. Zapier will download the image and upload it to Drive.Change the endpoint URL and body to generate PDF files instead of screenshots:
// URL field: https://api.snapapi.pics/v1/screenshot // Body: { "url": "{{1.url}}", "format": "pdf", "fullPage": true, "pdfOptions": { "pageSize": "a4", "printBackground": true, "marginTop": "1cm", "marginBottom": "1cm" }, "responseType": "url" }
Use SnapAPI's Extract endpoint to turn any web page into clean Markdown, then feed it to OpenAI or another AI step in your Zap:
// URL field: https://api.snapapi.pics/v1/extract // Body: { "url": "{{1.url}}", "format": "markdown" } // Response: { "markdown": "# Article Title\n\nIntroductory paragraph...", "title": "Article Title", "wordCount": 842 }
Map the markdown field from the SnapAPI response as input to an OpenAI — Send Prompt or ChatGPT Zap action for summarization, classification, or data extraction.
Trigger: New row in Google Sheets (column B = URL). Action: Webhooks → POST to SnapAPI screenshot. Action: Google Drive upload with dated filename.
Trigger: Stripe new payment. Action: POST to SnapAPI PDF with invoice URL built from payment metadata. Action: Gmail send with PDF URL as attachment link.
Trigger: Schedule daily at 9am. Action: POST to SnapAPI with your site URL. Action: Slack message with screenshot URL. Action: Google Sheets append with timestamp.
Trigger: RSS new item. Action: POST to SnapAPI Extract (markdown). Action: OpenAI — summarize markdown. Action: Notion append to database with summary + source URL.
Trigger: Typeform new entry with "website" field. Action: POST to SnapAPI full-page screenshot. Action: Dropbox upload. Action: Typeform response update with Drive link.
Trigger: HubSpot new contact with website field. Action: SnapAPI screenshot of website. Action: HubSpot update contact with screenshot URL in custom field.
Your API key is missing or incorrect. Double-check:
X-Api-Key (not Authorization, not api-key).The request body has a validation error. Common causes:
https:// prefix.Content-Type: application/json in headers."width": "1280" instead of "width": 1280).You have exceeded your plan's rate limit. Add a Zapier Delay for step of 1–2 seconds between requests, or upgrade to a paid plan for higher limits.
Make sure you are using the Custom Request event, not the simpler "POST" event. The response from Custom Request is parsed as JSON, making the url field accessible as a Zapier variable.
If a page uses heavy JavaScript and the screenshot looks incomplete, add "delay": 2000 to the request body. This waits 2 seconds after the page load event before taking the screenshot.
The pattern for Make.com is identical — use the HTTP → Make a request module instead of Webhooks by Zapier. The full Make.com guide is available at:
Read the Make.com Guide