Getting Started

ScreenshotAPI is a simple API that allows you to take programmatic screenshots of any website with ease. Screenshots can be saved as JPEG, PNG, WebP, and even PDF! We provide plenty of options.

Render a Screenshot (GET)

GET https://shot.screenshotapi.net/screenshot?token=TOKEN&url=URL&[OPTIONS]

The following options for the API call are:

TOKEN: The TOKEN or your API key should be replaced by your real ScreenshotAPI API, you can find your API key after you Sign Up or Log In to the service via the Dashboard page.

Note: If for any reason you need to get a new API key, simply click "Roll API Key" in the "Settings" card on the Dashboard. This will issue you a fresh API key and revoke access from the previous key.

URL: Website URL for the site you would like to render for the screenshot. We support a wide variety of websites types, such as single page apps, very long-content, and sites that require lazy loading or delays ensuring accurate and complete screenshots of these unique sites.

OPTIONS: Options indicates the different URL parameters keys and values that can be used to render your "perfect" screenshot. All the options for screenshots will be detailed below.

Note: Default options for the screenshot will be shown in the Options table below.

Example:

GET https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https://apple.com

This will render the following png image output when you paste in the above string into your browsers URL bar (replacing TOKEN with your API key):

Cached & Fresh screenshot

When you take a screenshot, it automatically get cached on our backend, so when you make a get request to the same URL this will return the same screenshot that got cached, but if you want to take a newer screenshot of the URL provided, you may want to use our fresh screenshot functionality.

Example:

Get https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https%3A%2F%2Fwww.apple.com%2F&fresh=true&[OPTIONS]

In the following video, you will see an example of how the "Fresh Screenshot" functionality is used. First, we demonstrate how a regular request to a specific URL is made for the first time, which typically takes a few seconds since it's the initial request. Then, the same request is made a second time, which is much faster because it retrieves the cached screenshot. However, if you want to capture a completely new screenshot without using the cached one, you should click the checkbox labeled 'Fresh screenshot' as shown in the example during the third request in the video.

Remove elements from a page

You can select elements by class name, ID, or other CSS selectors and then add the display: none attribute to hide them on the inject CSS feature.

Example:

Get https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https%3A%2F%2Fwww.apple.com%2F&output=image&file_type=png&wait_for_event=load&css=.module-content%7Bdisplay%3A%20none%7D%0A

In the following video, you'll find a more illustrative example of how to use the 'Inject CSS' functionality to remove an element from a page. In the first request, you'll see a standard screenshot to observe the page's initial state. Then, in the second request, we demonstrate how to achieve this by utilizing the 'Inject CSS' feature to remove the desired element.

Scrolling screenshots

You can access the 'Scrolling Screenshot' functionality, which allows you to capture a video (in webm, gif, or mp4 format) of a web page with various customizable options. These options include the ability to scroll backward, adjust scrolling speed, set the duration, and start recording instantly

Example:

Get https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https%3A%2F%2Fgoogle.com&output=json&file_type=gif&wait_for_event=load&scrolling_screenshot=true

In the following video, you'll find a more illustrative example of how to utilize the 'Scrolling Screenshot' functionality. When you click the 'Take Screenshot' button, it will take a few seconds to capture the video and provide you with JSON containing the video information.

Here is the recorded video demonstrating the example.

Multiple Scrolling screenshots

In addition to the 'Scrolling Screenshot' functionality, our application offers the feature of 'Multiple Scrolling Screenshots.' With this feature, you can capture multiple scrolling screenshots of web pages, each with different sizes in terms of width and height. This means you have the flexibility to customize the dimensions of the screenshots according to your specific requirements.

Example:

In the parameters of the endpoint, we will pass an array of objects with different sizes. To achieve this, we need some code to pass this array in the 'sizes' parameter.

let sizesArr = [
    { id: 1, width: 1920, height: 1080 },
    { id: 2, width: 1280, height: 720 },
    { id: 3, width: 800, height: 450 }
];

let SIZES = JSON.stringify(sizesArr);
Get https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https%3A%2F%2Fwww.apple.com%2F&output=json&file_type=gif&wait_for_event=load&scrolling_screenshot=true&multiple_scrolling=true&sizes=SIZES

In the following video, you'll find a more illustrative example of how to utilize the 'Multiple Scrolling Screenshot' functionality. When you click the 'Take Screenshot' button, it will take a few seconds to capture the video and provide you with JSON containing the video information.

Render a Screenshot (POST)

POST https://shot.screenshotapi.net/screenshot

POST mode accepts the exact same parameters in the request body, but you need to use a JSON.

Request Options for Screenshots

Request Options

GET https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https://apple.com

Path Parameters

{
    // Response
}

Request Options for Scrolling Screenshots

Request Options

GET https://shot.screenshotapi.net/screenshot?token=TOKEN&url=https://apple.com&scrolling_screenshot=true

Path Parameters

Errors

In rare circumstances the API may encounter an "Error 524" from Cloudflare. This is due to a timeout between the ScreenshotAPI API and our servers due to auto-scaling. If you see this error please just try your request again.

You may also receive an error if you select the no_cookies_banner as TRUE and try to export as a PDF. There are some limitations that do not allow these two settings to happen at the same time.

Quota

With each API call the following quota headers are sent.

The total number of screenshots you can take per month

Query Builder

Use our Query Builder to explore our API. (If you are logged in your API key is automatically added). To easily view all the screenshot options in an interactive builder to ensure you have your ideal screenshot dialed in.

You can check out the Query Builder here: https://app.screenshotapi.net.

Inject JavaScript

Inject Javascript field is a javascript code that the browser can execute before taking the screenshot.

For example: Try taking a screenshot of https://xo.capital/ and paste this code in the "Inject JS code" input of the query builder:

document.getElementsByClassName('display-heading')[0].innerHTML = 'This is a test to help the customer'

Page Range

We added a new option recently specifically for the PDF output. You can select the range that you want to select. Sometimes if the screenshot has unnecessary details that bleed into another page and you want to remove that from the screenshot, you can customize the page range that gets outputted directly from the Query Builder.

pdf_options%5Bpage_range%5D)=1-1

Extract HTML or Text

This option on the query builder allows you to store the HTML and the text of the site. You currently need to set the output as json to grab the URLs. If you are using the img output, for example, we will extract the information but there is no way to grab the URLs.

Code Examples

Below is sample code for the following languages: Node.JS, PHP, Go, Java, Python, and Ruby.

If you need assistance integrating into our API with a given language please contact us.

var fs = require("fs");
var request = require("request");

// @param {String} token - String containing your API Key
// @param {String} url - Encoded URI string container the URI you're targeting
// @param {String} output - String specifying the output format, "image" or "json"
// @param {String} file_type - String specifying the output type
var token = "Your API Key";
var url = encodeURIComponent("https://google.com");
var output = "image";
var file_type = "png";

// Construct the query params and URL
var query = "https://shot.screenshotapi.net/screenshot";
query += `?token=${token}&url=${url}&output=${output}&file_type=${file_type}`;

// Call the API and save the screenshot
request.get({ url: query, encoding: "binary" }, (err, response, body) => {
  fs.writeFile("screenshot.png", body, "binary", (err) => {
    if (err) {
      console.log(err);
    } else {
      console.log("The file was saved!");
    }
  });
});
```

Proxy

We have a free proxy you can use if you need one: http://xo:llksoigsgrewvc@137.184.64.168:3128

Support

At ScreenshotAPI we are there for you. We are developers ourselves and strive to ensure you have a great screenshot experience.

If the ScreenshotAPI.net API is unavailable to all for more than three consecutive hours in any one calendar day, beginning at 12:00:01 AM PST and ending at 11:59:59 PM PST time of the same day, an outage will be deemed to have occurred. If there are more than three outages within any one calendar week, beginning at 12:00:01 AM PST on a Monday and ending at 11:59:59 PM PST on a Sunday, then You may terminate this Agreement, without liability, by providing written notice to ScreenshotAPI.net of Your intention to do so within one calendar week of the third outage. Upon such termination being accepted by ScreenshotAPI.net, You shall be entitled to a refund equal to the amount You have paid for the latest term.

If you need help at any point please contact us at info@screenshotapi.net or go to help.screenshotapi.net

Last updated