{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Events Scraper — Past the 8-Event Limit",
    "description": "Scrape ALL Facebook events from any page, group, city, or keyword search, past the 8-event logged-out limit. Past events paginate too. No login, no browser. $4 per 1,000 events, all inclusive, versus the official scraper's $13.",
    "version": "0.1",
    "x-build-id": "2GsX2f0gnc8Htdwlb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapegeist~facebook-organizer-events-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapegeist-facebook-organizer-events-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/scrapegeist~facebook-organizer-events-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapegeist-facebook-organizer-events-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/scrapegeist~facebook-organizer-events-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapegeist-facebook-organizer-events-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": {
          "inputs": {
            "title": "Paste Facebook event, page, group, or city URLs (one per line)",
            "type": "array",
            "description": "Anything Facebook gives a URL to: events (https://www.facebook.com/events/123...), organizer/page URLs, organizer vanity names (TEDxAmsterdam), group URLs, or city/place pages (https://www.facebook.com/places/Things-to-do-in-Detroit-Michigan/114586701886732/ — also accepts the /events/explore/ form). Each line is auto-classified. Mix freely.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Or search Facebook events by keyword (one per line)",
            "type": "array",
            "description": "Free-text searches, e.g. \"techno berlin\" or \"comedy\". Use this when you do not have a URL. Keyword search reaches PAST events too, so set the events time range deliberately: the default \"upcoming\" drops past results, because Facebook returns both mixed together. Combine freely with the URL inputs above.",
            "items": {
              "type": "string"
            }
          },
          "cascadeDepth": {
            "title": "Cascade depth — how deep should it follow the social graph?",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "0 = scrape just what you paste (cheapest, fastest). 1 = also pull each organizer's full upcoming-events calendar AND each event's host profiles. 2 = follow co-host relationships one more hop. 3-5 = recursive deep cascade (use with the caps below to bound spend). Most users want 1. Example cost at $4 per 1,000 events (all-inclusive): a depth-1 organizer scrape with 50 events ≈ $0.20.",
            "default": 1
          },
          "eventsTimeRange": {
            "title": "Events time range",
            "enum": [
              "upcoming",
              "past",
              "both"
            ],
            "type": "string",
            "description": "Which events to include when expanding an organizer, group, or keyword search. Organizers AND groups now paginate fully in both directions: past events are not capped at 8, they page just like upcoming. Group rows carry fewer fields than organizer rows on both tabs (no cover photo or host), because Facebook's group listing does not include them. Keyword search returns past and upcoming results mixed, so this setting is a real filter there. City/place inputs are upcoming-only: Facebook's event-discovery feed exposes no past events, so those return nothing when you pick 'Only past events'.",
            "default": "upcoming"
          },
          "eventDetail": {
            "title": "Event detail level",
            "enum": [
              "full",
              "list"
            ],
            "type": "string",
            "description": "full = scrape every event's full detail (description, exact coordinates, ticket link, attendee count, end time, categories). list = emit events straight from the organizer/group listing with name, date, venue, city, cover photo, and host — but without the detail-only fields, and runs ~4x faster. Same per-event price either way. Cascade expansion works in both modes for organizers and groups; for city/place inputs it needs 'full', because Facebook's discovery feed does not name the event host. Directly-pasted event URLs always use full detail.",
            "default": "full"
          },
          "maxEventsPerOrganizer": {
            "title": "Max events per organizer / group / city / search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Caps how many events are pulled per expanded organizer, group, city, or keyword search. Raise it for cities: Facebook's discovery feed keeps paginating well past 200 events for a large city, and this cap is what stops it. It bounds cost directly, since the scraper stops fetching the moment the cap is reached. The global maxTotalEvents still applies on top.",
            "default": 50
          },
          "maxTotalEvents": {
            "title": "Max total events per run",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard global cap on events scraped per run. The cap is checked before each full event scrape, so you never pay for events you don't see. Default keeps spend under $2.00 at $4 / 1,000.",
            "default": 500
          },
          "maxTotalOrganizers": {
            "title": "Max total organizers per run",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard global cap on organizer profiles scraped per run. Bounds cascade breadth. Group and city inputs produce no organizer row by themselves — they only reach this cap via the hosts their events lead to.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxy is required — Facebook blocks datacenter IPs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}