diff --git a/README.md b/README.md
index 679c3a9..b0ca353 100644
--- a/README.md
+++ b/README.md
@@ -349,6 +349,9 @@ Few rules:
   <dt>cookies</dt>
   <dd>Configure <a href="http://phantomjs.org/api/phantom/property/cookies.html">cookies</a> that will be contained in request. HTTP message body is the easiest way for sending cookies to Manet (ex: using JSON format).</dd>
 
+  <dt>onlySuccessfulStatusCode</dt>
+  <dd>Take screenshot only when http status code is below 400 (a.k.a. 2xx, 3xx). (default is `false`)</dd>
+
 </dl>
 
 
diff --git a/public/js/app.js b/public/js/app.js
index a8718d5..c7f2093 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -9,12 +9,12 @@
         'user', 'password',
         'callback', 'headers', 'clipRect',
         'force', 'selector','selectorCrop','selectorCropPadding',
-        'engine'
+        'engine', 'onlySuccessfulStatusCode'
     ];
 
     function cleanBoolValue(name, value) {
         return ((value && (name === 'js' || name === 'images')) ||
-                (!value && (name === 'force' || name === 'selectorCrop'))) ? null : value;
+                (!value && (name === 'force' || name === 'selectorCrop' || name === 'onlySuccessfulStatusCode'))) ? null : value;
     }
 
     function readOptions() {
diff --git a/public/usage.html b/public/usage.html
index 07e9a1b..e74f761 100644
--- a/public/usage.html
+++ b/public/usage.html
@@ -117,6 +117,11 @@ <h2>Website screenshot service</h2>
                     <input id="force" name="force" type="checkbox">
                 </div>
 
+                <div class="pure-control-group">
+                    <label for="onlySuccessfulStatusCode">Only Successful Status Code</label>
+                    <input id="onlySuccessfulStatusCode" name="onlySuccessfulStatusCode" type="checkbox">
+                </div>
+
                 <div class="pure-control-group">
                     <label for="selector">Wait for DOM element</label>
                     <input id="selector" name="selector" type="text" maxlength="1024" placeholder="CSS selector">
diff --git a/src/capture.js b/src/capture.js
index 4aabeb7..97db44b 100644
--- a/src/capture.js
+++ b/src/capture.js
@@ -4,6 +4,7 @@ const _ = require('lodash'),
       fs = require('fs-extra'),
       logger = require('winston'),
       path = require('path'),
+      request = require('request'),
       squirrel = require('squirrel'),
       crypto = require('crypto'),
       utils = require('./utils'),
@@ -87,24 +88,38 @@ function minimizeImage(src, dest, cb) {
 /* Screenshot capturing runner */
 
 function runCapturingProcess(options, config, outputFile, base64, onFinish) {
-    const scriptFile = utils.filePath(SCRIPT_FILE),
-          command = cliCommand(config).split(/[ ]+/),
-          cmd = _.union(command, [scriptFile, base64, outputFile]),
-          opts = {
-              timeout: config.timeout
-          };
-
-    logger.debug(
-        'Options for script: %s, base64: %s, command: %s',
-        JSON.stringify(options), base64, JSON.stringify(cmd)
-    );
-
-    utils.execProcess(cmd, opts, (error) => {
-        if (config.compress) {
-            minimizeImage(outputFile, config.storage, () => onFinish(error));
-        } else {
+    request({
+        uri: options.url,
+        method: 'HEAD'
+    }, function (error, response) {
+        if (error) {
             onFinish(error);
         }
+
+        if (!!options.onlySuccessfulStatusCode && response.statusCode >= 400) {
+            logger.error(`URL Status code is ${response.statusCode}`);
+            return onFinish(new Error(`URL Status code is ${response.statusCode}`));
+        }
+
+        const scriptFile = utils.filePath(SCRIPT_FILE),
+            command = cliCommand(config).split(/[ ]+/),
+            cmd = _.union(command, [scriptFile, base64, outputFile]),
+            opts = {
+                timeout: config.timeout
+            };
+
+        logger.debug(
+            'Options for script: %s, base64: %s, command: %s',
+            JSON.stringify(options), base64, JSON.stringify(cmd)
+        );
+
+        utils.execProcess(cmd, opts, (error) => {
+            if (config.compress) {
+                minimizeImage(outputFile, config.storage, () => onFinish(error));
+            } else {
+                onFinish(error);
+            }
+        });
     });
 }
 
@@ -130,7 +145,7 @@ function screenshot(options, config, onFinish) {
 
     logger.info('Capture site screenshot: "%s"', options.url);
 
-    if (options.force || !conf.cache) {
+    if (options.force || !conf.cache || options.onlySuccessfulStatusCode) {
         retrieveImageFromSite();
     } else {
         fs.exists(file, (exists) =>
diff --git a/src/options.js b/src/options.js
index 84a8727..0586e85 100644
--- a/src/options.js
+++ b/src/options.js
@@ -12,6 +12,7 @@ const _ = require('lodash'),
 function createSchema() {
     return joi.object().keys({
         force: joi.boolean(),
+        onlySuccessfulStatusCode: joi.boolean(),
         url: joi.string().trim().required(),
         agent: joi.string().trim(),
         headers: joi.string().trim(),