{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk File & Image Downloader — URLs, Drive, Dropbox to ZIP",
    "description": "Download files and images from a list of URLs, a CSV / Google Sheet, a dataset or web pages into storage, with a public link, size and sha256 for each, and optional ZIP archives. Google Drive, Dropbox and OneDrive share links work. $1 per 1,000 files + $0.25 per GB.",
    "version": "0.0",
    "x-build-id": "ERtGolCHFn4jWrQh4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/saliga~bulk-file-downloader/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-saliga-bulk-file-downloader",
        "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/saliga~bulk-file-downloader/runs": {
      "post": {
        "operationId": "runs-sync-saliga-bulk-file-downloader",
        "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/saliga~bulk-file-downloader/run-sync": {
      "post": {
        "operationId": "run-sync-saliga-bulk-file-downloader",
        "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": {
          "urls": {
            "title": "File URLs",
            "type": "array",
            "description": "Direct links to files or images, and Google Drive, Google Docs/Sheets/Slides, Dropbox, OneDrive or SharePoint share links (turned into downloads for you). One row of output per URL. Only download files you have the right to download.",
            "items": {
              "type": "string"
            }
          },
          "csvUrl": {
            "title": "CSV or Google Sheet with URLs",
            "type": "string",
            "description": "Link to a public CSV file, or a Google Sheet shared as \"Anyone with the link\" (its CSV export is read). The list is read once as input."
          },
          "urlColumn": {
            "title": "URL column",
            "type": "string",
            "description": "Name of the column with the file links (any case). When it is missing, the first column that holds links is used.",
            "default": "url"
          },
          "datasetId": {
            "title": "Dataset",
            "type": "string",
            "description": "An Apify dataset with file links, for example the output of a scraper run."
          },
          "urlField": {
            "title": "Dataset field with the URL",
            "type": "string",
            "description": "Field with the file link in each dataset item. Use dots for nested fields (image.url). A list of links is read too.",
            "default": "url"
          },
          "maxDatasetItems": {
            "title": "Max dataset items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Read at most this many items from the dataset.",
            "default": 10000
          },
          "pageUrls": {
            "title": "Web pages to collect files from",
            "type": "array",
            "description": "Public HTML pages. The page itself is not saved; its file links of the selected types are downloaded.",
            "items": {
              "type": "string"
            }
          },
          "fileTypes": {
            "title": "File types",
            "type": "array",
            "description": "File extensions to keep, e.g. jpg, png, webp, pdf, docx. For web pages, empty means common types (images, PDF, Office files, CSV, TXT, ZIP, MP3, MP4, EPUB). For listed URLs, empty means any type; when set, other files are skipped before they are downloaded. A link that answers with a web page instead of a file (a login or \"not found\" page) is refused, free, unless you add html here.",
            "items": {
              "type": "string"
            }
          },
          "maxFilesPerPage": {
            "title": "Max files per page",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "File links taken from each web page, in page order, duplicates removed.",
            "default": 100
          },
          "maxFiles": {
            "title": "Max files",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Cap on files downloaded in this run (and on the price). URLs over the cap are listed as skipped.",
            "default": 10000
          },
          "maxFileSizeMb": {
            "title": "Max file size (MB)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Larger files are skipped: before the download when the server sends the size, otherwise the download stops at the limit. Free. Lowered automatically to what fits on the run's disk (half of it with ZIP on).",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Downloads at a time",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Files downloaded in parallel. Never more than two at a time from the same host, with a short gap between requests.",
            "default": 5
          },
          "fileTimeoutSecs": {
            "title": "Time limit per file (seconds)",
            "minimum": 10,
            "maximum": 3600,
            "type": "integer",
            "description": "A download that takes longer is stopped and reported as an error (free).",
            "default": 300
          },
          "respectRobotsTxt": {
            "title": "Honour robots.txt for listed URLs",
            "type": "boolean",
            "description": "Skip listed URLs whose site's robots.txt does not allow them (free). Turn off only for files you own or have permission to download, such as your own share links. Web pages and the files found on them always honour robots.txt.",
            "default": true
          },
          "zip": {
            "title": "Also make ZIP archives",
            "type": "boolean",
            "description": "Also store ZIP archive(s) of all downloaded files in the key-value store. Their links are in the OUTPUT record and the log. No extra charge. Files wait on the run's disk until their part is full; for many GB, use smaller parts or more memory (disk grows with it).",
            "default": false
          },
          "zipPartMb": {
            "title": "ZIP part size (MB)",
            "minimum": 1,
            "maximum": 4000,
            "type": "integer",
            "description": "Archives are split into parts of about this size (a bigger file gets its own part). A part is uploaded as soon as it is full and its files are deleted from the run's disk.",
            "default": 500
          },
          "zipName": {
            "title": "ZIP name",
            "type": "string",
            "description": "Name of the archive: files.zip, or files-part1.zip, files-part2.zip ... when split.",
            "default": "files"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}