Power Automate Website Screenshots to OneDrive

Capture website screenshots in Power Automate with the HTTP action and save the PNG to OneDrive or SharePoint: action JSON, file names and retry policy.

By Simon Chiu · Updated

Power Automate (called Microsoft Flow until 2019) cloud flows can move files between Microsoft 365 services, but they cannot open a web page and capture it. The HTTP action can call an API that does, and its response body is the PNG itself, so the next action can write it straight to OneDrive or a SharePoint document library. No base64 conversion and no Azure Function are needed. This page builds that flow: a manual trigger with a URL input, one HTTP action, and a Create file action, plus a retry branch for pages that time out. It is part of the integrations hub; for Zapier, Make and n8n see the automation overview.

Last tested: 2026-10-18, request only. We sent the exact GET request that the HTTP action below builds (same query parameters and Authorization header) to a local stub of our API and checked the binary PNG response and the JSON error for a timeout. We did not run the flow in Power Automate, so the action JSON, expressions and retry behavior on this page are not yet verified in the product, and there are no Power Automate screenshots.

What you can build

  • Evidence for compliance. A weekly scheduled flow captures your published terms and privacy pages and saves dated PNG files to a SharePoint library with retention labels. The compliance archiving use case covers why dated captures matter.
  • Screenshots from a Microsoft Form. A form asks for a website. The flow captures it and saves the file to a OneDrive folder that the team shares.

Prerequisites

  • A Power Automate license that includes premium connectors. The HTTP action is premium.
  • OneDrive for Business or a SharePoint site where the flow can create files.
  • A RenderScreenshot key that starts with rs_live_. Create a free account to get one.

Step by step

  1. Create an Instant cloud flow with the trigger Manually trigger a flow. Add a Text input named Page URL. Power Automate stores the first text input as text in the trigger body.
  2. Add the HTTP action. Set Method to GET and URI to https://api.renderscreenshot.com/v1/screenshot.
  3. Add the Queries from the mapping table below. Map url to the Page URL input.
  4. Add one Header: Authorization with the value Bearer rs_live_....
  5. Open the HTTP action's Settings and turn on Secure inputs. The run history then hides the header, so people who can see runs cannot read your key.
  6. Add OneDrive for Business → Create file (or SharePoint → Create file). Set the folder, set File Name to the expression below, and set File Content to the HTTP action's Body.
  7. Save, run the flow with https://example.com, and open the file in OneDrive.

The HTTP action in code view

You can compare your action with this definition in the action's Peek code view:

{
  "type": "Http",
  "inputs": {
    "method": "GET",
    "uri": "https://api.renderscreenshot.com/v1/screenshot",
    "queries": {
      "url": "@{triggerBody()?['text']}",
      "preset": "desktop_hd",
      "format": "png",
      "block_ads": "true",
      "block_cookies": "true",
      "cache_available": "true"
    },
    "headers": {
      "Authorization": "Bearer rs_live_..."
    },
    "retryPolicy": {
      "type": "exponential",
      "count": 3,
      "interval": "PT10S"
    }
  },
  "runAfter": {}
}

The file name

Use this expression in File Name so every capture gets a unique, sortable name such as 2026-10-18-0930-example.com.png:

concat(formatDateTime(utcNow(), 'yyyy-MM-dd-HHmm'), '-', uriHost(triggerBody()?['text']), '.png')

uriHost keeps only the host name, so the file name never contains slashes or query strings from the URL. If you change format to jpeg or webp, change the extension too.

Why the body goes straight into Create file

Without an Accept: application/json header, the API answers with the image bytes and Content-Type: image/png. Power Automate keeps a binary body as a file content object, and Create file writes it as is. If you add Accept: application/json, you get a JSON body with a CDN link instead, and Create file would save that JSON text.

The response also carries headers you can use later in the flow, for example X-Screenshot-Title for a file description and X-Cache-URL for a public link that needs no key. In expressions, read them with outputs('HTTP')?['headers']?['X-Screenshot-Title']. The full list is in the response headers reference.

Parameter mapping

HTTP action field Key Value What it does
Queries url Page URL input The page to capture, with https://
Queries preset desktop_hd 1920×1080 viewport; see presets
Queries format png Also jpeg, webp or pdf
Queries full_page true Optional: the whole scrollable page
Queries block_ads, block_cookies true Removes ads and cookie banners
Queries cache_available true A rerun of the same capture reuses it for 0 credits
Headers Authorization Bearer rs_live_... Your API key

Every query parameter is listed in the GET endpoint reference.

Errors and retries in Power Automate

The HTTP action fails the run on any 4xx or 5xx response. Its retry policy decides which failures it tries again, and the default policy covers 408, 429 and 5xx. The retryPolicy above keeps that behavior with three tries, 10 seconds apart and growing.

Our API reports a page that did not load as 422 with "retryable": true, and no retry policy covers a 422. To retry it once:

  1. Add a Delay action of 30 seconds after the HTTP action. In its Configure run after, select only has failed.
  2. Copy the HTTP action and paste it after the Delay.
  3. Add a second Create file after the copy, or move the file step to run after either HTTP action succeeds.
Response Cause What to do
400 invalid_url The input has no https:// Add the scheme with concat('https://', ...) when it is missing
401 missing_credentials Wrong key or a missing Bearer prefix Fix the header; do not retry
403 insufficient_credits The month's credits are used Wait for the reset or change plan; see pricing
422 timeout The page did not finish loading The retry branch above; add delay if it repeats
429 too_many_requests Too many requests this minute across all your keys The retry policy handles it; add a Delay inside loops

The error handling guide explains each error type and the retryable flag.

Limits and costs

  • Credits. Each fresh capture costs one credit. Failed captures cost nothing, and with cache_available=true a rerun of an identical capture costs nothing.
  • Power Platform requests. Each action counts toward your Power Platform request limits. An Apply to each loop over a long list uses several actions per URL.
  • Loops and rate limits. Apply to each runs in parallel when concurrency control is on. Keep its degree of parallelism low so that the loop stays under your plan's per-minute limit; the rate limits page lists it.

Troubleshooting

  • The saved file will not open. You sent Accept: application/json, so the file holds JSON. Remove the header.
  • The run history shows your key. Turn on Secure inputs in the HTTP action settings and rotate the key in the dashboard.
  • The capture shows a consent dialog. Keep block_cookies=true, and see the cookie banner guide for sites that need a click.

The same request works in Zapier with a Webhooks GET step if part of your team works outside Microsoft 365.

Frequently asked questions

Can Power Automate take a screenshot of a website without an add-on?
Cloud flows have no screenshot action. The HTTP action can call a screenshot API and receive the image, and the OneDrive or SharePoint Create file action can save that response body as a PNG file.
Do I need a premium license?
Yes for this design. The HTTP action is a premium connector in Power Automate, so the flow owner needs a license that includes premium connectors.
Why does the flow not retry when a page times out?
The HTTP action's default retry policy retries 408, 429 and 5xx responses. A page that does not load returns 422 timeout, which the policy does not retry. The flow on this page adds one retry for that case.

Related in this topic

Try RenderScreenshot free

150 free credits every month, no credit card required.