{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Group Finder with Fit Score",
    "description": "Find public Facebook groups for your niche by keyword. Get member count, posts per day and month, description, privacy and a transparent 0-100 fit score, so community marketers can see where their audience is active. No Facebook login; group-level public data only.",
    "version": "0.1",
    "x-build-id": "iSOH0fKnnC7g8mnQO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kingly_contest_7cb~facebook-group-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kingly_contest_7cb-facebook-group-finder",
        "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/kingly_contest_7cb~facebook-group-finder/runs": {
      "post": {
        "operationId": "runs-sync-kingly_contest_7cb-facebook-group-finder",
        "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/kingly_contest_7cb~facebook-group-finder/run-sync": {
      "post": {
        "operationId": "run-sync-kingly_contest_7cb-facebook-group-finder",
        "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": [
          "keywords"
        ],
        "properties": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Topics to find groups for. Multi-word phrases are fine (e.g. \"boutique owners\"). Each keyword is searched separately; groups found by several keywords appear once.",
            "default": [
              "boutique owners"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerKeyword": {
            "title": "Max groups per keyword",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Stop after this many groups (that pass your filters) for each keyword. You pay per group returned.",
            "default": 3
          },
          "privacyFilter": {
            "title": "Group privacy",
            "enum": [
              "PUBLIC",
              "ANY"
            ],
            "type": "string",
            "description": "PUBLIC = only public groups (anyone can see posts). ANY = also include private groups (their member count, activity and description are still shown publicly by Facebook).",
            "default": "PUBLIC"
          },
          "minMembers": {
            "title": "Minimum members",
            "minimum": 0,
            "type": "integer",
            "description": "Skip groups smaller than this. Leave empty for no limit. Groups with unknown member count are skipped when this is set."
          },
          "nicheDescription": {
            "title": "Your niche (for the fit score)",
            "type": "string",
            "description": "Optional. A sentence describing your audience or offer, e.g. \"women's clothing boutique owners who sell online and want more customers\". Its words count for 30% of the relevance part of the fit score."
          },
          "requireKeywordMatch": {
            "title": "Only groups that match a keyword",
            "type": "boolean",
            "description": "Search engines sometimes return unrelated groups. When on, a group is kept only if its name, description or topics contain every distinctive word of the keyword it was found for (generic words like 'recipes', 'owners' or 'store' don't count on their own). Skipped groups are not charged.",
            "default": true
          },
          "searchEngine": {
            "title": "Discovery engine",
            "enum": [
              "google",
              "google_actor",
              "duckduckgo"
            ],
            "type": "string",
            "description": "How groups are discovered (Facebook's own group search needs a login). google_actor = calls the apify/google-search-scraper Actor (recommended; its run, a few cents per keyword set, is billed to your account separately). google = Google via Apify's Google SERP proxy (no extra Actor run, but slower and found fewer groups in testing). duckduckgo = free, but often rate-limited.",
            "default": "google_actor"
          },
          "maxSearchPagesPerQuery": {
            "title": "Max search pages per query",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Each keyword runs 2 search queries; this caps how many result pages (10 results each) are read per query. Leave empty for automatic: 2 pages when you ask for up to 5 groups per keyword, 3 pages up to 10, 5 pages above that. Each page costs a Google Search Scraper page event, so more pages cost more."
          },
          "maxConcurrency": {
            "title": "Max parallel group page requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Keep low to avoid Facebook rate limits.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy for Facebook requests",
            "type": "object",
            "description": "Facebook shows a login wall to IPs that view many pages. Residential proxy gives each request a new IP.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "healthCheck": {
            "title": "Health check mode",
            "type": "boolean",
            "description": "For monitoring only: ignores keywords and runs 3 fixed keywords (boutique owners, shopify store owners, keto recipes), max 3 groups each, pushes no dataset items and fails if any keyword returns nothing. Result is in the HEALTH_CHECK key-value record.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}