Events Lead Scraper — lu.ma, Meetup & Eventbrite avatar

Events Lead Scraper — lu.ma, Meetup & Eventbrite

Pricing

from $10.00 / 1,000 dataset items

Go to Apify Store
Events Lead Scraper — lu.ma, Meetup & Eventbrite

Events Lead Scraper — lu.ma, Meetup & Eventbrite

Extract event listings with organizer, venue, price and host social handles from lu.ma, Meetup and Eventbrite in one run. Reports per-source coverage.

Pricing

from $10.00 / 1,000 dataset items

Rating

0.0

(0)

Developer

NaNomicon

NaNomicon

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Events Lead Scraper

Public Apify Actor, intentionally public per operator confirmation since 2026-10-29, priced on PAY_PER_EVENT at $0.05 USD per Actor Start plus $0.01 USD per dataset item. It extracts event listings from Eventbrite, Luma, and Meetup in one run. source defaults to auto: URLs route by host and keyword searches run in Eventbrite, Luma, Meetup order. Set a source explicitly to limit adapters. Supply at least one listing URL or keyword. All adapters use plain HTTP without proxies or retry loops; Luma transport may follow one same-family HTTPS redirect. Eventbrite can fetch event detail pages for organizer and price data when includeDetails is true (default); Luma and Meetup never fetch per-event details. Luma listing data includes available host/calendar socials and attendee visibility. Luma URLs on luma.com, www.luma.com, lu.ma, or www.lu.ma normalize to canonical https://luma.com.

Development

Run tests with python -m pytest tests. CI pins Python 3.12.13 and runs this suite after a separate integrity guard. constraints.txt freezes runtime and test dependencies; refresh it in the same change as dependency edits using python -m pip install -r requirements.txt -r requirements-dev.txt, then python -m pip freeze > constraints.txt.

Input

Search sources automatically using keywords:

{"keywords":["AI founders"],"location":"san-francisco","maxResults":200}

Search selected source using one or more listing URLs:

{"source":"luma","urls":["https://luma.com/<calendar-or-user>"],"maxResults":200}

Input fields:

  • source: optional auto, eventbrite, luma, or meetup; defaults to auto.
  • urls: optional array of listing, calendar, group, or discovery URLs. Luma accepts exact hosts luma.com, www.luma.com, lu.ma, and www.lu.ma; inputs normalize to https://luma.com, and transport follows at most one same-family HTTPS redirect.
  • keywords: optional array of search terms.
  • At least one of urls or keywords must be supplied; both may be used together.
  • location: optional provider-specific location for keyword searches and Eventbrite filtering. For San Francisco keyword discovery, Eventbrite uses its search path and a conservative client-side filter over structured physical addresses; Luma uses /sf plus title-keyword and venue-text filters; Meetup uses location=us--ca--san-francisco plus the same conservative venue filter. The filter accepts only OMB-listed principal cities of the SF MSA, not every postal locality. Unknown and online-only venues are excluded; no geocoding is performed. A recognized Eventbrite /d/ca--san-francisco/ URL activates its client-side address filter even without location, but explicit Luma/Meetup URLs do not get discovery title/metro filtering. Keyword-search filters are not a guarantee for arbitrary explicit URLs.
  • startDate, endDate: optional ISO dates bounding event dates inclusively.
  • maxResults: global result cap, default 200, range 1–5000.
  • includeDetails: default true; Eventbrite-only detail enrichment. Ignored by Luma and Meetup.
  • maxFetches: defaults to 30, range 1–1000; shared cap for outbound discovery and Eventbrite detail requests. Requests are spaced at least 400 ms apart.
  • skipSeenDays: defaults to 0 (off), range 0–365; when set, events whose URL already appeared in a run with the same source, URLs, keywords, location and date window are skipped for that many days, so scheduled runs report only what is new. Skipped rows are counted in run_summary.rowsSkippedSeen.
  • compact: defaults to false; when true, emits exactly recordType, eventUrl, eventName, startDate, venue, organizerName and source. It skips Eventbrite detail enrichment and overrides includeDetails to false in exactConfig.

The actor processes sources in stable Eventbrite, Luma, Meetup order and preserves source-by-source ordering within the global cap. A capped run may return no rows from later sources; sourceStatuses marks those as skipped_cap_reached. Provider-specific search results may interpret free-text locations differently; no geocoding is performed. San Francisco keyword filtering is conservative and explicit Luma/Meetup URLs bypass discovery title/metro filters.

Results

Dataset contains actual event rows and one run_summary; valid empty source results are successful. Event rows carry concrete source and retain event lead fields, host and calendar structures, and available source data. Eventbrite and Luma rows carry venue; Meetup rows do not. Hidden attendee counts remain attendeeCount: null with attendeeCountHidden: true; a visible zero remains zero. Missing source values stay null. No synthetic records or cost fields are emitted.

Eventbrite rows include detailStatus: fetched, failed, not_requested, or skipped_cap_reached. Luma and Meetup rows omit this field.

The summary reports coverageStatus (complete, shortfall, partial, or blocked), sourcesRun, sourceStatuses, sourceCounts (all sources, including zero counts for unattempted sources), sourceErrors (source and redacted message only; URL-level request details are in diagnostics), date-exclusion counts, and extraction/transport diagnostics. sourceStatuses distinguishes not_requested, skipped_cap_reached, returned_zero, filtered, returned, and blocked. blocked means a source or detail request errored; otherwise, empty results never raise and overall coverageStatus is shortfall. partial applies only when at least one row is returned and a requested source was skipped at the cap, returned zero, or was fully filtered. If neither condition applies, complete means the global cap was filled and shortfall means it was not. rowsExcludedOutOfDateRange and rowsExcludedBadDate distinguish valid dates outside the inclusive range from missing or invalid dates. The terminal status message reports both counters when a date filter is active. Genuine source errors fail the run after summary output; valid empty results remain successful. When startDate is omitted, events whose endDate date is before today UTC (or whose startDate date is before today UTC when endDate is absent) are excluded; comparison uses calendar dates, not instants. rowsExcludedAlreadyEnded counts these rows and adds a terminal-status clause when non-zero. Supplying startDate disables this exclusion.

eventbriteDetailSummary records detail request/response counts, non-200 responses, non-200 ratio, and requests with no HTTP response.

Operational constraints

The operator used Apify maxTotalChargeUsd: 0.30 as a run cap during validation probes, with no retries or proxies. The operator's $0.05 per-probe cap applied during validation only; it is not a runtime feature. At runtime, source requests share maxFetches as a per-run request-count limit. Sources skipped when it is exhausted appear as skipped_cap_reached, and terminal status reports request-budget exhaustion. Do not start additional runs or add unapproved source URLs.

The Actor is public on purpose since 2026-10-29 and uses PAY_PER_EVENT pricing: $0.05 per Actor Start plus $0.01 per dataset item. It uses LIMITED_PERMISSIONS and keeps standby mode disabled (standbyUrl: null). These are platform-managed settings, not source metadata in .actor/actor.json; verify them on the existing Actor before deployments. Keep Apify credentials in the OS keyring; never put tokens in files or command output.