{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Groups Scraper: Posts of Public Groups",
    "description": "Facebook groups scraper, no login: a public group's feed by New posts, Newest activity, Most relevant or Buy and sell, with keyword and date filters. Rows hold author, reactions by type, top comments, photos, listing price and place, plus a group row with members. CSV, Excel, API; pay per post.",
    "version": "0.1",
    "x-build-id": "cdlGzU5bzL5NOi3aR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~facebook-groups-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-facebook-groups-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/automation_craft~facebook-groups-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-facebook-groups-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/automation_craft~facebook-groups-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-facebook-groups-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": {
          "groups": {
            "title": "Facebook groups",
            "type": "array",
            "description": "Public Facebook groups to read, one per line: a group URL (facebook.com/groups/selftaughtprogrammers), a group id (387875758242831) or a group name (selftaughtprogrammers). Up to 200 per run. A link with ?sorting_setting= keeps that order for its group, and a group's own search link (facebook.com/groups/<group>/search/?q=word) keeps only the posts with that word. Each public group read gives a group row (the Group event) and its posts. A private group, a group that does not exist, a link to one post, a page or a profile gets a free status row. Also read from startUrls, groupUrls, urls and groupIds.",
            "items": {
              "type": "string"
            }
          },
          "sortOrder": {
            "title": "Order",
            "enum": [
              "newest",
              "recent_activity",
              "relevant",
              "buy_and_sell"
            ],
            "type": "string",
            "description": "The order Facebook shows the group's feed in. newest reads strictly newest first, so a date window ends the walk at its start and a memory stops at posts it already handled; the other orders read the posts Facebook ranks first, the date window then only filters. New posts when left out. Also read from viewOption, sortingOrder and sortType, with Facebook's own names (CHRONOLOGICAL, RECENT_ACTIVITY, TOP_POSTS, CHRONOLOGICAL_LISTINGS) and new_posts, newest_posts, newest_activity, most_relevant and buy_sell_listings."
          },
          "maxPostsPerGroup": {
            "title": "Posts per group",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many posts of each group are read, in the chosen order. Posts already in your memory (free) and posts your keyword filter leaves out (Filtered posts) count toward this number. 20 when left out, at most 100,000. Also read from resultsLimit and postsPerGroup."
          },
          "maxPosts": {
            "title": "Post rows per run",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The cap of post rows for the whole run, across every group. No cap when left out: the per group number and your charge limit bound the run. Also read from maxItems and maxResults."
          },
          "maxConcurrency": {
            "title": "Groups read at once",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many groups are read at the same time, each through its own residential exits: 1 (left out) reads them one after another, up to 5 for runs of many groups. The prices do not change; the posts of each group come in its order."
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Only posts created at or after this moment (UTC): YYYY-MM-DD, YYYY-MM-DDTHH:MM, today, yesterday, \"7 days\", \"2 weeks\", \"3 months\" or \"24 hours\" (counted back from the run's start). With the New posts order the walk of a group ends at the first older post. Also read from onlyPostsNewerThan, postsNewerThan, newerThan, since, startDate and dateFrom, and as a whole number of hours or days from onlyPostsNewerThanHours, postsNewerThanHours and postsNewerThanDays."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only posts created at or before this moment (UTC), in the same forms. The newer posts the walk reads past to get there are charged as Filtered posts. Also read from onlyPostsOlderThan, postsOlderThan, olderThan, until, endDate and dateTo."
          },
          "keywords": {
            "title": "Keep posts with these words",
            "type": "array",
            "description": "Keep only posts whose text (or the shared post's text, or its listing, link or event title) holds at least one of these words or phrases as whole words, without regard to case. Each post read and left out is charged as a Filtered post (once per memory name across runs) and counts toward the posts per group. Also read from search, keyword and searchTerms.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Leave out posts with these words",
            "type": "array",
            "description": "Leave out posts that hold any of these words or phrases, matched the same way (each one read and left out is a Filtered post). Also read from excludedKeywords.",
            "items": {
              "type": "string"
            }
          },
          "knownPostIds": {
            "title": "Post ids to skip",
            "type": "array",
            "description": "Post ids you already have (numbers, up to 20,000): they are skipped free, like posts your memory knows.",
            "items": {
              "type": "string"
            }
          },
          "memoryName": {
            "title": "Memory name",
            "type": "string",
            "description": "A name for a memory kept between runs: posts and comments delivered under it are never delivered or charged again under it, and with the New posts order a group's walk stops at the posts an earlier run already handled. Use one name per schedule. Up to 100 letters, digits, spaces and . _ , : # ( ) -. Also read from monitorStoreName."
          },
          "onlyNewPosts": {
            "title": "Only new posts",
            "type": "boolean",
            "description": "Turn the memory on under the fixed name only-new-posts when you give no memory name. Also read from monitoringMode."
          },
          "resetMemory": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything the memory holds before this run (every post counts as new again)."
          },
          "resumeCursor": {
            "title": "Go on from a cursor",
            "type": "string",
            "description": "The nextCursor of a coverage row of an earlier run: the walk of ONE group goes on from there, in the order it was made under."
          },
          "includeTopComments": {
            "title": "Comments Facebook shows with each post",
            "type": "boolean",
            "description": "Each post row carries the one or two comments Facebook shows with the post (no extra call, no extra charge). On when left out. Also read from includeComments and includeTopComment."
          },
          "fetchAllComments": {
            "title": "All comments (add-on)",
            "type": "boolean",
            "description": "Read the comments of each delivered post that has any, oldest first, as their own comment rows: the Comment event for each. Also read from fetchComments."
          },
          "includeReplies": {
            "title": "Replies too (add-on)",
            "type": "boolean",
            "description": "With all comments: read the replies of each comment as comment rows too (the Comment event for each). Also read from includeCommentReplies and fetchCommentReplies."
          },
          "maxCommentsPerPost": {
            "title": "Comments per post",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The cap of comment rows per post, replies included. 50 when left out."
          },
          "listingDetails": {
            "title": "Listing details (add-on)",
            "type": "boolean",
            "description": "For each delivered buy and sell post, read its Marketplace listing: title, condition, category, status, place and delivery options (the Listing detail event, only when Facebook shows the details). Also read from enrichMarketplaceListings."
          },
          "transcripts": {
            "title": "Video transcripts (add-on)",
            "type": "boolean",
            "description": "For each delivered video post that has Facebook's own captions, add the caption text (the Transcript event, only when the video has captions). Also read from fetchTranscript."
          },
          "allPhotos": {
            "title": "Complete albums (add-on)",
            "type": "boolean",
            "description": "For each delivered post with more photos or videos than the group's feed lists (it lists the first five), add every item of the post's own photo set (the Complete album event, only when the set adds items). Also read from scrapePhotos, expandAlbums and includeAllPhotos."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off by default. On, rows also carry what Facebook shows of private people in their own fields: the profile ids and links of post authors, commenters, tagged people and sellers, a listing's seller name, the phone numbers and e-mail addresses written in posts and comments listed in phones and emails, and a listing's coordinates. Off, those fields are empty, and a link field that points to a person's profile or is a chat or call link is empty; display names stay. Either way nothing in a text is masked: posts, comments and descriptions are delivered as Facebook serves them. You are responsible for a lawful use of personal data (GDPR included)."
          },
          "rawStory": {
            "title": "Facebook's own story object (raw)",
            "type": "boolean",
            "description": "Add Facebook's own story object of each post as rawStory, beside the row's fields (no extra charge). It names every person on the post with their profile links, so it needs includePersonalData on. The object's shape is Facebook's and changes without notice."
          },
          "proxyCountry": {
            "title": "Exit country",
            "type": "string",
            "description": "The country of the residential exits that read the groups (two letters, US when left out). The posts are the same from any country."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}