Integrate SnapAPI into any Make scenario using the built-in HTTP → Make a request module. Capture screenshots, generate PDFs, and extract content without writing code. Setup takes under 5 minutes.
SnapAPI does not currently have a listed Make app. Instead, use Make's free built-in HTTP module to POST directly to the SnapAPI REST API. This guide explains every configuration step.
Every Make scenario that calls SnapAPI uses the same 3-module pattern:
api.snapapi.pics/v1/screenshot and parses the JSON responseFor active scenarios that run frequently, consider upgrading to Starter ($19/month, 5,000 requests) or Pro ($79/month, 50,000 requests). Check pricing for current plans.
Log in to make.com. Click Create a new scenario. Give it a name. You will see an empty canvas with a large + button in the center.
Search for your trigger app, connect your account, and configure it. Run a test to ensure sample data flows through. You need a URL field to map to SnapAPI.
| Trigger | Use case | URL variable |
|---|---|---|
| Airtable — Watch Records | Screenshot URLs in a base | {{1.Website}} |
| Google Sheets — Watch Rows | Screenshot rows as added | {{1.B}} |
| RSS — Watch Items | Screenshot article pages | {{1.url}} |
| Webhooks — Custom Webhook | On-demand via HTTP call | {{1.url}} |
| Notion — Watch Database Items | Screenshot page URLs | {{1.properties.URL.url}} |
| Schedule (interval) | Monitor site on a timer | Hardcode URL in HTTP module |
Click the + button after your trigger. Search for HTTP. Select the HTTP built-in app. Choose the action Make a request. No connection is required — it works immediately.
SnapAPI uses API key authentication via a custom header (X-Api-Key). The "Make a request" variant lets you set any custom header. The "Basic Auth" variant is for username/password authentication and will not work.
Click the HTTP module to open its configuration. Use the values below. Use Make's variable picker to insert {{1.url}} (or your trigger's URL field) inside the request body.
Full JSON request body to paste into the Request content field:
{
"url": "{{1.url}}",
"format": "png",
"width": 1280,
"height": 800,
"fullPage": false,
"blockAds": true,
"blockCookieBanners": true,
"delay": 0,
"responseType": "url"
}
Without it, SnapAPI returns raw binary image bytes. Make cannot pass binary data to most downstream modules. With "responseType": "url", you receive a JSON object with a hosted URL that is accessible as {{2.data.url}} in subsequent modules.
Click Run once. If successful, the HTTP module shows a green badge. Click it to inspect the response. Add downstream modules and use {{2.data.url}} wherever a URL or file is needed.
Available response variables (module number 2 assumed):
{{2.data.url}} — hosted screenshot URL (valid 24 hours)
{{2.data.width}} — actual rendered width in pixels
{{2.data.height}} — actual rendered height in pixels
{{2.data.format}} — output format: png, jpeg, webp, or pdf
{{2.data.cached}} — true if result came from 10-minute cache
{{2.status}} — HTTP status code (200 = success)
{
"url": "{{1.url}}",
"format": "pdf",
"fullPage": true,
"pdfOptions": {
"pageSize": "a4",
"printBackground": true,
"marginTop": "1.5cm",
"marginBottom": "1.5cm",
"marginLeft": "2cm",
"marginRight": "2cm"
},
"responseType": "url"
}
Change the URL to the Extract endpoint and use {{2.data.markdown}} as input to OpenAI or Claude modules:
// HTTP module URL: https://api.snapapi.pics/v1/extract // Request content: { "url": "{{1.url}}", "format": "markdown" } // Response variables: {{2.data.markdown}} — full page as Markdown {{2.data.title}} — page title tag {{2.data.wordCount}} — approximate word count
// HTTP module URL: https://api.snapapi.pics/v1/scrape // Request content: { "url": "{{1.url}}", "type": "text", "waitMs": 1000, "blockResources": true } // type options: "text", "html", "links", "json"
| Trigger app | URL variable syntax |
|---|---|
| Google Sheets (column B) | {{1.B}} |
| Airtable (field "Website") | {{1.Website}} |
| RSS (item URL) | {{1.url}} |
| Webhook (body.url) | {{1.url}} |
| Notion (URL property) | {{1.properties.URL.url}} |
Click inside any field and click the variable icon (or type {) to browse all available fields from previous modules. This ensures the exact variable path and prevents typos.
Trigger: Airtable Watch Records (Status = Pending). HTTP: SnapAPI screenshot. Google Drive: Upload. Airtable: Update record with Drive URL + set Status = Done.
Trigger: RSS Watch. HTTP: SnapAPI Extract (markdown). OpenAI: Summarize in 3 sentences. Notion: Append with title, summary, source URL, and timestamp.
Trigger: WooCommerce New Order. Build order URL. HTTP: SnapAPI PDF (A4, printBackground). Gmail: Send PDF URL as download link to customer.
Trigger: Schedule (daily 8am). Iterator: 5 competitor URLs. HTTP: SnapAPI full-page screenshot. Slack: Post all URLs to #intel with timestamps.
Trigger: Shopify New Product. Build product page URL. HTTP: SnapAPI 1200x630 screenshot. AWS S3: Upload. Shopify: Update product metafield with S3 URL.
Trigger: Typeform New Response. HTTP: SnapAPI screenshot. HTTP 2: SnapAPI Extract. Dropbox: Create folder with submission ID. Upload both files.
The header name must be exactly X-Api-Key (capital X, capital A, capital K). Check for trailing spaces in the header value. Confirm your API key is active on the dashboard.
https://width must not be quoted stringsMake sure Parse response is set to Yes. Without this, the HTTP module returns raw bytes and the .data variables are not populated.
Add a Flow Control → Sleep module (1000ms) before the HTTP module to stay within the 60 requests/minute rate limit. For high-volume scenarios, upgrade your plan.
Add "delay": 2000 and "waitUntil": "networkidle" to the JSON body. This waits for JavaScript to finish executing before capturing.