{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Photos Scraper: Albums, Dates, No Login",
    "description": "Scrape the photos of public Facebook pages and profiles, no login, from page, album, photo or share links. Rows: full size image, alt text, posting date, caption, exact reactions, comments and shares, album and post. Tagged photos and every album. JSON, CSV, API. Pay per photo.",
    "version": "0.1",
    "x-build-id": "7oo4QXH08yxVBldJR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~facebook-photos-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-facebook-photos-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/automation_craft~facebook-photos-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-facebook-photos-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/automation_craft~facebook-photos-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-facebook-photos-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": {
          "pages": {
            "title": "Facebook pages, profiles, albums or photos",
            "type": "array",
            "description": "One per line: a public page or profile (facebook.com/natgeo, facebook.com/natgeo/photos/, facebook.com/profile.php?id=100044623170418, facebook.com/people/Name/100044623170418/, a username such as natgeo or @natgeo, or a numeric id), an album link (facebook.com/media/set/?set=a.528642321966536), a photo link (facebook.com/photo/?fbid=1699318501565573, photo.php?fbid=..., facebook.com/natgeo/photos/a.528642321966536/1699318501565573/) or a share link (facebook.com/share/...). Up to 500. Links of a post, reel, video, group or event are skipped free. Also read as startUrls, profileUrls, facebook_urls, username, pageNames, pageIds, pageId or profileId.",
            "items": {
              "type": "string"
            }
          },
          "pagesListUrl": {
            "title": "Values from a file or Google Sheet link",
            "type": "string",
            "description": "One https link to a public text or CSV file of up to 1 MB, or to a Google Sheet shared with \"anyone with the link\" (its first tab, or the tab in the link, is read as CSV). Every cell that names facebook.com is read, and in a file of one column every line (a page, album, photo or share link, a username or a numeric id; a value of another kind is skipped free). It joins the values above (at most 500 together). A link that carries a password or token is refused."
          },
          "photoSources": {
            "title": "Which photos of a page",
            "type": "array",
            "description": "photos: the page's Photos tab, newest first, Facebook's own list (the default). tagged: the photos other accounts tagged the page in. albums: every album of the page, each with its own row, and every photo of each album (the complete set of the page's public photos, album by album). Several can be chosen; a photo met twice is delivered once. Empty: photos. Also read as photoType (photos_by or photos_of).",
            "items": {
              "type": "string",
              "enum": [
                "photos",
                "tagged",
                "albums"
              ],
              "enumTitles": [
                "Photos tab (newest first)",
                "Tagged photos",
                "Every album (complete, album by album)"
              ]
            }
          },
          "maxPhotosPerPage": {
            "title": "Photos per page",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many photos to deliver for each page and each source chosen (photos, tagged, albums), 50 when empty. Photos left out by a filter do not count. Also read as resultsLimit, maxPhotos, photos_count or maxPhotosPerProfile."
          },
          "maxItems": {
            "title": "Photos in the whole run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "An upper bound on the photos the whole run delivers, across every value. Empty: no bound beyond the photos per page and your charge limit. Also read as maxResults."
          },
          "maxAlbumsPerPage": {
            "title": "Albums per page",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "With the albums source: how many albums of each page to read, in the order Facebook lists them (50 when empty). Also read as max_albums_per_profile."
          },
          "maxPhotosPerAlbum": {
            "title": "Photos per album",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "With the albums source or an album link: how many photos of each album to deliver (1000 when empty). 0 delivers the album rows alone. Also read as photos_per_album."
          },
          "onlyPhotosNewerThan": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Only photos posted on or after this day (UTC): YYYY-MM-DD, an ISO time, today, yesterday, or a relative \"7 days\", \"2 weeks\", \"3 months\", \"1 year\" counted back from the run's start. Sent to Facebook as its own date window on the Photos and tagged tabs; in the albums mode judged on each photo's own time. Also read as onlyNewerThan, photos_newer_than, dateFrom or newerThan; sinceDays takes a number of days."
          },
          "onlyPhotosOlderThan": {
            "title": "Posted on or before",
            "type": "string",
            "description": "Only photos posted on or before this day (UTC), the same forms as the start. Also read as onlyOlderThan, photos_older_than, dateTo or olderThan."
          },
          "includeKeywords": {
            "title": "Text contains",
            "type": "array",
            "description": "Only photos whose caption, hashtags or Facebook alt text contain at least one of these words or phrases, as whole words, case and accents ignored. Photos left out are free. Also read as keywords.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Text does not contain",
            "type": "array",
            "description": "Leave out photos whose caption, hashtags or alt text contain any of these words or phrases (the same matching). Photos left out are free.",
            "items": {
              "type": "string"
            }
          },
          "minReactions": {
            "title": "Minimum reactions",
            "minimum": 0,
            "maximum": 999999999,
            "type": "integer",
            "description": "Leave out photos with fewer reactions than this. Photos left out are free."
          },
          "minWidth": {
            "title": "Minimum width (pixels)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Leave out photos whose full size image is narrower than this many pixels. Photos left out are free."
          },
          "includeDetails": {
            "title": "Photo details",
            "type": "boolean",
            "description": "On (the default): each photo's own details are read and delivered: posting time, caption with hashtags and mentions, exact reactions by type, comments, shares, post id and link, uploader, album. No extra charge. Off: the faster rows of the Photos and tagged tabs only (id, link, image, size, alt text); the albums mode and links always read the details."
          },
          "includeComments": {
            "title": "Comments (add-on)",
            "type": "boolean",
            "description": "Deliver the comments of each delivered photo and album as rows of their own, up to the number below, in the order chosen below. Charged as the Comment event per comment row. Commenters' names are delivered; their ids and profile links only with personal data on. Also read as include_album_comments."
          },
          "maxCommentsPerItem": {
            "title": "Comments per photo or album",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "With comments on: how many comment rows (replies included) to deliver for each photo or album (20 when empty). Also read as comments_limit."
          },
          "commentsOrder": {
            "title": "Comment order",
            "enum": [
              "oldest",
              "newest",
              "relevant"
            ],
            "type": "string",
            "description": "With comments on: oldest first (the default), newest first, or Facebook's most relevant first. Also read as comment_filter (most_relevant, newest, all_comments)."
          },
          "includeReplies": {
            "title": "Replies to comments",
            "type": "boolean",
            "description": "With comments on: read the replies under each comment too (charged as Comment rows, inside the comments per photo or album)."
          },
          "maxRepliesPerComment": {
            "title": "Replies per comment",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "With replies on: how many replies to read under each comment (10 when empty)."
          },
          "storeImages": {
            "title": "Stored image copies (add-on)",
            "type": "boolean",
            "description": "Keep each delivered photo's full size image as a file in the run's key-value store (photo-<id>.jpg) and give its link in storedImageUrl, which keeps working after Facebook's own image link expires (imageUrlExpiresAt). Charged as the Stored image event on each image stored; an image that could not be stored is not charged. Also read as storePhotos."
          },
          "imageStoreName": {
            "title": "Store for the images (name)",
            "type": "string",
            "description": "With stored image copies on: the name of a key-value store in your Apify account to keep the images in, for example facebook-photos (letters, digits and hyphens inside the name, 63 characters at most). It is created when missing and kept until you delete it, so its image links keep working after the run's own storage is removed; a photo stored again keeps one file (photo-<id>.jpg). Empty: the run's own key-value store, kept as long as your plan keeps a run's storage. Also read as keyValueStorePrefix or keyValueStoreName."
          },
          "includePageDetails": {
            "title": "Page details",
            "type": "boolean",
            "description": "Add each Page's About tab and its Meta Ad Library facts to its page row: category, address, phone, e-mail, websites, business hours, price range, the rating line, and whether the Page runs ads now (with its active ads count, Ad Library link, creation date, name changes and the countries of the people who manage it). No extra charge; read for Pages only (never for a person's profile), for a Page that delivered a photo in the run, after its photos; its pageDetailsStatus says ok, not_a_page, no_photos or not_read (Facebook did not answer, or the run's allowance for options had no room left)."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off: a person's profile (a public figure's included) keeps its name, and its profile id, username, link and picture are empty; the uploader of a photo that is not the Page itself (tagged photos, photo and album links) keeps its name without its id or post link; commenters and mentioned people keep their names without ids or links; phone numbers and e-mail addresses read from captions and comments are not listed. On: those fields are filled. You are responsible for a lawful use of personal data (GDPR included).",
            "default": false
          },
          "outputFormat": {
            "title": "Row format",
            "enum": [
              "full",
              "compact"
            ],
            "type": "string",
            "description": "full: every field of a photo. compact: 24 fields most buyers sort, chart and download by (ids, link, image, size, alt text, caption, time, counts, album, post, uploader, page, stored image link).",
            "default": "full"
          },
          "maxConcurrency": {
            "title": "Pages at once",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "How many values to read at the same time (1 to 3)."
          },
          "requestDelayMs": {
            "title": "Pause between calls (ms)",
            "minimum": 200,
            "maximum": 10000,
            "type": "integer",
            "description": "The pause between two calls of one page, in milliseconds (200 to 10000; 300 when empty)."
          },
          "maxRunSeconds": {
            "title": "Stop after (seconds)",
            "minimum": 60,
            "maximum": 86400,
            "type": "integer",
            "description": "End the run after this many seconds with what was read so far (60 to 86400). Empty: the run's own timeout."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify's datacenter proxy by default (every door of this Actor answers it logged out). Your own proxy links are possible, and no proxy uses the run container's own address. Apify's residential group is not offered: its transfer price is above what a photo is charged."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}