{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Groups Scraper – Posts, Comments & Replies [No Login]✅",
    "description": "Scrape public Facebook group posts with full comment threads and replies - no login, no cookies, never member data. The only Groups scraper that returns complete comment threads. Export JSON, CSV, or Excel.",
    "version": "0.0",
    "x-build-id": "nQ2KROg3hDuC9aPDe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unseenuser~fb-groups/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unseenuser-fb-groups",
        "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-groups/runs": {
      "post": {
        "operationId": "runs-sync-unseenuser-fb-groups",
        "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-groups/run-sync": {
      "post": {
        "operationId": "run-sync-unseenuser-fb-groups",
        "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": "Public group URLs",
            "minItems": 1,
            "type": "array",
            "description": "One or more public Facebook group URLs (or numeric group IDs). A sample public group is pre-filled so you can Run straight away - just replace it with your own. Private groups are not supported.",
            "items": {
              "type": "string"
            }
          },
          "maxPosts": {
            "title": "Max posts per group",
            "minimum": 0,
            "type": "integer",
            "description": "How many posts to fetch per group. Leave at 0 to fetch every available post. Tip: posts come in pages of 3, so small values round up to the next multiple of 3.",
            "default": 0
          },
          "onlyPostsNewerThan": {
            "title": "Only posts newer than (optional)",
            "type": "string",
            "description": "Skip posts older than this date. Accepts a date (e.g. 2026-07-01) or a full date-time. Leave empty to fetch posts of any age. Posts with no detectable timestamp are always kept."
          },
          "sortBy": {
            "title": "Sort posts by",
            "enum": [
              "RECENT_ACTIVITY",
              "TOP_POSTS",
              "CHRONOLOGICAL",
              "CHRONOLOGICAL_LISTINGS"
            ],
            "type": "string",
            "description": "A hint sent to Facebook for how to order posts; Facebook decides the final order. Recent activity and Top posts surface older, more-commented posts (more comment/reply rows). Chronological returns the newest posts first, which in a busy group are often brand-new with no comments yet. For a guaranteed engagement ranking, sort the finished dataset by the Reactions column in the Engagement view.",
            "default": "RECENT_ACTIVITY"
          },
          "fetchAllComments": {
            "title": "Fetch full comment threads",
            "type": "boolean",
            "description": "Fetch the full comment thread for every post (paginated). On by default. Billed add-on: each comment is its own result row, so this can significantly increase run cost on active groups.",
            "default": true
          },
          "fetchCommentReplies": {
            "title": "Fetch replies to comments",
            "type": "boolean",
            "description": "Also fetch replies for every comment. On by default. Billed add-on: each reply is its own result row. Only takes effect when 'Fetch full comment threads' is on. Replies are only requested for comments that actually have any.",
            "default": true
          },
          "includeTopComments": {
            "title": "Include top comments on each post",
            "type": "boolean",
            "description": "Attach the post's few 'top comments' inside the post object itself, at no extra cost (they come free with the post). This is separate from the full comment threads above. Off by default.",
            "default": false
          },
          "includeGroupProfile": {
            "title": "Include group profile row",
            "type": "boolean",
            "description": "Add one profile row per group with its public About-page data: member count, privacy, categories, rules, activity, description, and created date. No member or personal data (admin/moderator lists are excluded). Off by default; adds one extra result row per group.",
            "default": false
          },
          "verifyPublicBeforeScraping": {
            "title": "Verify group is public first",
            "type": "boolean",
            "description": "Check each group's About page before scraping and, if it isn't Public, skip it as 'private' (never billed) instead of guessing from a failed request. Adds one group-info request per group - but reuses the same request when 'Include group profile row' is also on, so there's no extra call in that case.",
            "default": false
          },
          "leadIntentDetection": {
            "title": "Lead-intent detection",
            "enum": [
              "off",
              "heuristic",
              "llm"
            ],
            "type": "string",
            "description": "Adds a 'leadIntent' object flagging buyer intent. 'Heuristic' uses keyword rules locally and sends no data anywhere. 'AI / LLM' is more accurate but TRANSMITS EACH CLASSIFIED POST'S TEXT TO ANTHROPIC'S API under your own key/account (Anthropic's data-use and retention policies apply), and adds cost and latency per item. You are the data controller for that transfer.",
            "default": "off"
          },
          "leadIntentScope": {
            "title": "What to classify",
            "enum": [
              "posts",
              "posts_and_comments",
              "all"
            ],
            "type": "string",
            "description": "Which rows get a 'leadIntent'. Comments can hold real buyer intent, but most are noise. WARNING: in AI / LLM mode each comment and reply is a separate Anthropic call - a post with 40 comments means 40 extra classifications, so wider scope can multiply cost and latency many times over. In free Heuristic mode, wider scope is cheap.",
            "default": "posts"
          },
          "leadIntentLlmModel": {
            "title": "AI model (LLM mode only)",
            "enum": [
              "claude-haiku-4-5",
              "claude-sonnet-5",
              "claude-opus-5"
            ],
            "type": "string",
            "description": "Only used in AI / LLM mode. Haiku is cheapest and best for high-volume runs; Opus is most accurate but costs far more per item. Advanced: the LEAD_INTENT_LLM_MODEL env var overrides this with any model id.",
            "default": "claude-haiku-4-5"
          },
          "anthropicApiKey": {
            "title": "Anthropic API key (LLM mode only)",
            "type": "string",
            "description": "Only used in AI / LLM mode. Paste your own Anthropic API key - it's stored encrypted and masked, billed on your own Anthropic account, and never written to the run's saved input snapshot or output. Leave empty to fall back to an ANTHROPIC_API_KEY environment variable, or if you're not using LLM mode."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}