{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Page Posts Scraper — Comments, Photos, No Login",
    "description": "Scrape Facebook posts without logging in: walk any public Page's feed, or paste individual post, reel or video URLs. Get text, date, permalink, photos, per-emoji reactions, comment and share counts. Your post limit is enforced before each request, so you are never charged past it.",
    "version": "0.0",
    "x-build-id": "tNiea9FclgoMGpQPU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~facebook-page-posts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-facebook-page-posts-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/memo23~facebook-page-posts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-facebook-page-posts-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/memo23~facebook-page-posts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-facebook-page-posts-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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "📘 Facebook Pages, profiles or post URLs",
            "type": "array",
            "description": "Facebook Pages or public profiles to walk (https://www.facebook.com/<page or username>, a bare handle like `nasa`, or `profile.php?id=<id>`), individual post permalinks (`.../posts/<id>`, `permalink.php?story_fbid=...`, `/reel/<id>`, `/videos/<id>`), and/or photo permalinks (`/photo/?fbid=...`, `photo.php?fbid=...`). Share links from Facebook's Share button (`/share/...`, `fb.watch/...`) are opened and read as whatever they point at. Mix them in one run — post and photo URLs are fetched first, one request each.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "scrapeMode": {
            "title": "What to scrape",
            "enum": [
              "posts",
              "photos",
              "both"
            ],
            "type": "string",
            "description": "Posts walks the Page feed (default, same as before). Photos walks the public photos tab and writes one row per photo (id, full-size URL, thumbnail, Facebook permalink, OCR/alt text). Both does the feed first, then the photos tab. Date cutoffs apply to photos as query bounds, not a client-side filter.",
            "default": "posts"
          },
          "maxPosts": {
            "title": "Max posts per page",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap per Page. The run stops at exactly this number — Facebook returns posts ten at a time, and any extras in the last batch are discarded rather than delivered and charged.",
            "default": 100
          },
          "maxPhotos": {
            "title": "Max photos per page",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap per Page when scraping photos. Facebook returns eight photos at a time; extras in the last batch are discarded rather than delivered and charged. Falls back to Max posts per page if you leave this empty.",
            "default": 100
          },
          "maxItems": {
            "title": "Max posts in total",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap across every Page in the run (posts + photos). Whichever limit is reached first ends the run.",
            "default": 1000
          },
          "onlyPostsNewerThan": {
            "title": "Only posts newer than",
            "type": "string",
            "description": "Optional cutoff: a date such as <code>2026-01-01</code>, or a period counted back from the run's start such as <code>3 months</code> or <code>2 weeks</code> (UTC). The feed is newest-first, so the walk stops as soon as it reaches an older post, which also makes the run cheaper. If the Page has not posted since then, the run succeeds with an empty dataset."
          },
          "onlyPostsOlderThan": {
            "title": "Only posts older than",
            "type": "string",
            "description": "Upper bound of the date window: a date such as <code>2022-12-31</code>, or a period such as <code>1 year</code> (posts published more than a year ago). The walk jumps straight to this date, even years back, instead of paging down from today. Pair it with \"Only posts newer than\" to pull one month out of a Page's history."
          },
          "monitoringMode": {
            "title": "Only new posts (monitoring mode)",
            "type": "boolean",
            "description": "Return only posts that no earlier run of yours has delivered for the same Page. Built for scheduled runs: each run picks up where the last one stopped and ends once it reaches posts you already have, so you pay for new posts only. A run with nothing new succeeds with an empty dataset. Applies to Page feeds, not to post or photo URLs.",
            "default": false
          },
          "captionText": {
            "title": "Include video transcript",
            "type": "boolean",
            "description": "Extract Facebook's own video/reel transcript when the post has one. Off by default — it costs an extra request per video. Posts without captions still appear, with captionText set to null.",
            "default": false
          },
          "includeComments": {
            "title": "Include comment bodies",
            "type": "boolean",
            "description": "Attach the comments Facebook shows on the public post (text, author, avatar, comment URL). On by default — each attached comment is billed as a separate comment event. The feed often inlines none, so a post with a comment count and an empty list costs an extra permalink request. Turn off to keep only the comment count and skip the comment charge.",
            "default": true
          },
          "allAlbumPhotos": {
            "title": "All photos of multi-photo posts",
            "type": "boolean",
            "description": "Facebook's feed sends at most five photos per post. When a post has more, fetch the rest from the post's photo set (one extra request for that post only) so `attachments` holds every photo. Turn off to keep only the first five; `photoCount` still tells you the total.",
            "default": true
          },
          "proxy": {
            "title": "Proxy configuration (optional)",
            "type": "object",
            "description": "Leave empty. Residential proxy is included and is not billed to you. Set this only if you want to route through your own proxies instead.",
            "default": {}
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}