{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Group Scraper With AI Enrichment",
    "description": "Scrape public Facebook group details with the Facebook Group Profile Scraper. Extract group names, descriptions, member counts, admins, categories, and activity insights. Ideal for market research, community analysis, and monitoring. Fast, reliable, and scalable for multiple group profiles.",
    "version": "0.1",
    "x-build-id": "TfOveIR6ii4ImvBo0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapier~facebook-group-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapier-facebook-group-profile-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/scrapier~facebook-group-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapier-facebook-group-profile-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/scrapier~facebook-group-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapier-facebook-group-profile-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": {
          "startUrls": {
            "title": "🔗 Group URLs / Container URLs",
            "type": "array",
            "description": "Facebook group URLs to scrape (e.g. https://www.facebook.com/groups/535363634111893), numeric group IDs, group vanity handles, OR container URLs that list many groups (e.g. https://www.facebook.com/search/groups/?q=packaging). Container URLs are parsed for the group links they contain and each discovered group is then scraped. Example: one group URL + one search URL → the group plus every group found on the search page. Default: empty.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "🔍 Discovery Keywords",
            "type": "array",
            "description": "Keywords Radar searches Facebook for, then scrapes whatever groups it finds. Example: [\"packaging suppliers\", \"terrain theory\"] → Radar looks up matching groups per keyword and scrapes them. Note: logged-out Facebook group search is frequently gated behind a login wall in datacenter regions; when that happens the query is reported as \"blocked\" in the log and returns no groups (use container URLs or direct group URLs instead). Default: empty.",
            "items": {
              "type": "string"
            }
          },
          "maxGroupsPerQuery": {
            "title": "🔢 Max Groups Per Keyword",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Caps how many discovered groups are scraped per keyword / container URL. Example: 10 → at most 10 groups per keyword. Default: 10.",
            "default": 10
          },
          "minMembers": {
            "title": "👥 Minimum Members",
            "minimum": 0,
            "type": "integer",
            "description": "Groups whose parsed member count is below this are dropped from the output and the ranking. Example: minMembers=1000 → only groups with 1,000+ members are returned. Default: 0 (keep all).",
            "default": 0
          },
          "rankBy": {
            "title": "🏆 Rank By",
            "enum": [
              "qualityScore",
              "members",
              "activityScore"
            ],
            "type": "string",
            "description": "Metric used to sort groups and assign the `rank` field. `qualityScore` = composite of size, activity and governance; `members` = raw member count; `activityScore` = avg posts/day. Example: rankBy=members → biggest groups get rank 1. Default: qualityScore.",
            "default": "qualityScore"
          },
          "keywords": {
            "title": "✅ Include Keywords",
            "type": "array",
            "description": "Keep only groups whose name or description contains at least one of these (case-insensitive). Example: [\"packaging\"] drops groups that never mention packaging. Default: empty (no include filter).",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "🚫 Exclude Keywords",
            "type": "array",
            "description": "Drop any group whose name or description contains one of these (case-insensitive). Example: [\"buy\", \"sell\"] removes marketplace groups. Default: empty (no exclude filter).",
            "items": {
              "type": "string"
            }
          },
          "enrichLeads": {
            "title": "🧑‍💼 Build Admin/Moderator Leads",
            "type": "boolean",
            "description": "When on, admin & moderator profiles are turned into enriched lead objects (name, role, url, profileId, profileType, and a messageUrl for numeric-ID profiles). Turn off to skip the leads block. Default: true.",
            "default": true
          },
          "aiEnhancement": {
            "title": "🤖 AI Enhancement (optional)",
            "type": "boolean",
            "description": "OPTIONAL. When on, an LLM reads each group's name + description and classifies its niche/topic and estimates lead quality. Requires an API key below. Off = no AI, no extra cost. Note: logged-out groups often expose little/no description, so AI has thin input — leave off unless your targets have rich About text. Default: false.",
            "default": false
          },
          "aiModel": {
            "title": "🤖 AI Model / Provider",
            "enum": [
              "claude-haiku-4-5",
              "claude-sonnet-5",
              "claude-opus-4-8",
              "claude-fable-5",
              "gpt-4o-mini",
              "gpt-4o",
              "gpt-4.1-mini",
              "gpt-4.1",
              "o3-mini",
              "o1",
              "gemini-2.0-flash-lite",
              "gemini-2.0-flash",
              "gemini-1.5-pro",
              "gemini-2.5-flash",
              "gemini-2.5-pro",
              "grok-2-latest",
              "grok-3-mini",
              "grok-3",
              "grok-beta",
              "deepseek-chat",
              "deepseek-reasoner",
              "sonar",
              "sonar-pro",
              "sonar-reasoning",
              "mistral-small-latest",
              "mistral-large-latest"
            ],
            "type": "string",
            "description": "Provider auto-detected from the name: claude-*=Anthropic, gpt-*/o1/o3=OpenAI, gemini-*=Google, grok-*=xAI, deepseek-*=DeepSeek, sonar*=Perplexity, mistral-*=Mistral. Cheaper mini/flash/haiku/lite models are recommended for classification. Only used when AI Enhancement is on. Default: claude-haiku-4-5.",
            "default": "claude-haiku-4-5"
          },
          "aiApiKey": {
            "title": "🔑 AI API Key",
            "type": "string",
            "description": "API key for the selected provider. Only required when AI Enhancement is on. If left blank, Radar falls back to the provider's env var (ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY/GOOGLE_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, PERPLEXITY_API_KEY, MISTRAL_API_KEY). Stored as a secret."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "Proxy used for all Facebook requests. Facebook blocks datacenter IPs heavily; Radar falls back to Apify datacenter then residential proxies with retries if the first attempt looks like a login/redirect page. Recommended: enable Apify residential proxy. Default: no proxy."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}