π Facebook Events Scraper β Organizer & Contact Details β¨
Pricing
from $3.99 / 1,000 results
π Facebook Events Scraper β Organizer & Contact Details β¨
Scrapes events from any public Facebook page, group, or search result, capturing event titles, dates, locations, hosts, attendance counts, descriptions, and URLs. Ideal for market research, local event tracking, trend analysis, and automated data extraction at scale
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapio
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Facebook Events Scraper β Extract Events, Contacts & Ads Data
Facebook Events Scraper β Organizer & Contact Details turns keyword searches into structured JSON: public event records (name, date, location, attendance) plus the host organizer's own Facebook Page contact details (email, phone, website, follower count) and a best-effort Ads Library activity flag for that organizer. Unlike a scraping framework that hands you raw HTML to parse, this Actor returns typed JSON rows β ready for a CRM, a spreadsheet, or an LLM context window without any cleanup. Every event doubles as a lead: you get who's running it and whether they're actively spending on Facebook ads. This guide covers every input and output field, the honest limits of organizer enrichment and Ads Library matching, and how teams run it for lead generation, monitoring, and dataset building.
π§ What does Facebook Events Scraper β Organizer & Contact Details do?
It takes one or more search phrases, finds matching public Facebook events, and pulls each event's date, location, attendance, description, and organizer name from the event's own page. On top of that base extraction, it visits the organizer's Facebook Page (not personal profiles) to pull public business contact fields, and checks Facebook's public Ads Library to flag whether that organizer is currently running ads. No Facebook login or account is required β every field comes from publicly viewable pages.
- π Keyword-based event discovery β one search phrase per line, processed in order
- π Full event detail extraction β date/time text, duration, location, attendance counts, description, tickets info
- π Recurring-event detection β flags event series and lists child occurrences
- π Organizer contact enrichment β email, phone, website, follower count, category, verified badge (Pages only)
- π’ Facebook Ads Library check β best-effort "currently running ads" flag with an honest match-confidence label
- π Residential proxy routing for every Facebook-bound request, to reduce blocks
- β‘ Async concurrent enrichment, capped at 25 requests in flight
β‘ Features & Capabilities
Core extraction, organizer/lead enrichment, and how they fit together.
Core features
- Discovers events per search query and pushes one JSON row per event with every field the enrichment pipeline populates:
url,id,name,dateTimeSentence,utcStartDate,startTime,eventFrequency,imageUrl,imageCaption,duration,description,address,isCanceled,usersGoing,usersInterested,usersResponded,location(object),ticketsInfo,organizedBy,organizators(array),eventType,privacyInfo,isPast,isOnline,hasChildEvents,childEvents(array),discoveryCategories(array),externalLinks(array),externalLinksSource,inputUrl,discoverySource,scrapedAt. - Organizer lead enrichment adds two nested objects:
organizerContact(9 keys) andorganizerAdsLibrary(6 keys) β see the Output Format section for the full shape. - One organizer fetch per unique host per run β if ten events share the same organizer Page, that Page is fetched once and the result reused for all ten rows.
- Null-tolerant by design: personal-profile organizers, Pages that don't publish a field, and unmatched Ads Library lookups all return
nullrather than a guessed value.
How this Actor compares to other Facebook event scrapers
On the Apify Store, as checked 2026-08-04, most Facebook event scrapers return only event-side fields β name, date, location, attendance β and stop there. We did not find another listed Facebook events Actor that also fetches the organizer's own Page for contact/business fields and cross-checks the Ads Library in the same run. Rather than build a comparison table against products we can't verify feature-by-feature, here's what this Actor factually does that a plain event scraper does not:
| Capability | This Actor |
|---|---|
| Event fields (date, location, attendance, description) | β |
| Recurring/child event detection | β |
| Organizer Page contact extraction (email, phone, website) | β |
| Facebook Ads Library activity check with confidence label | β |
| Residential proxy enforced for Facebook traffic | β |
| Guaranteed exhaustive event coverage beyond Google's index | β (see limitations below) |
If your use case is feeding structured data to an LLM or a CRM, the organizer-contact and Ads Library rows are the decision-maker β turning an events feed into a lead feed usually means building and maintaining that enrichment yourself otherwise.
When another tool might suit you better
If you only need bare event listings β no organizer contact, no Ads Library check β a plain event scraper without the extra Page and Ads Library fetches will run faster and cost fewer requests per event, since this variant does one to three additional HTTP fetches per event (organizer transparency page, Ads Library search, Ads Library confirmation). Turn enrichOrganizerContact and checkOrganizerAdsLibrary off here to get close to that lighter behavior, or use a simpler events-only scraper if you never need the lead data at all.
Facebook Events Scraper β Organizer & Contact Details within the Scrapio data stack
This Actor covers Facebook events plus organizer contact and ad-activity signals. For Facebook group posts instead of events, Scrapio also publishes Facebook Group Posts & Details Scraper. For the same "turn a listing into a lead" pattern on other platforms, see Tripadvisor Review Scraper β Business Contact Finder and Airbnb Rooms URLs Scraper β Host Email & Phone Finder, which apply the same contact-enrichment idea to reviews and short-term rental hosts.
Why do developers and data teams scrape Facebook events?
π’ B2B lead generation and sales teams
Sales and event-industry outreach teams feed searchQueries with niche + location terms (e.g. "wine tasting Austin"), then export rows where organizerContact.organizerEmail or organizerPhone is non-null and organizerAdsLibrary.organizerIsRunningAds is true β a decent proxy for organizers with both a reachable contact and an active marketing budget. The result lands directly in a CRM import as a warm-lead list, without a separate lead-enrichment tool.
π AI training data and RAG indexing
The description field carries the fullest natural-language text per event, and organizerCategory plus discoveryCategories give consistent categorical labels across rows. For RAG: index description and address so an assistant can answer "what events are happening near X" with grounded, current text. For training data: usersGoing, usersInterested, and eventFrequency are the most structurally consistent numeric/categorical fields across every row, needing no normalization since they return as typed integers and strings, not HTML.
π± Competitive and market intelligence
Track how active a recurring organizer or venue is by re-running the same searchQueries on a schedule and comparing usersGoing/usersInterested deltas and organizerAdsLibrary.organizerIsRunningAds over time β a rising interested count alongside newly active ads is a concrete signal of a competitor ramping up promotion for a niche.
π¬ Research and academic use
Local-events and social-research datasets can be built from location, address, discoveryCategories, and attendance fields across many search terms and cities. Scope is limited to what Facebook and Google make publicly visible without login β no private-group or friends-only event data is ever collected.
π₯ Product and SaaS development
Local-events directories, venue-discovery apps, and organizer-monitoring tools can be built directly on the dataset schema, since every run returns the same field set regardless of query β no per-event scraping logic to maintain in your own product.
π Input Parameters
All five parameters, read directly from .actor/actor.json:
| Parameter | Required | Type | Default | Constraints |
|---|---|---|---|---|
searchQueries | Yes | array of strings | β | stringList editor β one search phrase per line |
maxEvents | No | integer | 10 | minimum 1, maximum 1000 β cap per query |
enrichOrganizerContact | No | boolean | true | fetches organizer's Facebook Page once per unique host |
checkOrganizerAdsLibrary | No | boolean | true | best-effort Ads Library match, always reports a confidence label |
proxyConfiguration | No | object | {"useApifyProxy": false} prefill | proxy editor β see the proxy note below |
β οΈ Proxy note: for every Facebook-bound request (event pages, organizer transparency pages, Ads Library calls), this Actor's current build always routes through Apify's RESIDENTIAL proxy group internally β regardless of what you select in proxyConfiguration, including an explicit "no proxy" choice. The input is still read and kept for interface consistency across this Actor family, but it does not currently change the live Facebook traffic. Discovery (the Google search step) uses a separate, independent GOOGLE_SERP proxy group that is also not user-configurable.
JSON input example:
{"searchQueries": ["jazz night","tech meetups","wine tasting"],"maxEvents": 25,"enrichOrganizerContact": true,"checkOrganizerAdsLibrary": true,"proxyConfiguration": {"useApifyProxy": true}}
Supported search query formats
searchQueries accepts plain keyword phrases, one per line β there is no URL input on this Actor. Each phrase is used two ways internally: as a site:facebook.com/events <phrase> Google search for discovery, and as the query text recorded in each row's inputUrl field. There is no documented support for Facebook search operators or wildcards β plain natural-language phrases work best:
"jazz night"β broad genre/niche term, good for casting wide"tech meetups Austin"β niche + city, the sharpest pattern for local lead lists"stand-up comedy"β multi-word phrases work as a single query, no quoting needed in the list itself
π¦ Output Format
Typed JSON, one row per discovered event, pushed to the Apify dataset as it's enriched (not batched at the end of the run).
Output for events
{"inputUrl": "/events/search/?q=wine%20tasting","url": "https://www.facebook.com/events/1202620635007207/","id": "1202620635007207","name": "Sunset Vineyard Wine Tasting","eventFrequency": "SINGLE","dateTimeSentence": "SAT, 15 NOV AT 6:00 PM","utcStartDate": null,"startTime": "Saturday, November 15","imageUrl": "https://scontent.xx.fbcdn.net/example.jpg","imageCaption": null,"duration": "3 hr","description": "Party event in Cairns, QLD, Australia by Sunset Vineyards on Saturday, November 15 with 527 people interested and 76 people going.","address": "Shangri-La The Marina, Cairns, QLD","isCanceled": false,"usersGoing": 76,"usersInterested": 527,"usersResponded": 603,"location": {"url": null,"id": "112233445566","name": "Shangri-La The Marina","contextualName": "Shangri-La The Marina","placeType": "PLACE","latitude": -16.91993058397,"longitude": 145.78028848415,"countryCode": "AU","streetAddress": null,"city": "Cairns, QLD"},"ticketsInfo": null,"organizedBy": "Sunset Vineyards","organizators": [{"name": "Sunset Vineyards","id": "61556325142266","url": "https://www.facebook.com/profile.php?id=61556325142266","isVerified": false}],"eventType": "PUBLIC","privacyInfo": "Public Β· Hosted by Sunset Vineyards","isPast": false,"isOnline": false,"hasChildEvents": false,"childEvents": [],"discoveryCategories": [],"externalLinks": [],"externalLinksSource": null,"discoverySource": "google_serp","scrapedAt": "2026-08-04T09:12:00.000Z"}
β οΈ Fields that stay at a fixed default in this build: utcStartDate, imageCaption, ticketsInfo, isPast, isOnline, and isCanceled are written once when the event is discovered and are never updated from the event page's own data in this version β they always return null/false (eventType always returns "PUBLIC", eventFrequency always returns "SINGLE"). Every other field above (dateTimeSentence, startTime, address, location, organizedBy, usersGoing/usersInterested, description, duration, discoveryCategories, externalLinks, childEvents, hasChildEvents, privacyInfo) is derived live from the event's own page on every run. Filter these dead-default fields out of any schema you rely on for isPast/isOnline/recurrence-frequency logic.
Output for organizer contact & Ads Library data
{"organizerContact": {"organizerIsFacebookPage": true,"organizerEmail": null,"organizerPhone": "+61 400 000 000","organizerWebsite": "sunsetvineyards.com.au","organizerFollowerCount": 842,"organizerCategory": "Winery","organizerPageVerified": false,"organizerFacebookPageId": "61556325142266","organizerRunningAdsText": null},"organizerAdsLibrary": {"organizerAdsLibraryCheckedFor": "Sunset Vineyards","organizerIsRunningAds": false,"organizerAdsMatchConfidence": "confirmed_id_match","organizerAdsMatchedPageId": "61556325142266","organizerAdsMatchedPageName": "Sunset Vineyards","organizerAdsLibraryUrl": "https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&view_all_page_id=61556325142266"}}
organizerContact is only populated when the organizer resolves to a real Facebook Page β organizerIsFacebookPage: false (or all-null) means it's a personal profile, and nothing is fabricated for it. organizerAdsLibrary.organizerAdsMatchConfidence is one of confirmed_id_match (exact Page ID match), high_name_match (β₯0.90 name-similarity ratio), medium_name_match (β₯0.72), no_match, lookup_unavailable, or the default not_checked. organizerIsRunningAds is only ever true/false when the confidence is one of the first three tiers and the follow-up active-ads confirmation query itself succeeds β otherwise it stays null, never a guess.
Schema stability and export options
Field names stay stable across runs regardless of query β every row carries the same key set whether the event was found or only partially enriched. If Facebook changes its front-end markup, individual values may temporarily return null until the extraction patterns are updated, but keys are never renamed or dropped silently. Results are available through the standard Apify dataset export formats: JSON, JSON Lines, CSV, Excel (XLSX), HTML table, and RSS/XML, plus direct API access via apify_client for pulling rows programmatically.
π‘ Facebook Events Scraper β Organizer & Contact Details Strategy Guide
π― Strategy 1: Real-time enrichment pipeline
Trigger a run whenever a new outreach niche or city comes in: pass one searchQueries line per target, keep enrichOrganizerContact and checkOrganizerAdsLibrary on, then read the dataset as rows land β results push live, per event, not batched at the end. Filter incoming rows on organizerContact.organizerEmail or organizerPhone non-null, then append organizedBy, organizerWebsite, and organizerAdsLibrary.organizerIsRunningAds straight into your CRM or outreach tool as new lead records.
π― Strategy 2: Scheduled monitoring and alerting
Set up an Apify Schedule to re-run the same searchQueries weekly or monthly. Compare each run's rows by id against the previous run's: a new id means a newly discovered event for that niche; a changed usersGoing/usersInterested or a flipped organizerAdsLibrary.organizerIsRunningAds on a recurring organizer's id is the delta worth alerting on β a competitor increasing attendance or newly starting to run ads.
π― Strategy 3: Bulk dataset build
For a research or lead dataset spanning many niches or cities, put every phrase into a single searchQueries list (processed in order within one run) or split across several runs if you want independent per-batch datasets. Set maxEvents to your target ceiling per query β note that actual discovery per query is bounded by how many event pages Google's own search index surfaces for that phrase, not solely by maxEvents, so very narrow niches may return fewer rows than the cap allows. Aggregate the finished dataset(s) to CSV or Excel from the Apify Console, or pull via apify_client for a database load.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time enrichment | New-lead triage as niches/cities come in | On-demand single run per batch of queries | Live-pushed JSON rows per event |
| Scheduled monitoring | Tracking recurring organizers/venues over time | Apify Schedule, periodic re-runs | Compare scrapedAt-stamped datasets across runs |
| Bulk dataset build | Large research or outreach-list datasets | One run with a long query list, or parallel runs | Aggregated CSV/Excel export |
π΄ Related Facebook Scrapers & Tools
| Scraper | What it extracts |
|---|---|
| Facebook Group Posts & Details Scraper | Posts and details from public Facebook Groups (Scrapio) |
| Tripadvisor Review Scraper β Business Contact Finder | Reviews plus the reviewed business's contact details (Scrapio) |
| Airbnb Rooms URLs Scraper β Host Email & Phone Finder | Listing data plus the host's contact details (Scrapio) |
How to integrate Facebook Events Scraper β Organizer & Contact Details with your stack
Facebook Events Scraper β Organizer & Contact Details works with any language or tool that can make an HTTP request to the Apify API β the examples below use the official apify-client SDKs.
Python
from apify_client import ApifyClientimport csvclient = ApifyClient("<YOUR_APIFY_TOKEN>")run_input = {"searchQueries": ["jazz night", "wine tasting"],"maxEvents": 25,"enrichOrganizerContact": True,"checkOrganizerAdsLibrary": True,}run = client.actor("<YOUR_USERNAME>/facebook-events-scraper-organizer-and-contact-details").call(run_input=run_input)rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())with open("facebook_events_leads.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(["name", "url", "organizedBy", "organizerEmail", "organizerPhone", "isRunningAds"])for row in rows:contact = row.get("organizerContact") or {}ads = row.get("organizerAdsLibrary") or {}writer.writerow([row.get("name"), row.get("url"), row.get("organizedBy"),contact.get("organizerEmail"), contact.get("organizerPhone"),ads.get("organizerIsRunningAds"),])print(f"Saved {len(rows)} events to facebook_events_leads.csv")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('<YOUR_USERNAME>/facebook-events-scraper-organizer-and-contact-details').call({searchQueries: ['jazz night', 'wine tasting'],maxEvents: 25,enrichOrganizerContact: true,checkOrganizerAdsLibrary: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const leads = items.filter((row) => row.organizerContact?.organizerEmail || row.organizerContact?.organizerPhone).map((row) => ({name: row.name,organizer: row.organizedBy,email: row.organizerContact?.organizerEmail,phone: row.organizerContact?.organizerPhone,runningAds: row.organizerAdsLibrary?.organizerIsRunningAds,}));console.log(`${leads.length} events with a reachable organizer contact`);
Async and scheduled pipelines
For large query lists, start the run asynchronously (call(..., wait_secs=0) in Python, or .start() in Node) and poll the run status or dataset item count instead of blocking on a single long request. For recurring monitoring, use an Apify Schedule to trigger the same input on a cadence and read each run's dataset separately β there is no Actor-specific webhook payload documented in this source; use the Apify platform's own run-finished webhooks or scheduled polling to pick up new results.
π― Who needs Facebook Events Scraper β Organizer & Contact Details? (Use cases & industries)
π’ B2B sales and event-industry outreach teams
Build a list of event organizers with a real organizerEmail/organizerPhone and a organizerIsRunningAds signal, then prioritize outreach toward organizers who are already spending on Facebook ads β they've shown budget and buying intent.
π Local SEO and events-directory operators
Feed name, address, location, dateTimeSentence, and description into a local events directory or aggregation site, refreshed on a schedule per city or niche.
π± Marketing and competitive-intelligence teams
Track a specific venue or recurring organizer's id across scheduled runs, watching usersGoing/usersInterested and ad-activity changes as a proxy for how aggressively a competitor is promoting.
π¬ Researchers
Build local social- or market-research datasets from public event and Page metadata across cities and niches β scope stays limited to what is publicly visible without a Facebook login.
Is it legal to scrape Facebook events data?
Yes β scraping publicly accessible web data is generally lawful; courts in the United States have found that scraping data a website makes available without a login is not a computer-intrusion violation (hiQ Labs v. LinkedIn, 9th Cir., 2019). That precedent covers the "is it a crime to access public pages" question, not the separate question of Facebook's own Terms of Service, which prohibit automated data collection β violating a platform's ToS is a potential civil/contractual matter between you and Facebook, not a criminal one, but it is a real risk to weigh.
Because this Actor's organizer enrichment returns personal identifiers β an organizer's name, and where a Page publishes them, an email address and phone number β that output is personal data under GDPR (EU/UK) and CCPA (California) once you store or use it, even though it was published publicly by a business Page. You are the data controller for what you do with it: you need a lawful basis to store or use it (e.g. legitimate interest for B2B outreach, subject to opt-out obligations), and separate marketing-communication laws (e.g. CAN-SPAM, PECR) may apply to how you contact people found this way.
Facebook Events Scraper β Organizer & Contact Details returns only publicly accessible data. What you do with that data is your responsibility β consult legal counsel for commercial applications involving personal data.
β Frequently asked questions
Does Facebook Events Scraper β Organizer & Contact Details work without a Facebook account?
Yes. Discovery goes through a public Google search rather than Facebook's own search feature, and every event and organizer Page fetched afterward is a page Facebook serves anonymously β no login, cookies, or Facebook account are used anywhere in this Actor.
How does the Actor handle Facebook's anti-scraping measures?
It fetches Facebook pages through a Chrome-TLS-impersonated HTTP client (curl_cffi) routed over Apify's RESIDENTIAL proxy group, retries up to 3 times with exponential backoff (1s, 2s, 4s) on failures, and rotates to a fresh residential IP when a response looks blocked (403/429/"rate limit"/"forbidden"/connection-reset errors). Discovery via Google uses a separate GOOGLE_SERP proxy pool and its own retry-and-rotate loop.
Can I run this Actor at scale without getting blocked?
maxEvents allows up to 1000 per query and enrichment runs with up to 25 concurrent requests, but actual per-query yield is bounded by how many public event pages Google's own index surfaces for that search phrase β discovery stops after scanning roughly 7 Google result pages (or 2 consecutive empty pages), so very narrow niches will return well under the maxEvents ceiling regardless of how high you set it. No uptime or success-rate figure is published for this Actor.
How fresh is the data this Actor returns?
Live β every run fetches Google's current search results and each event's/organizer's live Facebook page at run time; nothing is served from a cache across runs. Within a single run, a repeat organizer's contact and Ads Library result are cached and reused for that organizer's other events, so you get one live fetch per unique organizer, not one per event.
Which fields work best for AI training and RAG indexing?
For RAG, index description (the fullest free text per event) alongside address and location so an assistant can ground answers in a specific place and time. For training data, usersGoing, usersInterested, organizerCategory, and discoveryCategories are the most structurally consistent fields across rows β all return as typed integers or plain strings, not HTML, so no parsing or normalization step is needed before use.
What happens if a personal profile organizes the event instead of a Page?
organizerContact.organizerIsFacebookPage returns false and every other organizerContact field stays null β the Actor never invents business contact details for a personal profile, since Facebook's own page structure has no equivalent "delegate_page" data for one.
If Facebook blocks a specific event page, do I still get charged for that row?
Yes. If the event detail fetch fails after 3 retries, the Actor still pushes that event with its base discovery data (id, url, and whatever Google's result surfaced) and null enrichment fields, rather than dropping it β and that row still counts as one row_result charge. To spot thin rows in your own dataset afterward, filter for description == null or name == null.
Does this Actor work with Claude, ChatGPT, and other AI agent tools?
There is no MCP server documented for this Actor. It is callable as a standard Apify API run by any agent framework or script that can make an HTTP request via apify-client β every response is typed JSON, so it can be passed directly into an LLM context window without an HTML-parsing step.
How does this compare to other Facebook event scrapers on the Apify Store?
As checked on the Apify Store on 2026-08-04, we could not find another listed Facebook events Actor that also does organizer Page contact extraction and an Ads Library activity check in the same run β most return event fields only. Where a plain events-only scraper is likely to win is raw speed and cost per event, since it skips the extra organizer and Ads Library fetches this Actor makes; where this Actor wins is turning the same event list into contact-ready leads without a second enrichment step.
βΉοΈ Disclaimer
Facebook Events Scraper β Organizer & Contact Details extracts only publicly available data from Facebook and Google's public search index. This tool is intended for lawful use cases only. Users are responsible for complying with Facebook's terms of service and applicable data protection laws (including GDPR and CCPA) in their jurisdiction, especially when storing or acting on organizer contact details.