{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Photos Scraper - Bulk Page Images [NO COOKIES] ✅",
    "description": "Bulk-scrape every public photo on a Facebook page. Full-res URLs, thumbnails and Facebook's native alt-text captions. 99.8% success rate, no cookies.",
    "version": "0.0",
    "x-build-id": "w2f8ebe0GvnskT7cx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unseenuser~fb-photos/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unseenuser-fb-photos",
        "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/unseenuser~fb-photos/runs": {
      "post": {
        "operationId": "runs-sync-unseenuser-fb-photos",
        "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/unseenuser~fb-photos/run-sync": {
      "post": {
        "operationId": "run-sync-unseenuser-fb-photos",
        "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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Facebook page URLs",
            "minItems": 1,
            "type": "array",
            "description": "One or more public Facebook page URLs to pull photos from. Example: https://www.facebook.com/Spurs",
            "items": {
              "type": "string"
            }
          },
          "maxPhotos": {
            "title": "Max photos per page (0 = all photos)",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many photos per page URL. Set to 0 to scrape every public photo the page exposes, with no upper limit. Default 0 (everything).",
            "default": 0
          },
          "includeCaptions": {
            "title": "Include native captions",
            "type": "boolean",
            "description": "Include Facebook's native accessibility caption (alt-text) per photo. Included free. Default true.",
            "default": true
          },
          "includePageContext": {
            "title": "Include page context",
            "type": "boolean",
            "description": "Adds page name, category and follower/like counts via the page profile lookup. Uses one extra request per page URL. Default false.",
            "default": false
          },
          "dateFrom": {
            "title": "Only include photos on or after (optional, best-effort)",
            "type": "string",
            "description": "Optional. When the upstream returns a photo creation timestamp, drops photos published before this date. Facebook's photo endpoint often omits the timestamp; in that case the photo is KEPT (not dropped) so the run does not silently return zero rows. Sort by photo_id or created_time downstream if you need a strict cutoff. Leave empty to disable."
          },
          "dateTo": {
            "title": "Only include photos on or before (optional, best-effort)",
            "type": "string",
            "description": "Optional. When the upstream returns a photo creation timestamp, drops photos published after this date. Same best-effort caveat as dateFrom: photos without a detectable timestamp are kept. Combine with dateFrom to define a range."
          },
          "enableOcr": {
            "title": "Enrich: OCR in-image text",
            "type": "boolean",
            "description": "Adds enrichment.ocr_text to every row using Anthropic Claude. Requires the Anthropic Claude API key field below to be filled (or the ANTHROPIC_API_KEY environment variable set on the run). Cost is about $3 per 1,000 photos for all three enrichments combined (OCR, classification, logos are returned in one call). Billed to your Anthropic account, not through Apify.",
            "default": false
          },
          "enableClassification": {
            "title": "Enrich: image classification labels",
            "type": "boolean",
            "description": "Adds enrichment.labels (classification labels per photo) using Google Cloud Vision. Requires GCP_VISION_KEY. About $1.50 per 1,000 photos, billed to your Google Cloud account.",
            "default": false
          },
          "enableLogoDetection": {
            "title": "Enrich: brand-logo detection",
            "type": "boolean",
            "description": "Adds enrichment.logos (detected brand marks per photo) using Google Cloud Vision. Requires GCP_VISION_KEY. About $1.50 per 1,000 photos, billed to your Google Cloud account.",
            "default": false
          },
          "visionBudgetUsd": {
            "title": "Vision spend cap for this run (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on Anthropic Claude spend for this run. When projected spend would exceed this cap, enrichment stops for remaining photos and base scraping continues. Default 10. Only matters if you turned on one of the enrichment toggles above.",
            "default": 10
          },
          "anthropicApiKey": {
            "title": "Anthropic Claude API key",
            "type": "string",
            "description": "Paste your Anthropic API key here (starts with sk-ant-). Required only if you turned on any enrichment toggle above. Get one at console.anthropic.com > API keys > Create Key (30 seconds). Value is encrypted at rest by Apify and redacted in run logs. Falls back to the ANTHROPIC_API_KEY environment variable when left blank. Cost is about $3 per 1,000 photos regardless of how many enrichment toggles are on (all three come back in a single Claude call)."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}