Conference speaker scraper

Extract speaker names, titles, companies, and bios from conference websites.

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/lead-generation/capabilities/conference-speaker-scraper#main ~/.claude/skills/conference-speaker-scraper

For one project only, change the path to .claude/skills/conference-speaker-scraper.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text85 lines
conference-speaker-scraper/SKILL.md85 lines3.3 KBpushed 96d agoRawView on GitHub

Conference Speaker Scraper

Extract speaker names, titles, companies, and bios from conference website /speakers pages. Supports direct HTML scraping with multiple extraction strategies, plus Apify fallback for JS-heavy sites.

Quick Start

No API key needed for direct scraping mode.

# Scrape speakers from a conference page
python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py \
  --url "https://example.com/speakers"

# Use Apify for JS-heavy sites
python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py \
  --url "https://example.com/speakers" --mode apify

# Custom conference name (otherwise inferred from URL)
python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py \
  --url "https://example.com/speakers" --conference "Sage Future 2026"

# Output formats
python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py --url URL --output json     # default
python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py --url URL --output csv
python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py --url URL --output summary

How It Works

Direct Mode (default)

Fetches the page HTML and tries multiple extraction strategies in order, using whichever returns the most results:

  1. Strategy A -- CSS class hints: Looks for speaker cards with class names containing "speaker", "presenter", "faculty", "panelist", "team-member"
  2. Strategy B -- Heading + paragraph patterns: Looks for repeated / + `` structures
  3. Strategy C -- JSON-LD structured data: Checks for <script type="application/ld+json"> with speaker data
  4. Strategy D -- Platform embeds: Detects Sched.com/Sessionize patterns used by many conferences

Apify Mode

Uses apify/cheerio-scraper actor with a custom page function that targets common speaker card selectors. Standard POST/poll/GET dataset pattern.

CLI Reference

Flag Default Description
--url required Conference speakers page URL
--conference inferred Conference name (otherwise inferred from URL domain)
--mode direct direct (HTML scraping) or apify (Apify cheerio scraper)
--output json Output format: json, csv, or summary
--token env var Apify token (only needed for apify mode)
--timeout 300 Max seconds for Apify run

Output Schema

{
  "name": "Jane Smith",
  "title": "VP of Finance",
  "company": "Acme Corp",
  "bio": "Jane leads the finance transformation at...",
  "linkedin_url": "https://linkedin.com/in/janesmith",
  "image_url": "https://...",
  "conference": "Sage Future 2026",
  "source_url": "https://sagefuture2026.com/speakers"
}

Cost

  • Direct mode: Free (no API, no tokens)
  • Apify mode: Uses apify/cheerio-scraper -- minimal Apify credits

Testing Notes

HTML scraping is inherently fragile across conference sites. The multi-strategy approach maximizes coverage, but JS-heavy sites will require Apify mode. When direct scraping returns 0 results, try --mode apify.

1---
2name: conference-speaker-scraper
3description: >
4 Extract speaker names, titles, companies, and bios from conference websites.
5 Supports direct HTML scraping and Apify web scraper fallback for JS-heavy sites.
6 Use for pre-event research and outreach targeting.
7---
8 
9# Conference Speaker Scraper
10 
11Extract speaker names, titles, companies, and bios from conference website /speakers pages. Supports direct HTML scraping with multiple extraction strategies, plus Apify fallback for JS-heavy sites.
12 
13## Quick Start
14 
15No API key needed for direct scraping mode.
16 
17```bash
18# Scrape speakers from a conference page
19python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py \
20 --url "https://example.com/speakers"
21 
22# Use Apify for JS-heavy sites
23python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py \
24 --url "https://example.com/speakers" --mode apify
25 
26# Custom conference name (otherwise inferred from URL)
27python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py \
28 --url "https://example.com/speakers" --conference "Sage Future 2026"
29 
30# Output formats
31python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py --url URL --output json # default
32python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py --url URL --output csv
33python3 skills/conference-speaker-scraper/scripts/scrape_speakers.py --url URL --output summary
34```
35 
36## How It Works
37 
38### Direct Mode (default)
39 
40Fetches the page HTML and tries multiple extraction strategies in order, using whichever returns the most results:
41 
421. **Strategy A -- CSS class hints:** Looks for speaker cards with class names containing "speaker", "presenter", "faculty", "panelist", "team-member"
432. **Strategy B -- Heading + paragraph patterns:** Looks for repeated `<h2>`/`<h3>` + `<p>` structures
443. **Strategy C -- JSON-LD structured data:** Checks for `<script type="application/ld+json">` with speaker data
454. **Strategy D -- Platform embeds:** Detects Sched.com/Sessionize patterns used by many conferences
46 
47### Apify Mode
48 
49Uses `apify/cheerio-scraper` actor with a custom page function that targets common speaker card selectors. Standard POST/poll/GET dataset pattern.
50 
51## CLI Reference
52 
53| Flag | Default | Description |
54|------|---------|-------------|
55| `--url` | *required* | Conference speakers page URL |
56| `--conference` | inferred | Conference name (otherwise inferred from URL domain) |
57| `--mode` | direct | `direct` (HTML scraping) or `apify` (Apify cheerio scraper) |
58| `--output` | json | Output format: `json`, `csv`, or `summary` |
59| `--token` | env var | Apify token (only needed for apify mode) |
60| `--timeout` | 300 | Max seconds for Apify run |
61 
62## Output Schema
63 
64```json
65{
66 "name": "Jane Smith",
67 "title": "VP of Finance",
68 "company": "Acme Corp",
69 "bio": "Jane leads the finance transformation at...",
70 "linkedin_url": "https://linkedin.com/in/janesmith",
71 "image_url": "https://...",
72 "conference": "Sage Future 2026",
73 "source_url": "https://sagefuture2026.com/speakers"
74}
75```
76 
77## Cost
78 
79- **Direct mode:** Free (no API, no tokens)
80- **Apify mode:** Uses `apify/cheerio-scraper` -- minimal Apify credits
81 
82## Testing Notes
83 
84HTML scraping is inherently fragile across conference sites. The multi-strategy approach maximizes coverage, but JS-heavy sites will require Apify mode. When direct scraping returns 0 results, try `--mode apify`.
85 

Discussion

Alternatives

Also in Company & contact data