{
  "data": {
    "id": "k2U4MYmHDAlszwlFn",
    "actId": "xSp7vACk0FpUckkaH",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-23T05:48:50.620Z",
    "finishedAt": "2026-10-23T05:49:05.599Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 14818,
      "runTimeSecs": 14.818,
      "computeUnits": 0.016464444444444445,
      "imageSizeBytes": 356878848
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Facebook Events Scraper\",\n  \"description\": \"Scrape public Facebook event details, organizer Upcoming/Past listings, and keyword search with date, category and location filters. No login or cookies required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"eventUrls\": {\n      \"title\": \"Event, organizer or search URLs\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Facebook event URLs or IDs, organizer event pages (e.g. https://www.facebook.com/TED/events, /upcoming_hosted_events, /past_hosted_events), or an events search URL. Group event URLs are skipped because they require login.\",\n      \"prefill\": [\n        \"https://www.facebook.com/events/1855253805343101\"\n      ],\n      \"sectionCaption\": \"Input\",\n      \"sectionDescription\": \"Add at least one event/page URL, search query, or search location.\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Keywords for Facebook's public events search (e.g. \\\"music festival\\\", \\\"tech conference\\\"). Each query is paginated up to Max results.\",\n      \"sectionCaption\": \"Input\"\n    },\n    \"searchLocation\": {\n      \"title\": \"Search location text\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"City or place text added to each search query (e.g. \\\"Chicago\\\"). This is a keyword hint, not a strict geographic filter; use Location ID for a strict filter.\",\n      \"sectionCaption\": \"Input\"\n    },\n    \"locationId\": {\n      \"title\": \"Location ID (strict)\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"Optional Facebook place ID or /places/<id>/ URL for a location filter on search. Facebook's place scope can include nearby cities. Text-to-ID lookup requires login, which this actor does not use.\",\n      \"sectionCaption\": \"Filters\"\n    },\n    \"startDate\": {\n      \"title\": \"Start date\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"Optional search filter lower bound in YYYY-MM-DD format (e.g. 2026-12-01). Applies to search queries only.\",\n      \"sectionCaption\": \"Filters\"\n    },\n    \"endDate\": {\n      \"title\": \"End date\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"Optional search filter upper bound in YYYY-MM-DD format. Equal to Start date selects one day.\",\n      \"sectionCaption\": \"Filters\"\n    },\n    \"category\": {\n      \"title\": \"Category\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"default\": \"Any\",\n      \"description\": \"Optional server-side category filter for search queries. Categories are host-set, so some events have none.\",\n      \"enum\": [\n        \"Any\",\n        \"Art\",\n        \"Causes\",\n        \"Comedy\",\n        \"Crafts\",\n        \"Dance\",\n        \"Drinks\",\n        \"Film\",\n        \"Fitness\",\n        \"Food\",\n        \"Games\",\n        \"Gardening\",\n        \"Health\",\n        \"Home\",\n        \"Literature\",\n        \"Music\",\n        \"Networking\",\n        \"Other\",\n        \"Party\",\n        \"Religion\",\n        \"Shopping\",\n        \"Sports\",\n        \"Theatre\",\n        \"Wellness\"\n      ],\n      \"enumTitles\": [\n        \"Any category\",\n        \"Art\",\n        \"Causes\",\n        \"Comedy\",\n        \"Crafts\",\n        \"Dance\",\n        \"Drinks\",\n        \"Film\",\n        \"Fitness\",\n        \"Food\",\n        \"Games\",\n        \"Gardening\",\n        \"Health\",\n        \"Home\",\n        \"Literature\",\n        \"Music\",\n        \"Networking\",\n        \"Other\",\n        \"Party\",\n        \"Religion\",\n        \"Shopping\",\n        \"Sports\",\n        \"Theatre\",\n        \"Wellness\"\n      ],\n      \"sectionCaption\": \"Filters\"\n    },\n    \"includePastEvents\": {\n      \"title\": \"Include past events (organizer pages)\",\n      \"type\": \"boolean\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"For organizer pages, fetch the Past collection instead of Upcoming. Ignored for event URLs and search.\",\n      \"sectionCaption\": \"Options\"\n    },\n    \"includeOccurrences\": {\n      \"title\": \"Expand recurring event dates\",\n      \"type\": \"boolean\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"For recurring events, add every occurrence date and URL to the event record. Uses one extra request only when the event is recurring.\",\n      \"sectionCaption\": \"Options\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max results per target\",\n      \"type\": \"integer\",\n      \"editor\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 50,\n      \"description\": \"Maximum events per organizer listing or search query. A direct event URL always returns its one event.\",\n      \"sectionCaption\": \"Options\"\n    },\n    \"monitorMode\": {\n      \"title\": \"Monitor mode (only new events)\",\n      \"type\": \"boolean\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"For organizer pages and searches, output only events not seen by an earlier run for the same target. The first run is a baseline. State is a named Apify store, is actor-wide (not per user), and is shared by all runs of this actor for the same target; clearing it or changing the target re-emits all events.\",\n      \"sectionCaption\": \"Options\"\n    }\n  }\n}",
    "readme": "# Facebook Event Details & New-Event Monitor Scraper\n\nRead public Facebook event pages, organizer event lists, and keyword search results without logging in. Get dates and time zones, venue and GPS when Facebook exposes them, hosts, ticket links and prices, recurring-series dates, and an optional only-new mode for scheduled runs.\n\n## What this actor does\n\n- **Event details by URL or ID:** name, description, start/end time, time zone, venue, coordinates, cover, hosts, creator, categories, tickets and online links.\n- **Organizer Upcoming and Past:** read `/PageName/events`, `/PageName/upcoming_hosted_events`, or `/PageName/past_hosted_events`; page through the whole list up to your limit instead of stopping at the first batch.\n- **Keyword search:** search Facebook's public events index and page through results. Optional date range, category, and location-ID filters (Facebook's place scope can include nearby cities).\n- **Recurring series:** optionally add every occurrence date and URL for recurring events.\n- **Monitor mode:** on a schedule, return only events not seen by an earlier run for the same organizer/search target. State is scoped to the Apify user who runs the actor, so separate users do not share history.\n- **Durable images:** cover and host photos are copied into Apify storage; the original signed URL is kept beside the stored one.\n\nEmpty fields are omitted. The actor never fills a missing value with `null`, `0`, or a placeholder.\n\n## Output per event\n\n| Field | Description |\n|---|---|\n| `event_id`, `name`, `description`, `url` | Event identity and text. |\n| `start_timestamp`, `end_timestamp` | Unix timestamps when the source provides them. |\n| `start_date`, `end_date`, `formatted_date`, `timezone` | ISO dates, Facebook's own date sentence, and the event's time zone. |\n| `is_online`, `is_canceled`, `is_past`, `is_sale_event` | Present when Facebook carries the flag. `is_canceled` is also inferred from a cancellation word in the event name when the flag is absent. |\n| `event_kind`, `rsvp_style`, `event_frequency` | Visibility, RSVP style, recurring-series frequency. |\n| `has_child_events`, `child_events_count` | Recurrence signals. |\n| `occurrences[]` | When enabled: `{event_id,url,start_timestamp,end_timestamp,start_date,end_date}` for every series date. |\n| `parent_event_id` | Present when the returned event is one occurrence of a series. |\n| `location_name`, `location_address`, `location_city`, `location_city_id` | Venue text and city identifiers when exposed. |\n| `one_line_address` | Facebook's normalized full address when available. |\n| `latitude`, `longitude` | Venue GPS when the venue exposes coordinates. |\n| `venue_place_id`, `venue_place_type`, `venue_url`, `venue_is_user_specified_location` | Venue metadata. |\n| `photo_url`, `photo_url_original`, `photo_width`, `photo_height`, `photo_caption` | Stored cover image, its original signed URL, and dimensions/caption. |\n| `video_url`, `video_url_original` | Cover video and original URL when downloadable; the original is retained if it is too large to rehost. |\n| `hosts[]` | `{id,name,url,type,is_verified,profile_picture_url,profile_picture_url_original}`. |\n| `creator` | `{id,name,type}` when Facebook exposes the creator. |\n| `categories[]`, `category_urls[]` | Host-set categories and Facebook's category search links. |\n| `ticket_url`, `ticket_provider`, `ticket_price_text` | Ticket link, provider, and the price text Facebook shows. Structured price tiers are not public. |\n| `description_links[]` | External links Facebook recognized in the description. |\n| `online_type`, `online_url` | Online-event type and registration/live link when shown. |\n| `duration` | Facebook's duration text (e.g. `2 hr`). |\n| `users_responded` | Combined response count; omitted when Facebook does not expose it. |\n| `source_type` | `event_url`, `page_events`, `search`, or `occurrence`. |\n| `input_url`, `scraped_at` | The target that produced the row and collection time. |\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `eventUrls` | string list | – | Event URLs or IDs, organizer event pages, or an events search URL. The prefill contains one example event. |\n| `searchQueries` | string list | – | Keywords for event search. |\n| `searchLocation` | string | – | City/place text added to each query. This is a relevance hint, not a strict filter. |\n| `locationId` | string | – | Numeric Facebook place ID or `/places/<id>/` URL for a location filter. Facebook's place scope can include nearby cities. |\n| `startDate`, `endDate` | string | – | `YYYY-MM-DD` search range. |\n| `category` | select | Any | One of Facebook's event categories. |\n| `includePastEvents` | boolean | false | Organizer pages: read Past instead of Upcoming. |\n| `includeOccurrences` | boolean | false | Add every date of a recurring series. |\n| `maxItems` | integer | 50 | Per organizer listing or search query (1–1000). |\n| `monitorMode` | boolean | false | Only events not seen by a previous run for the same target. |\n\n### Examples\n\n```json\n{\n  \"eventUrls\": [\"https://www.facebook.com/events/1855253805343101\"],\n  \"includeOccurrences\": true\n}\n```\n\n```json\n{\n  \"eventUrls\": [\"https://www.facebook.com/TED/upcoming_hosted_events\"],\n  \"maxItems\": 100,\n  \"monitorMode\": true\n}\n```\n\n```json\n{\n  \"searchQueries\": [\"food festival\"],\n  \"searchLocation\": \"Chicago\",\n  \"startDate\": \"2026-11-01\",\n  \"endDate\": \"2026-11-30\",\n  \"category\": \"Food\",\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- Build a local what's-on calendar from venues and organizers.\n- Watch an organizer's page on a schedule and report only newly posted events.\n- Collect dates, venues, ticket links and host details for event directories.\n- Research recurring series across a city or category.\n- Map events that expose coordinates.\n\n## FAQ\n\n**Do I need a Facebook login or cookies?** No. The actor reads only public pages. Group events, private events, and city-name typeahead require login and are not supported.\n\n**Why is a venue address or GPS missing?** Many Facebook events use free-text locations without coordinates. The actor returns what the event exposes and omits the rest; it never geocodes or invents a location.\n\n**Why did a search return fewer results than I asked for?** Facebook's public search index is relevance-ranked and changes between requests; categories are host-set and often empty. The actor retries a throttled first page and logs a warning when pagination stops short of your limit. Facebook can also end a deep result set early without an error; that can look like exhaustion, so a shortfall is not always flagged. It never fabricates rows to fill the gap.\n\n**How does monitor mode decide what is new?** It stores the event IDs already reported for each organizer/search target in an Apify key-value store. State is scoped to the Apify user who runs the actor, so separate users do not share history for the same target. Runs without a user identity use a stable anonymous scope. The first run is a baseline; later runs omit seen IDs. Clearing the store, changing the target, or losing state causes a new baseline. There is no webhook; schedule the actor and read the dataset. Concurrent runs can race.\n\n**Can I get every date of a recurring event?** Yes when the event exposes child occurrences. Turn on `includeOccurrences`; the record gets an `occurrences[]` list. A one-off event has no list.\n\n**Can I filter by city?** Use `locationId` with a numeric Facebook place ID or `/places/<id>/` URL. Facebook's place scope can include nearby cities, so treat it as best-effort, not an exact city boundary. Facebook's city text lookup needs login, so `searchLocation` is a keyword hint only.\n\n**Can I get attendee lists or separate going/interested counts?** No. Facebook restricts attendee identities, and it no longer exposes separate going/interested figures to logged-out visitors. `users_responded` is the combined public count; there is no separate `interested` field.\n\n**Do group events work?** No. Facebook Groups require a logged-in session, so group event URLs are skipped with a warning.\n\n**Are images permanent?** Cover and host images are copied into Apify storage and the original signed URL is kept in `*_original`. Facebook CDN originals expire after a few days.\n\n**Is this affiliated with Facebook or Meta?** No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc.\n\n## Limits\n\n- No group events, private events, guest lists, or split going/interested counts.\n- No true radius/nearby search; a location filter needs a Facebook place ID, and its scope can include nearby cities.\n- GPS and street addresses are conditional on what the venue exposes.\n- Ticket price is text only; structured price tiers are not public.\n- Search results are dynamic; a retry can still return fewer rows than requested.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "facebook-event-details-and-new-event-monitor",
      "title": "Facebook Event Details & New-Event Monitor Scraper",
      "description": "Fetch public Facebook event details by URL, organizer listing, or keyword search. Get venue GPS and address when Facebook exposes it, hosts, tickets, recurring dates, and optional only-new monitoring.",
      "version": "1.0",
      "buildTag": "latest",
      "meta": {
        "templateId": "python-start"
      },
      "categories": [
        "SOCIAL_MEDIA"
      ],
      "defaultRunOptions": {
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      },
      "readme": "# Facebook Event Details & New-Event Monitor Scraper\n\nRead public Facebook event pages, organizer event lists, and keyword search results without logging in. Get dates and time zones, venue and GPS when Facebook exposes them, hosts, ticket links and prices, recurring-series dates, and an optional only-new mode for scheduled runs.\n\n## What this actor does\n\n- **Event details by URL or ID:** name, description, start/end time, time zone, venue, coordinates, cover, hosts, creator, categories, tickets and online links.\n- **Organizer Upcoming and Past:** read `/PageName/events`, `/PageName/upcoming_hosted_events`, or `/PageName/past_hosted_events`; page through the whole list up to your limit instead of stopping at the first batch.\n- **Keyword search:** search Facebook's public events index and page through results. Optional date range, category, and location-ID filters (Facebook's place scope can include nearby cities).\n- **Recurring series:** optionally add every occurrence date and URL for recurring events.\n- **Monitor mode:** on a schedule, return only events not seen by an earlier run for the same organizer/search target. State is scoped to the Apify user who runs the actor, so separate users do not share history.\n- **Durable images:** cover and host photos are copied into Apify storage; the original signed URL is kept beside the stored one.\n\nEmpty fields are omitted. The actor never fills a missing value with `null`, `0`, or a placeholder.\n\n## Output per event\n\n| Field | Description |\n|---|---|\n| `event_id`, `name`, `description`, `url` | Event identity and text. |\n| `start_timestamp`, `end_timestamp` | Unix timestamps when the source provides them. |\n| `start_date`, `end_date`, `formatted_date`, `timezone` | ISO dates, Facebook's own date sentence, and the event's time zone. |\n| `is_online`, `is_canceled`, `is_past`, `is_sale_event` | Present when Facebook carries the flag. `is_canceled` is also inferred from a cancellation word in the event name when the flag is absent. |\n| `event_kind`, `rsvp_style`, `event_frequency` | Visibility, RSVP style, recurring-series frequency. |\n| `has_child_events`, `child_events_count` | Recurrence signals. |\n| `occurrences[]` | When enabled: `{event_id,url,start_timestamp,end_timestamp,start_date,end_date}` for every series date. |\n| `parent_event_id` | Present when the returned event is one occurrence of a series. |\n| `location_name`, `location_address`, `location_city`, `location_city_id` | Venue text and city identifiers when exposed. |\n| `one_line_address` | Facebook's normalized full address when available. |\n| `latitude`, `longitude` | Venue GPS when the venue exposes coordinates. |\n| `venue_place_id`, `venue_place_type`, `venue_url`, `venue_is_user_specified_location` | Venue metadata. |\n| `photo_url`, `photo_url_original`, `photo_width`, `photo_height`, `photo_caption` | Stored cover image, its original signed URL, and dimensions/caption. |\n| `video_url`, `video_url_original` | Cover video and original URL when downloadable; the original is retained if it is too large to rehost. |\n| `hosts[]` | `{id,name,url,type,is_verified,profile_picture_url,profile_picture_url_original}`. |\n| `creator` | `{id,name,type}` when Facebook exposes the creator. |\n| `categories[]`, `category_urls[]` | Host-set categories and Facebook's category search links. |\n| `ticket_url`, `ticket_provider`, `ticket_price_text` | Ticket link, provider, and the price text Facebook shows. Structured price tiers are not public. |\n| `description_links[]` | External links Facebook recognized in the description. |\n| `online_type`, `online_url` | Online-event type and registration/live link when shown. |\n| `duration` | Facebook's duration text (e.g. `2 hr`). |\n| `users_responded` | Combined response count; omitted when Facebook does not expose it. |\n| `source_type` | `event_url`, `page_events`, `search`, or `occurrence`. |\n| `input_url`, `scraped_at` | The target that produced the row and collection time. |\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `eventUrls` | string list | – | Event URLs or IDs, organizer event pages, or an events search URL. The prefill contains one example event. |\n| `searchQueries` | string list | – | Keywords for event search. |\n| `searchLocation` | string | – | City/place text added to each query. This is a relevance hint, not a strict filter. |\n| `locationId` | string | – | Numeric Facebook place ID or `/places/<id>/` URL for a location filter. Facebook's place scope can include nearby cities. |\n| `startDate`, `endDate` | string | – | `YYYY-MM-DD` search range. |\n| `category` | select | Any | One of Facebook's event categories. |\n| `includePastEvents` | boolean | false | Organizer pages: read Past instead of Upcoming. |\n| `includeOccurrences` | boolean | false | Add every date of a recurring series. |\n| `maxItems` | integer | 50 | Per organizer listing or search query (1–1000). |\n| `monitorMode` | boolean | false | Only events not seen by a previous run for the same target. |\n\n### Examples\n\n```json\n{\n  \"eventUrls\": [\"https://www.facebook.com/events/1855253805343101\"],\n  \"includeOccurrences\": true\n}\n```\n\n```json\n{\n  \"eventUrls\": [\"https://www.facebook.com/TED/upcoming_hosted_events\"],\n  \"maxItems\": 100,\n  \"monitorMode\": true\n}\n```\n\n```json\n{\n  \"searchQueries\": [\"food festival\"],\n  \"searchLocation\": \"Chicago\",\n  \"startDate\": \"2026-11-01\",\n  \"endDate\": \"2026-11-30\",\n  \"category\": \"Food\",\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- Build a local what's-on calendar from venues and organizers.\n- Watch an organizer's page on a schedule and report only newly posted events.\n- Collect dates, venues, ticket links and host details for event directories.\n- Research recurring series across a city or category.\n- Map events that expose coordinates.\n\n## FAQ\n\n**Do I need a Facebook login or cookies?** No. The actor reads only public pages. Group events, private events, and city-name typeahead require login and are not supported.\n\n**Why is a venue address or GPS missing?** Many Facebook events use free-text locations without coordinates. The actor returns what the event exposes and omits the rest; it never geocodes or invents a location.\n\n**Why did a search return fewer results than I asked for?** Facebook's public search index is relevance-ranked and changes between requests; categories are host-set and often empty. The actor retries a throttled first page and logs a warning when pagination stops short of your limit. Facebook can also end a deep result set early without an error; that can look like exhaustion, so a shortfall is not always flagged. It never fabricates rows to fill the gap.\n\n**How does monitor mode decide what is new?** It stores the event IDs already reported for each organizer/search target in an Apify key-value store. State is scoped to the Apify user who runs the actor, so separate users do not share history for the same target. Runs without a user identity use a stable anonymous scope. The first run is a baseline; later runs omit seen IDs. Clearing the store, changing the target, or losing state causes a new baseline. There is no webhook; schedule the actor and read the dataset. Concurrent runs can race.\n\n**Can I get every date of a recurring event?** Yes when the event exposes child occurrences. Turn on `includeOccurrences`; the record gets an `occurrences[]` list. A one-off event has no list.\n\n**Can I filter by city?** Use `locationId` with a numeric Facebook place ID or `/places/<id>/` URL. Facebook's place scope can include nearby cities, so treat it as best-effort, not an exact city boundary. Facebook's city text lookup needs login, so `searchLocation` is a keyword hint only.\n\n**Can I get attendee lists or separate going/interested counts?** No. Facebook restricts attendee identities, and it no longer exposes separate going/interested figures to logged-out visitors. `users_responded` is the combined public count; there is no separate `interested` field.\n\n**Do group events work?** No. Facebook Groups require a logged-in session, so group event URLs are skipped with a warning.\n\n**Are images permanent?** Cover and host images are copied into Apify storage and the original signed URL is kept in `*_original`. Facebook CDN originals expire after a few days.\n\n**Is this affiliated with Facebook or Meta?** No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc.\n\n## Limits\n\n- No group events, private events, guest lists, or split going/interested counts.\n- No true radius/nearby search; a location filter needs a Facebook place ID, and its scope can include nearby cities.\n- GPS and street addresses are conditional on what the venue exposes.\n- Ticket price is text only; structured price tiers are not public.\n- Search results are dynamic; a retry can still return fewer rows than requested.\n",
      "input": {
        "title": "Facebook Events Scraper",
        "description": "Scrape public Facebook event details, organizer Upcoming/Past listings, and keyword search with date, category and location filters. No login or cookies required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "eventUrls": {
            "title": "Event, organizer or search URLs",
            "type": "array",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "description": "Facebook event URLs or IDs, organizer event pages (e.g. https://www.facebook.com/TED/events, /upcoming_hosted_events, /past_hosted_events), or an events search URL. Group event URLs are skipped because they require login.",
            "prefill": [
              "https://www.facebook.com/events/1855253805343101"
            ],
            "sectionCaption": "Input",
            "sectionDescription": "Add at least one event/page URL, search query, or search location."
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "description": "Keywords for Facebook's public events search (e.g. \"music festival\", \"tech conference\"). Each query is paginated up to Max results.",
            "sectionCaption": "Input"
          },
          "searchLocation": {
            "title": "Search location text",
            "type": "string",
            "editor": "textfield",
            "description": "City or place text added to each search query (e.g. \"Chicago\"). This is a keyword hint, not a strict geographic filter; use Location ID for a strict filter.",
            "sectionCaption": "Input"
          },
          "locationId": {
            "title": "Location ID (strict)",
            "type": "string",
            "editor": "textfield",
            "description": "Optional Facebook place ID or /places/<id>/ URL for a location filter on search. Facebook's place scope can include nearby cities. Text-to-ID lookup requires login, which this actor does not use.",
            "sectionCaption": "Filters"
          },
          "startDate": {
            "title": "Start date",
            "type": "string",
            "editor": "textfield",
            "description": "Optional search filter lower bound in YYYY-MM-DD format (e.g. 2026-12-01). Applies to search queries only.",
            "sectionCaption": "Filters"
          },
          "endDate": {
            "title": "End date",
            "type": "string",
            "editor": "textfield",
            "description": "Optional search filter upper bound in YYYY-MM-DD format. Equal to Start date selects one day.",
            "sectionCaption": "Filters"
          },
          "category": {
            "title": "Category",
            "type": "string",
            "editor": "select",
            "default": "Any",
            "description": "Optional server-side category filter for search queries. Categories are host-set, so some events have none.",
            "enum": [
              "Any",
              "Art",
              "Causes",
              "Comedy",
              "Crafts",
              "Dance",
              "Drinks",
              "Film",
              "Fitness",
              "Food",
              "Games",
              "Gardening",
              "Health",
              "Home",
              "Literature",
              "Music",
              "Networking",
              "Other",
              "Party",
              "Religion",
              "Shopping",
              "Sports",
              "Theatre",
              "Wellness"
            ],
            "enumTitles": [
              "Any category",
              "Art",
              "Causes",
              "Comedy",
              "Crafts",
              "Dance",
              "Drinks",
              "Film",
              "Fitness",
              "Food",
              "Games",
              "Gardening",
              "Health",
              "Home",
              "Literature",
              "Music",
              "Networking",
              "Other",
              "Party",
              "Religion",
              "Shopping",
              "Sports",
              "Theatre",
              "Wellness"
            ],
            "sectionCaption": "Filters"
          },
          "includePastEvents": {
            "title": "Include past events (organizer pages)",
            "type": "boolean",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "description": "For organizer pages, fetch the Past collection instead of Upcoming. Ignored for event URLs and search.",
            "sectionCaption": "Options"
          },
          "includeOccurrences": {
            "title": "Expand recurring event dates",
            "type": "boolean",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "description": "For recurring events, add every occurrence date and URL to the event record. Uses one extra request only when the event is recurring.",
            "sectionCaption": "Options"
          },
          "maxItems": {
            "title": "Max results per target",
            "type": "integer",
            "editor": "number",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 50,
            "description": "Maximum events per organizer listing or search query. A direct event URL always returns its one event.",
            "sectionCaption": "Options"
          },
          "monitorMode": {
            "title": "Monitor mode (only new events)",
            "type": "boolean",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "description": "For organizer pages and searches, output only events not seen by an earlier run for the same target. The first run is a baseline. State is a named Apify store, is actor-wide (not per user), and is shared by all runs of this actor for the same target; clearing it or changing the target re-emits all events.",
            "sectionCaption": "Options"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Facebook Event Details, Organizer Listings & Search Output",
        "description": "Public Facebook event records with dates, venue and GPS (when exposed), hosts, ticket data, recurring occurrences, online links and monitor-filtered results.",
        "properties": {
          "events": {
            "type": "string",
            "title": "Event Data",
            "description": "Dataset containing all scraped Facebook events",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Facebook Events Data",
          "views": {
            "overview": {
              "title": "Event Overview",
              "transformation": {
                "fields": [
                  "event_id",
                  "name",
                  "formatted_date",
                  "location_name",
                  "ticket_price_text",
                  "users_responded",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "event_id": {
                    "label": "Event ID",
                    "format": "text"
                  },
                  "name": {
                    "label": "Event Name",
                    "format": "text"
                  },
                  "formatted_date": {
                    "label": "Date",
                    "format": "text"
                  },
                  "location_name": {
                    "label": "Venue",
                    "format": "text"
                  },
                  "ticket_price_text": {
                    "label": "Tickets",
                    "format": "text"
                  },
                  "users_responded": {
                    "label": "Responded",
                    "format": "number"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "f4d2c43672f21bd25ab82fa14d377404e7dfa17692a865f8fb26a0457286706d",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.016464444444444445
    }
  }
}