{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Groups Posts Scraper: with Post Analytics",
    "description": "Facebook Groups Posts Scraper extracts posts from public Facebook groups, including text, images, videos, author details, timestamps, reactions, comments, and share counts. Ideal for community research, trend analysis, social listening, and automating structured Facebook group post data collection.",
    "version": "0.1",
    "x-build-id": "oUN9KVcKGfr0ps7ls"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~facebook-groups-posts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-facebook-groups-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/simpleapi~facebook-groups-posts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-facebook-groups-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/simpleapi~facebook-groups-posts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-facebook-groups-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",
        "properties": {
          "targetGroups": {
            "title": "🎯 Groups to Monitor",
            "type": "array",
            "description": "📥 One or more Facebook group URLs, usernames, or keywords to monitor (example: https://www.facebook.com/groups/germtheory.vs.terraintheory). Same accepted formats as `startUrls`.",
            "items": {
              "type": "string"
            }
          },
          "postLimit": {
            "title": "📈 Post Limit per Group",
            "minimum": 10,
            "maximum": 10000,
            "type": "integer",
            "description": "🎯 Maximum posts to collect per group per run (minimum: 10). Same as `maxPosts`. Default is 10."
          },
          "feedOrder": {
            "title": "🔃 Feed Order",
            "enum": [
              "ALL",
              "TOP_POSTS",
              "CHRONOLOGICAL",
              "RECENT_ACTIVITY"
            ],
            "type": "string",
            "description": "🗂️ Which Facebook feed ordering to paginate through. Same values as `sortBy`.\n\n• **All sorts** — combine three orders to maximize unique posts collected.\n• **Top posts** — most-engaged posts first.\n• **Chronological** — newest posts first.\n• **Recent activity** — posts with the latest comments/reactions first."
          },
          "monitorMode": {
            "title": "🛰️ Monitor Mode (skip already-seen posts)",
            "type": "boolean",
            "description": "🔁 When ON, the actor remembers post IDs seen on previous runs (per group, in the actor's key-value store) and skips them on this run — only genuinely NEW posts are pushed. When OFF (default), every scraped post is returned, same as the base scraper, and `isNewPost` simply reports whether that post ID has ever been seen in a prior run.",
            "default": false
          },
          "keywordsInclude": {
            "title": "✅ Keywords to Include",
            "type": "array",
            "description": "🔎 Only keep posts whose text contains at least one of these keywords (case-insensitive). Leave empty to keep all posts. Matched keywords are reported in `matchedKeywords`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordsExclude": {
            "title": "🚫 Keywords to Exclude",
            "type": "array",
            "description": "🙅 Drop posts whose text contains any of these keywords (case-insensitive). Leave empty to apply no exclusion.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "dateFrom": {
            "title": "📅 Date From",
            "type": "string",
            "description": "⏳ Only keep posts published on/after this absolute date (e.g. 2026-01-01). Leave empty for no lower bound."
          },
          "dateTo": {
            "title": "📅 Date To",
            "type": "string",
            "description": "⏳ Only keep posts published on/before this absolute date (e.g. 2026-12-31). Leave empty for no upper bound."
          },
          "resolveFullMedia": {
            "title": "🖼️ Resolve Full-Resolution Photos + Real OCR",
            "type": "boolean",
            "description": "When enabled, each photo attachment is re-fetched from its own Facebook permalink page to replace the low-res feed preview with a full-resolution image URL (`attachments[].fullImageUrl`) plus Facebook's own OCR/alt text (`attachments[].ocrText`) when available. Off by default = low-res preview only (original behavior)."
          },
          "includeGroupProfile": {
            "title": "🏷️ Attach Group Profile Metadata",
            "type": "boolean",
            "description": "When enabled, each group's profile (member count, privacy & discoverability settings, creation date, admins/moderators) is fetched ONCE per group and attached as `groupProfile` on every post from that group. Off by default = no extra group profile call (original behavior)."
          },
          "maxComments": {
            "title": "💬 Top Comments Preview per Post",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of real top-level comments to attach as `topComments` per post (fetched via Facebook's own comments-pagination query against the post's permalink page — never fabricated). 0 (default) disables this lookup entirely. Coverage depends on Facebook's live response for each post/session; when no real comment data can be recovered, `topComments` is an empty list, never faked data. Only applied to posts that already passed the keyword/date/seen filters above."
          },
          "proxy": {
            "title": "🛡️ Network Configuration",
            "type": "object",
            "description": "🌐 Proxy preferences. The actor always forces Apify RESIDENTIAL proxy internally regardless of this selection. (Base-compatible: a raw `proxyConfiguration` key in the input JSON is still honored as a fallback if `proxy` is not set.)"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}