{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Images Scraper",
    "description": "Website Images Scraper SD - Website Images Scraper is a no-login tool that extracts every image from any website (img, srcset, picture, lazy data-src, CSS backgrounds, og:image) with alt text, size, type and dimensions, crawls pages, filters, and downloads files to storage or a ZIP.",
    "version": "1.0",
    "x-build-id": "tBLHzcYEkyizOacoP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neuro-scraper~website-images-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neuro-scraper-website-images-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/neuro-scraper~website-images-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neuro-scraper-website-images-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/neuro-scraper~website-images-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neuro-scraper-website-images-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Website or page URLs",
            "type": "array",
            "description": "Pages to collect images from, e.g. https://books.toscrape.com/ . Each page's images are read, then (Crawl scope, Maximum crawl depth) its links are followed page by page. A link straight to an image file (…/photo.jpg) is read as one image. The names urls and startUrl are accepted too.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "imageUrls": {
            "title": "Image file URLs (bulk download)",
            "type": "array",
            "description": "Optional. Direct links to image (or video / audio) files, one per line, e.g. https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg . Each gives one row with type, size and dimensions; turn on Download images to store the files.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "URL mode",
            "enum": [
              "auto",
              "page",
              "direct"
            ],
            "type": "string",
            "description": "auto = a start URL ending in an image / video / audio extension (or answering with an image) is read as a file, every other one as a page. page = always parse as a web page. direct = every start URL is an image file.",
            "default": "auto"
          },
          "crawlScope": {
            "title": "Crawl scope",
            "enum": [
              "single-page",
              "same-domain",
              "include-subdomains"
            ],
            "type": "string",
            "description": "Which links are followed from the start page: only the start page, pages on the same domain (www. ignored), or the domain and its subdomains. Allowed page URL globs replace this when given.",
            "default": "same-domain"
          },
          "maxCrawlDepth": {
            "title": "Maximum crawl depth",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many links away from a start URL pages are read: 0 = the start page only, 1 = the start page and the pages it links to, 2 = one level further. crawlDepth is accepted as the same setting.",
            "default": 1
          },
          "maxPagesToCrawl": {
            "title": "Max pages to crawl",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Most pages read in the whole run (start pages included), breadth-first. The crawl also stops when Max images is reached or no page is left to read. maxPages is accepted as the same setting.",
            "default": 10
          },
          "urlGlobs": {
            "title": "Allowed page URL globs",
            "type": "array",
            "description": "Optional. Only follow links matching one of these globs (** = anything, * = anything except /), e.g. https://books.toscrape.com/catalogue/page-*.html . Replaces Crawl scope when set.",
            "items": {
              "type": "string"
            }
          },
          "excludeUrlGlobs": {
            "title": "Excluded page URL globs",
            "type": "array",
            "description": "Optional. Never follow links matching these globs, e.g. **/login** or **/cart/**.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max images",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Most image rows in the whole run (every row is one result). The crawl follows the site's links page by page until this number, Max pages to crawl or the end of the site. maxTotalImages is accepted as the same setting.",
            "default": 100
          },
          "maxImagesPerPage": {
            "title": "Max images per page",
            "minimum": 0,
            "type": "integer",
            "description": "Most images saved from one page (0 = no limit).",
            "default": 0
          },
          "maxImagesPerUrl": {
            "title": "Max images per start URL",
            "minimum": 0,
            "type": "integer",
            "description": "Most images saved for one start URL and the pages crawled from it (0 = no limit).",
            "default": 0
          },
          "includeImages": {
            "title": "Include images",
            "type": "boolean",
            "description": "Collect images (img tags and every source below). Turn off to collect only video / audio.",
            "default": true
          },
          "includeSrcset": {
            "title": "Include srcset / picture",
            "type": "boolean",
            "description": "Read responsive images: srcset, data-srcset and <picture><source>. The largest candidate is returned (see Merge resized copies).",
            "default": true
          },
          "includeBackgroundImages": {
            "title": "Include CSS background images",
            "type": "boolean",
            "description": "Images set with CSS: style=\"background-image:url(...)\", <style> blocks, data-bg attributes and the old background= attribute.",
            "default": true
          },
          "includeOgTags": {
            "title": "Include og:image / twitter:image / JSON-LD",
            "type": "boolean",
            "description": "Share images and structured-data images: og:image, twitter:image, itemprop=image, link rel=image_src and JSON-LD image / logo / thumbnailUrl.",
            "default": true
          },
          "includeDataAttributes": {
            "title": "Include lazy-loaded images (data-src)",
            "type": "boolean",
            "description": "Lazy-loading attributes (data-src, data-lazy-src, data-original, data-srcset ...). When src is a placeholder, the lazy URL is the image.",
            "default": true
          },
          "includeLinkedImages": {
            "title": "Include linked image files",
            "type": "boolean",
            "description": "Links (<a href>) that point straight to an image file - often the full-size photo of a gallery thumbnail.",
            "default": true
          },
          "includeStylesheets": {
            "title": "Include images from linked CSS files",
            "type": "boolean",
            "description": "Also read up to 10 same-site stylesheets per page (cached) for url(...) images. One extra request per stylesheet.",
            "default": false
          },
          "includeIcons": {
            "title": "Include favicons and touch icons",
            "type": "boolean",
            "description": "Add link rel=icon / apple-touch-icon / mask-icon and msapplication tile images.",
            "default": false
          },
          "includeVideo": {
            "title": "Include video",
            "type": "boolean",
            "description": "Add <video> / <source> files, og:video and links to video files (mediaType = video, with the poster image).",
            "default": false
          },
          "includeAudio": {
            "title": "Include audio",
            "type": "boolean",
            "description": "Add <audio> / <source> files and links to audio files (mediaType = audio).",
            "default": false
          },
          "includeDataUris": {
            "title": "Include inline data: images",
            "type": "boolean",
            "description": "Add images embedded in the page as data: URIs (base64). Off by default - most are placeholders.",
            "default": false
          },
          "skipTrackingPixels": {
            "title": "Skip tracking pixels",
            "type": "boolean",
            "description": "Leave out 1x1 / 2x2 images and analytics pixels (Facebook, Google Analytics, DoubleClick, Bing, LinkedIn ...).",
            "default": true
          },
          "mergeResponsiveVariants": {
            "title": "Merge resized copies of the same image",
            "type": "boolean",
            "description": "On: one row per image with the largest srcset / picture candidate as url and every size in variants (variantCount). Off: every candidate is its own row.",
            "default": true
          },
          "dedupeAcrossPages": {
            "title": "Unique images only (dedupe across pages)",
            "type": "boolean",
            "description": "Return an image once even when several pages show it (logos, icons). Off: one row per page it appears on.",
            "default": true
          },
          "imageExtensions": {
            "title": "Image extensions to accept",
            "type": "array",
            "description": "Optional. Only these file types, e.g. jpg, png, webp (jpg = jpeg, tif = tiff). Checked on the URL and, when the file is read, on its real content type. Empty = all. includeExtensions is accepted too.",
            "items": {
              "type": "string"
            }
          },
          "includeMimeTypes": {
            "title": "MIME type allow-list",
            "type": "array",
            "description": "Optional. Only files whose real content type matches, e.g. image/jpeg, image/png or image/* (the file is checked).",
            "items": {
              "type": "string"
            }
          },
          "minWidth": {
            "title": "Min width (px)",
            "minimum": 0,
            "type": "integer",
            "description": "Only images at least this wide, measured from the file itself (the file is checked). 0 = no limit.",
            "default": 0
          },
          "minHeight": {
            "title": "Min height (px)",
            "minimum": 0,
            "type": "integer",
            "description": "Only images at least this tall, measured from the file. 0 = no limit.",
            "default": 0
          },
          "minSizeBytes": {
            "title": "Min size (bytes)",
            "minimum": 0,
            "type": "integer",
            "description": "Only files of at least this many bytes, e.g. 10000 to drop icons. 0 = no limit.",
            "default": 0
          },
          "maxSizeBytes": {
            "title": "Max image size (bytes)",
            "minimum": 0,
            "type": "integer",
            "description": "Only files up to this many bytes; larger files are left out (and not downloaded). 0 = no limit (downloads stop at 200 MB). maxBytes is accepted too.",
            "default": 0
          },
          "checkImages": {
            "title": "Check each image (type, size, dimensions)",
            "type": "boolean",
            "description": "Read the first 128 KB of every file (one Range request, the page as referer) to fill contentType, sizeBytes, width, height, format, httpStatus, finalUrl, ok and error without downloading it. Off = URLs and HTML attributes only (fastest).",
            "default": true
          },
          "downloadImages": {
            "title": "Download images",
            "type": "boolean",
            "description": "Download every file in full: adds sha256 and, with Store the files, saves it in the run's key-value store (key, storedUrl).",
            "default": false
          },
          "storeFiles": {
            "title": "Store the files",
            "type": "boolean",
            "description": "With Download images: save each file in the run's key-value store under the file name pattern and give its public link (storedUrl). store is accepted too.",
            "default": true
          },
          "dedupByHash": {
            "title": "Deduplicate by content hash",
            "type": "boolean",
            "description": "With Download images: a file whose bytes (sha256) equal one already saved is left out, even under another URL.",
            "default": true
          },
          "filenamePattern": {
            "title": "File name pattern",
            "type": "string",
            "description": "Key-value store key / ZIP name of each downloaded file. Tokens: {name} (file name without extension), {hash} (12 hex of sha256), {sha256}, {index}, {host}, {page} (page path), {ext}.",
            "default": "{name}-{hash}.{ext}"
          },
          "convertFormat": {
            "title": "Format conversion",
            "enum": [
              "none",
              "webp-to-png",
              "png-to-jpg"
            ],
            "type": "string",
            "description": "With Download images: convert WebP files to PNG, or PNG files to JPG (transparency on white), before storing.",
            "default": "none"
          },
          "stripExif": {
            "title": "Strip EXIF metadata (JPEG)",
            "type": "boolean",
            "description": "With Download images: remove EXIF / XMP blocks (camera, GPS) from JPEG files without re-encoding them.",
            "default": false
          },
          "resultsType": {
            "title": "Results format",
            "enum": [
              "list",
              "zip",
              "zipPerUrl"
            ],
            "type": "string",
            "description": "list = the image rows (plus stored files if chosen). zip = also one ZIP of all downloaded files in the key-value store (images.zip; parts of 400 MB). zipPerUrl = one ZIP per start URL. A ZIP turns Download images on. The ZIP links are in the log and the ZIP_FILES record.",
            "default": "list"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many image files are checked or downloaded at the same time. Pages are read one at a time per site, politely.",
            "default": 5
          },
          "downloadTimeoutMs": {
            "title": "Download timeout (ms)",
            "minimum": 1000,
            "maximum": 600000,
            "type": "integer",
            "description": "Time limit for one image request.",
            "default": 30000
          },
          "imageCheckMaxRetries": {
            "title": "Max retries per image",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries after a network error, 429 or 5xx answer for one image file.",
            "default": 2
          },
          "requestDelayMs": {
            "title": "Delay between page requests (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Pause between two page requests to the same site (robots.txt Crawl-delay raises it, up to 10 s).",
            "default": 1000
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip pages the site's robots.txt disallows. Turn off only for sites you may crawl.",
            "default": true
          },
          "userAgent": {
            "title": "Custom User-Agent (optional)",
            "type": "string",
            "description": "Optional. Sent instead of the default desktop Chrome User-Agent, for pages and images."
          },
          "useProxyForImages": {
            "title": "Use the proxy for image files",
            "type": "boolean",
            "description": "Off: pages go through the proxy below, image files are fetched directly (image CDNs rarely block, and it keeps proxy traffic low). Turn on when an image host refuses direct requests.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy for the page requests. Residential is the default; pick a country when a site serves other content (or blocks) by country.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}