luma-event-attendees
Convert the `luma-event-attendees` skill into a repeatable workflow for finding Luma event people data. The runbook supports a free direct-scrape mode for event metadata and hosts, and an Apify-backed search mode for fuller guest profiles with social links and bios. It normali
8 steps · start to finish.
- 1Step 1
Environment Setup
▶python3 -m pip install requests beautifulsoup4 mkdir -p /app/results /app/results/workValidate the selected mode before making network calls. If
mode=apify, requireAPIFY_API_TOKEN; ifmode=direct, require at least one Luma event URL. - 2Step 2
Resolve Inputs
▶For direct mode, normalize each provided Luma URL by trimming whitespace and requiring an `https://lu.ma/` prefix. For Apify mode, trim the search query and preserve it in `events.json` so the run is auditable.
- 3Step 3
Direct Scrape Luma Events
▶Fetch each Luma event page with a normal browser-like user agent. Extract event title, start time, location, canonical URL, and host cards from embedded JSON or HTML. Guest profiles may be unavailable in direct mode unless they are publicly embedded in the page.
- 4Step 4
Apify Search Mode
▶When `mode=apify`, call the Apify actor `lexis-solutions/lu-ma-scraper` with the provided search query and poll until the actor run completes. Capture the full actor dataset payload into `raw_response.json` before normalizing records.
- 5Step 5
Normalize People Records
▶Produce one record per person with these fields when available: `name`, `role`, `event_title`, `event_url`, `bio`, `linkedin`, `twitter`, `instagram`, `website`, `source_mode`, and `source_evidence`. Deduplicate by normalized name plus event URL, preferring records with more prof
- 6Step 6
Export Results
▶Write `/app/results/people.json` as an array of normalized objects. Write `/app/results/people.csv` with stable headers even when no people are found.
- 7Step 7
Iterate on Errors (max 3 rounds)
▶If a fetch, parse, export, or validation step fails, inspect the specific stage message in `validation_report.json`, apply the smallest targeted fix, and rerun the failed stage. Stop after max 3 rounds and write the remaining issue to `summary.md` with `overall_passed=false` if r
- 8Step 8
Write Summary and Validation
▶Write `/app/results/summary.md` with the selected mode, input URLs or search query, event count, people count, output paths, and limitations such as missing guest visibility in direct mode.