Screenshots & PDFs in n8n, Make and Zapier

Automation tools have no built-in "screenshot this page" step, but they can all make an HTTP request or fetch a file from a URL. That is all you need: one request to the Shotmint API returns a PNG, JPEG or PDF, and the next step saves it to Google Drive, posts it to Slack or attaches it to an Airtable record. Below are the exact settings for each tool. Every request shown here was run against the live API.

The request, in one line

curl -H "X-API-Key: YOUR_KEY" "https://shotmint.creasework.com/v1/screenshot?url=https://example.com" -o shot.png

You get the image bytes back (1280×800 by default). Add full_page=true for the whole page (up to 16,000px tall), format=jpeg for smaller files, width/height for the viewport, block_ads=true to drop common ads and cookie banners, or cache_ttl=86400 so an identical request within a day is served free from cache. A failed render (dead site, timeout) returns a JSON error instead of an image and costs nothing. Get a key with 100 free renders at /pricing; no signup.

n8n: HTTP Request node

Add an HTTP Request node after whatever produces your URLs (a Schedule trigger, a Google Sheets row, a webhook) and set:

FieldValue
MethodGET
URLhttps://shotmint.creasework.com/v1/screenshot
AuthenticationGeneric Credential Type → Header Auth
Name X-API-Key, Value: your key
Send Query Parameterson: url = {{ $json.url }}
add full_page = true etc. as more rows
Options → ResponseResponse Format: File
Put Output in Field: data

The node now outputs a binary property called data. Point the next node at it: Google Drive "Upload", Slack "Send message" with a file, "Send Email" attachments, or "Read/Write Files from Disk". The Header Auth credential keeps the key out of the workflow JSON when you share it. Shortcut: the HTTP Request node has an Import cURL button; paste the curl line above and it fills in the method, URL and header for you (then switch the response format to File).

For a PDF from HTML (an invoice or report built from earlier nodes), use Method POST, URL https://shotmint.creasework.com/v1/pdf, turn on Send Body with Body Content Type JSON, and send:

{
  "html": "<h1>Weekly report</h1><p>Signups: {{ $json.signups }}</p>",
  "format": "A4",
  "margin": "15mm"
}

Same Response Format: File. Use "url" instead of "html" to print an existing page to PDF.

Make: HTTP module

Add the HTTP → Make a request module:

FieldValue
URLhttps://shotmint.creasework.com/v1/screenshot
MethodGET
HeadersX-API-Key: your key
Query Stringurl: map the URL from an earlier module
plus full_page: true if you want the whole page
Parse responseNo

The module's Data output is the image. In the next module (Google Drive "Upload a file", Dropbox, Airtable, email), choose to map the file, set the file name yourself (for example {{formatDate(now; "YYYY-MM-DD")}}-shot.png) and map Data into the file data field. For a PDF, set Method POST, URL https://shotmint.creasework.com/v1/pdf, Body type Raw, Content type JSON, and the same JSON body as the n8n example. Make passes query string values through URL encoding for you, so target URLs with their own ? and & work as is.

Zapier: a file URL

Zapier's Webhooks step is built for JSON, not image bytes. The simpler route is that the API also accepts the key as a query parameter, so a screenshot is just a URL, and any Zapier field that takes a File (Google Drive "Upload File", Slack "Send Channel Message" attachments, Gmail attachments, Airtable attachment fields, Dropbox) will download it for you. Put this in the File field, inserting your trigger's URL where it says URL_FROM_TRIGGER:

https://shotmint.creasework.com/v1/screenshot?access_key=YOUR_KEY&cache_ttl=86400&url=URL_FROM_TRIGGER

Keep url= last, and if your URLs can contain ? or &, add a Formatter → Text → URL Encode step first and insert its output instead. Set the file name field to something like screenshot.png. cache_ttl=86400 matters here: if Zapier fetches the same URL twice (a replay or a second action), the repeat comes from cache and doesn't use a credit. A key inside a URL is less private than a header, so use it only in your own Zaps, not in anything shared or public, and buy credits on the same key when it runs low (it never changes).

Things that trip people up

For scripted runs over a big list, see bulk website screenshots. To build thumbnails for a directory site, see website thumbnails. Every parameter is in the API reference.

Try it with 100 free renders

No signup, no card. Get a key in one click, then buy credits only if you need more (from €5 for 2,000, never expire).

Get a free API key Full API reference