create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
End-to-end lead prospecting from Luma events. Searches Luma for events by topic and location, extracts all attendees/hosts, qualifies them against a qualification prompt, outputs results to a Google Sheet, and sends a Slack alert with top leads. Use this skill whenever someone
$ npx -y skills add gooseworks-ai/goose-skills --skill get-qualified-leads-from-luma --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/get-qualified-leads-from-lumaContext preview
The summary Claude sees to decide when to auto-load this skill.
End-to-end lead prospecting from Luma events. Searches Luma for events by topic and location, extracts all attendees/hosts, qualifies them against a qualification prompt, outputs results to a Google Sheet, and sends a Slack alert with top leads. Use this skill whenever someone
name: get-qualified-leads-from-luma version: 1.0.0 description: > End-to-end lead prospecting from Luma events. Searches Luma for events by topic and location, extracts all attendees/hosts, qualifies them against a qualification prompt, outputs results to a Google Sheet, and sends a Slack alert with top leads. Use this skill whenever someone wants to find qualified leads from events, prospect event attendees, or run an event-based lead gen workflow. Also triggers for "find people at events and qualify them" or "who's attending X events that matches our ICP." tags: [lead-generation]
Search Luma for events by topic and location, extract all attendees and hosts, qualify them against your ICP, export to a Google Sheet, and send a Slack alert with the top leads.
This is a 5-step pipeline that chains together `luma-event-attendees`, `lead-qualification`, Google Sheets output, and Slack alerting.
Before doing anything, make sure you have clear answers to these questions. If the user's prompt already covers them, skip ahead. Otherwise, ask:
1. **Location** — Where should events be? (e.g., "San Francisco", "New York", "London") 2. **Topics/Keywords** — What event topics? Suggest 3-5 keyword variations to maximize coverage. For example, if the user says "growth marketing", also suggest: "GTM", "demand gen", "startup growth", "growth hacking", "marketing leadership" 3. **Timeframe** — How recent should the events be? (e.g., "past 2 weeks", "past month", "this quarter"). Default to **past 30 days** if the user doesn't specify. Luma search can return events from months or years ago, so always confirm a timeframe to avoid stale results. 4. **Qualification prompt** — Does the user have an existing qualification prompt in `skills/lead-qualification/qualification-prompts/`? If not, what's their ICP at a high level? (Can use `lead-qualification` intake mode to build one) 5. **Slack channel/webhook** — Where should the alert go? A webhook URL or Slack channel name? 6. **How many top leads** in the Slack alert? (default: 5)
Present these as a numbered list. The user can answer in one shot.
Use the `luma-event-attendees` skill with **multiple keyword variations** to maximize coverage.
Generate 3-5 keyword variations combining the user's topic with their location. Run them all in parallel:
# Run each search variation in parallel python3 skills/luma-event-attendees/scripts/scrape_event.py --search "AI San Francisco" --output /tmp/luma_search_1.csv python3 skills/luma-event-attendees/scripts/scrape_event.py --search "Growth Marketing San Francisco" --output /tmp/luma_search_2.csv python3 skills/luma-event-attendees/scripts/scrape_event.py --search "GTM San Francisco" --output /tmp/luma_search_3.csv
After collecting results, filter out events outside the user's specified timeframe using the `event_date` column. Luma search returns events from all time periods, so this step is essential to avoid stale leads. If no timeframe was specified, default to the past 30 days.
Merge and deduplicate by name (case-insensitive). Handle `None` names gracefully — skip entries with no name.
Save the deduplicated result as a CSV:
/tmp/luma_all_attendees.csv
Report to the user:
Work with CSVs throughout the pipeline — Google Sheets creation happens only at the end (Step 4) because writing large datasets to Sheets mid-process is slow and error-prone.
The CSV from Step 1 (`/tmp/luma_all_attendees.csv`) is your working file. Columns should include:
| name | event_role | bio | title | company | linkedin_url | twitter_url | instagram_url | website_url | username | event_name | event_date | event_url | |------|-----------|-----|-------|---------|-------------|-------------|---------------|-------------|----------|------------|------------|-----------|
Use the `lead-qualification` skill (Mode 2: reuse prompt) to qualify all attendees.
1. Read the qualification prompt from the file the user specified (e.g., `skills/lead-qualification/qualification-prompts/ai-event-attendees-gtm.md`) 2. Split attendees into batches of ~15-20 leads each 3. For each lead, include: id (row number), name, event_role, bio, title, company, linkedin_url, event_name
Launch all batches simultaneously using the Task tool with `sonnet` model subagents:
Task: "Qualify leads batch 1/N"
- Include the full qualification prompt text
- Include the batch of leads as JSON
- Ask for output as JSON array: [{id, name, qualified, confidence, reasoning}]
Task: "Qualify leads batch 2/N"
... (launch ALL at once)1. Collect all batch results 2. Merge into a single JSON array, preserving original IDs 3. Sort qualified leads by confidence (High first, then Medium, then Low) 4. Save results:
Report to the user:
Now create the Google Sheet with all data — both raw attendees and qualification results.
1. Use `RUBE_SEARCH_TOOLS` to find Google Sheets tools (search for "google sheet create") 2. Create a new sheet named: `Luma Leads - [Topic] - [Date]` 3. **Sheet 1 ("All Attendees"):** Write all attendee rows with original columns PLUS:
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.