{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Public Group Posts & Comments [Only $1.5💰] NO COOKIES",
    "description": "[Only $1.5💰] Scrape Facebook public group posts and comments extract text, dates, media URLs, author info, engagement metrics (likes/shares), and detailed comment threads. Perfect for social listening, market research, or tracking community trends. High-speed, stealthy, and requires no login",
    "version": "0.0",
    "x-build-id": "THesw41mGxi3ANaKq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~facebook-public-group-posts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-facebook-public-group-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-public-group-posts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-facebook-public-group-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-public-group-posts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-facebook-public-group-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 Group URLs",
            "type": "array",
            "description": "Full URLs to public Facebook groups you want to scrape.",
            "items": {
              "type": "string"
            }
          },
          "search": {
            "title": "Search / keyword filter",
            "type": "string",
            "description": "Only keep posts whose text contains your words. Matching is case-insensitive, and every word must appear somewhere in the post (order doesn't matter) — so \"visa grant\" keeps posts containing both words. Wrap the query in double quotes to require that exact phrase instead. Note this filters the posts the group feed returns; it does NOT search Facebook's archive, so it cannot find posts older than the feed reaches. You can also paste a group search URL (https://www.facebook.com/groups/<id>/search/?q=keyword) into the URLs field and the keyword is applied automatically. Leave empty to scrape all posts."
          },
          "searchKeywordByYear": {
            "title": "Search keyword by year",
            "minimum": 2004,
            "type": "integer",
            "description": "Optional. Keep only posts created in this calendar year (e.g. 2026). IMPORTANT: this filters the posts the group feed returns — it does NOT search Facebook's archive. Facebook only serves a limited window of a group's history (often ~6 months on a busy group), so setting a year older than that window returns zero results no matter how long the run goes. Leave empty unless you specifically want to narrow results to one year within the feed's range."
          },
          "includeComments": {
            "title": "Include Top Comments",
            "type": "boolean",
            "description": "If enabled, extracts the top/most interesting comments for each post.",
            "default": false
          },
          "enrichMarketplaceListings": {
            "title": "Enrich Marketplace listings (location + title)",
            "type": "boolean",
            "description": "If enabled, for each post that is a Marketplace/buy-sell listing the scraper makes one extra request to the listing page to add its location (text + latitude/longitude) and structured title, which the group feed does not include. This adds one request per listing, so runs are a bit slower. Non-listing posts are unaffected.",
            "default": false
          },
          "monitoringMode": {
            "title": "Monitoring mode (only new posts)",
            "type": "boolean",
            "description": "If enabled, the scraper remembers post IDs it has already returned in previous runs and delivers only posts it hasn't seen before. Ideal for scheduled runs that should return just what's new since last time. Pagination stops early once it reaches already-seen posts. Note: posts already seen are still checked (and billed at the lower additional-data rate) since they must be fetched to be recognized as duplicates.",
            "default": false
          },
          "viewOption": {
            "title": "View Option (Sorting)",
            "enum": [
              "CHRONOLOGICAL",
              "RECENT_ACTIVITY",
              "TOP_POSTS",
              "CHRONOLOGICAL_LISTINGS"
            ],
            "type": "string",
            "description": "How to sort the posts in the group feed. CHRONOLOGICAL = new posts (default), RECENT_ACTIVITY = newest activity, TOP_POSTS = most relevant, CHRONOLOGICAL_LISTINGS = buy/sell items.",
            "default": "CHRONOLOGICAL"
          },
          "onlyPostsNewerThan": {
            "title": "Posts newer than",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])(T[0-2]\\d:[0-5]\\d(:[0-5]\\d)?(\\.\\d+)?Z?)?$|^(\\d+)\\s*(minute|hour|day|week|month|year)s?$",
            "type": "string",
            "description": "Use this if you only want to scrape posts from a specific period of time. Accepts an absolute date (e.g. 2026-04-20) or a relative period (e.g. 30 days, 2 weeks); the scraper stops paginating once it reaches posts older than this."
          },
          "onlyPostsNewerThanHours": {
            "title": "Posts newer than (hours)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Keep only posts from the last N hours. If set, this overrides the date field above."
          },
          "maxItems": {
            "title": "Maximum number of posts per group",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of posts that will be scraped per group.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 3
          },
          "postsPerRequest": {
            "title": "Posts per request (advanced)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Advanced: how many posts to fetch per feed request. Higher values mean fewer requests to reach your target, which reduces the chance of rate-limiting. Leave at the default unless you know what you're doing.",
            "default": 3
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}