Make (formerly Integromat) has no screenshot module, but its HTTP → Make a request module can call the RenderScreenshot API and receive the image as a file. A second module puts that file into Google Drive, with no public link and no expiry to manage. This page gives you a scenario blueprint to import, the exact mapping from the HTTP module's binary output to Drive, and an error route for pages that fail. For the version that returns an image link instead of a file, see the automation overview; every integration is on the integrations hub.
Status: written 2026-10-18 from the API's documented request and response shapes. The blueprint below has not been imported into a Make account yet, so there are no Make UI screenshots, and the module versions in it may differ from what your Make account shows. The API side, the query parameters, header and responses, matches the GET endpoint reference. If an import fails, build the two modules by hand from the mapping table; the settings are the same.
What you can build
- A weekly folder of competitor pages. A scheduled scenario captures five pricing pages each Monday and files them under a dated folder name.
- Proof for a content calendar. When a row in Google Sheets is marked as published, the scenario captures the live URL and stores the image next to the brief.
- Client reports. An agency scenario captures each client's home page at month end and saves it to the client's shared Drive folder.
Prerequisites
- A Make account and a Google Drive connection in Make.
- A RenderScreenshot API key that starts with
rs_live_. Create a free account to get one.
Import the blueprint
In a new scenario, open the ⋯ menu at the bottom of the editor, choose Import Blueprint, and select a file with this JSON. Then open the HTTP module, replace rs_live_REPLACE_ME with your key, and open the Drive module to pick your connection and folder.
{ "name": "RenderScreenshot to Google Drive", "flow": [ { "id": 1, "module": "http:ActionSendData", "version": 3, "parameters": { "handleErrors": true, "useNewZLibDeCompress": true }, "mapper": { "url": "https://api.renderscreenshot.com/v1/screenshot", "serializeUrl": false, "method": "get", "headers": [{ "name": "Authorization", "value": "Bearer rs_live_REPLACE_ME" }], "qs": [ { "name": "url", "value": "https://example.com" }, { "name": "preset", "value": "desktop_hd" }, { "name": "format", "value": "jpeg" }, { "name": "quality", "value": "80" }, { "name": "block_ads", "value": "true" }, { "name": "block_cookies", "value": "true" }, { "name": "cache_available", "value": "true" } ], "bodyType": "", "parseResponse": false, "timeout": "90", "shareCookies": false, "rejectUnauthorized": true, "followRedirect": true, "useQuerystring": false, "gzip": true, "useMtls": false }, "metadata": { "designer": { "x": 0, "y": 0 } } }, { "id": 2, "module": "google-drive:uploadAFile", "version": 4, "parameters": {}, "mapper": { "folderId": "/", "destination": "drive", "filename": "{{formatDate(now; \"YYYY-MM-DD\")}} {{1.headers.`x-request-id`}}.jpg", "data": "{{1.data}}", "convert": false }, "metadata": { "designer": { "x": 300, "y": 0 } } } ], "metadata": { "version": 1, "scenario": { "roundtrips": 1, "maxErrors": 3, "autoCommit": true, "sequential": false, "dlq": true }, "designer": { "orphans": [] } } }
The dlq setting is Allow storing of incomplete executions in the scenario settings. It must be on for the retry route below to work.
How the two modules connect
The HTTP module returns three things: Status code, Headers and Data. With Parse response off, Data is the image itself, as a binary buffer. The Google Drive Upload a File module needs two values for its file: a File name and Data. Map them like this:
| Drive field | Mapped value | Note |
|---|---|---|
| File name | {{formatDate(now; "YYYY-MM-DD")}} {{1.headers.`x-request-id`}}.jpg |
The extension must match format |
| Data | {{1.data}} |
The binary output of module 1 |
| Folder | your folder | Pick it from the list after import |
| Convert | No | Drive would try to turn an image into a Doc |
The response headers give you more to name files with. x-screenshot-title holds the page's title, percent-encoded when it has non-ASCII characters, so wrap it in Make's decodeURL() function. x-credits-remaining is useful in a Slack alert when your balance runs low.
Query string mapping
Each Query String item is a flat name from the GET endpoint:
| Name | Value | Effect |
|---|---|---|
url |
map from your trigger | Must start with http:// or https:// |
preset |
desktop_hd |
1920×1080 viewport, see presets |
format, quality |
jpeg, 80 |
Smaller files than PNG for Drive |
block_ads, block_cookies |
true |
Removes ads and cookie banners. Only the word true turns them on. |
cache_available |
true |
A rerun gets an identical render back for 0 credits |
full_page |
true (optional) |
The whole scrollable page instead of one screen |
Put the key in the Headers list, not in the query string. Make keeps the full request in the execution history, and a key in the URL is visible to everyone who can open the scenario's history.
Errors and retries in Make
Evaluate all states as errors (handleErrors) is on in the blueprint. Without it, a 401 or 422 response counts as success, and Drive receives the error JSON as a file named .jpg.
To retry, right-click the HTTP module, choose Add error handler, and pick Break. Turn on automatic completion, then set the number of attempts and the interval. Break retries every error, including a 400 for a bad URL that will never pass, so stop bad input before it reaches the API: put a filter between your trigger and the HTTP module with the condition url starts with https://.
| Response | Cause | What to do in Make |
|---|---|---|
400 invalid_url |
The source sent acme.com |
Prefix https:// in a Set variable step |
401 missing_credentials |
Header value without Bearer |
Fix the header; do not retry |
403 insufficient_credits |
Monthly credits used | Pause the scenario until the reset |
422 timeout |
The page did not finish loading | Let Break retry once; add delay if it repeats |
429 too_many_requests |
The account's one-minute window is full | A Break interval of one minute clears it |
The full list is on the error codes page.
Limits and costs
- Credits. One credit per fresh render. Failed renders and cache hits cost 0. The pricing page lists the credits on each plan.
- Make usage. Each module run counts toward your Make plan, so one screenshot saved to Drive is two module runs.
- Rate limit. Requests per minute are counted per account across all keys. An iterator over a long list can reach the limit on the free plan; add a Sleep module inside the loop. See rate limits.
- File size. Make limits the size of files a scenario can handle, by plan. JPEG or WebP keeps long full-page captures smaller.
Troubleshooting
- The Drive file will not open. Parse response is on, or an
Accept: application/jsonheader was added. The file then holds text. - Every run uses a credit for the same page. Add
cache_available=true. - The capture shows a consent wall. Keep
block_cookies=trueand read blocking cookie banners for pages that need a click. - Breaks pile up in incomplete executions. The same URL fails every time. Open one, read the JSON in the output bundle, and fix the input.
The same request runs in n8n with an S3 upload; see the n8n workflow. Zapier users can start from the Zapier setup. In Microsoft 365, the Power Automate flow saves the file to OneDrive.