iOS can capture a whole web page, but only from Safari's screenshot editor, and the result is a PDF. A shortcut that calls a screenshot API gives you a full-length JPEG in Photos from the share sheet of any app: Safari, Chrome, Mail, Slack or a link in Notes. This page builds that shortcut action by action, plus a second one that copies a public image link instead of saving a file. It is part of the screenshot API integrations.
What you can build
- "Save full page to Photos". Share any link, get the whole page as one tall image at phone width, ready to mark up or send.
- "Copy screenshot link". Share a link, get a public image URL on the clipboard to paste into a chat or a ticket. Nothing is saved on the phone.
- Desktop view from a phone. Swap the device for a laptop such as
macbook_airto see how a page looks on a laptop while you are away from one.
Prerequisites
- iOS or iPadOS 17 or later, or macOS 14 or later, with the Shortcuts app.
- A RenderScreenshot API key that starts with
rs_live_. Get a free key. Use a key only for this shortcut, so you can revoke it if the phone is lost.
Shortcut 1: Save full page to Photos
Create a new shortcut named Save Full Page. Open its details (the i button) and turn on Show in Share Sheet. Then add these actions in order:
- Receive input from Share Sheet. Set the types to URLs and Safari web pages. Set If there's no input to Ask For URLs, so the shortcut also works from the home screen.
- Text. Paste your
rs_live_key. Rename the output toAPI Key(tap the variable, then Rename). - Get URLs from Input with Shortcut Input. A Safari web page becomes its address here.
- Get Contents of URL. Enter
https://api.renderscreenshot.com/v1/screenshot, then tap Show More and set:- Method: POST
- Headers:
Authorization=Bearerfollowed by theAPI Keyvariable - Request Body: JSON, with the fields in the table below
- Get Dictionary Value for key
errorin Contents of URL. - If Dictionary Value has any value:
- Show Alert with Dictionary Value, then Stop This Shortcut.
- Otherwise: Save to Photo Album with Contents of URL (album: Recents).
- End If.
The JSON body, entered as fields in the action:
| Key | Type | Value |
|---|---|---|
url |
Text | the URLs variable from step 3 |
device |
Text | iphone_14 |
viewport |
Dictionary | scale (Number) = 2 |
capture |
Dictionary | mode (Text) = full_page; scroll (Dictionary) with max_height (Number) = 6000 |
output |
Dictionary | format (Text) = jpeg; quality (Number) = 85 |
block |
Dictionary | ads (Boolean) = true; cookie_banners (Boolean) = true |
This is the same request, written out, so you can test it in a terminal before you build the shortcut:
curl -X POST https://api.renderscreenshot.com/v1/screenshot \ -H "Authorization: Bearer $RS_API_KEY" \ -H "Content-Type: application/json" \ -o page.jpg \ -d '{ "url": "https://example.com", "device": "iphone_14", "viewport": { "scale": 2 }, "capture": { "mode": "full_page", "scroll": { "max_height": 6000 } }, "output": { "format": "jpeg", "quality": 85 }, "block": { "ads": true, "cookie_banners": true } }'
Why these values:
deviceis a top-level field. It sets the iPhone viewport, mobile mode and Safari user agent. Nested insideviewportit is accepted but ignored in the current API version, as the device reference explains.- Scale 2, not 3.
iphone_14renders at scale 3 by default. A 6,000-pixel page at scale 3 is 18,000 pixels tall, which is slow to open in Photos and adds little detail. An explicitviewport.scalewins over the device. - A height cap. Infinite feeds would otherwise grow to the default limit. The full-page guide covers lazy loading and the other scroll options.
- JPEG at 85. Long pages are mostly photos and gradients, where JPEG is much smaller than PNG.
Shortcut 2: Copy screenshot link
Duplicate the first shortcut and rename it Copy Screenshot Link. Change three things:
- In Get Contents of URL, add a second header:
Accept=application/json. The API then answers with JSON that holds a public CDN link, not the image (response formats). - Add
cache(Dictionary) to the body withttl(Number) =604800, so the link works for 7 days. - Replace Save to Photo Album with two Get Dictionary Value actions: key
imagefrom Contents of URL, then keyurlfrom that result. End with Copy to Clipboard and Show Notification "Link copied".
The link needs no key and expires after the TTL. The X-Cache-URL guide explains how long it lives and when to keep your own copy.
Parameter mapping
| Shortcut input | API field | Notes |
|---|---|---|
| Shared URL or Safari page | url |
Only http and https pages; a shared file has no URL |
(fixed) iphone_14 |
device |
Try ipad_pro_11 or macbook_air for other views; see mobile screenshots |
| (fixed) full page | capture.mode, capture.scroll.max_height |
Remove capture for the first screen only |
| (fixed) JPEG 85 | output.format, output.quality |
Use png for text-heavy pages |
Accept header |
response shape | Image bytes, or JSON with image.url |
Errors and retries
Do not count on Get Contents of URL to stop the shortcut on an HTTP error. The API always sends a JSON body with an error object when a request fails, so the shortcut checks for that key itself. The alert then shows the API's error object, including a code such as navigation_failed, timeout or too_many_requests and a link to its page under error codes. The shortcut does not retry. Run it again for a retryable error. A missing_credentials error means the Text action holds no key or a wrong one.
Limits and costs
- Each run is one fresh render and costs one credit. See pricing.
- The rate limit is per account and shared with every other key on the account. A shortcut is far below it, unless it shares an account with a busy production app.
- The page renders on our servers, signed out. Pages that need your login, or that only work on your home network, will not render as you see them.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The shortcut is missing from the share sheet | Show in Share Sheet is off, or the input types exclude URLs | Turn it on and add URLs and Safari web pages |
Alert shows invalid_url |
The input was text or a file, not a link | Share the page itself, not a selection |
| Photos gets a tiny image | The response was an error JSON saved as a file | Keep the If check before Save to Photo Album |
| A long wait, then a timeout alert | The page is slow or very long | Lower max_height, or remove capture for one screen |
| A cookie banner covers the top | The site's banner is not in the blocklist | Add page.hide with the banner's CSS selector to the body |
Last checked 2026-10-18. The request body follows the API spec and the device reference. The shortcut has not yet been built and run on iOS or macOS, and there is no shareable iCloud link yet.