# Event Leads Scraper — Exhibitors, Speakers & Attendees (`inovaflow/event-leads-scraper`) Actor

Turn any conference, expo or meetup page into leads: exhibitors and sponsors with booth and website, speakers with title, company and session, hosts and the public guest list. One row per person or company with role, domain and LinkedIn. Paste event URLs or a calendar. No login, MCP-ready.

- **URL**: https://apify.com/inovaflow/event-leads-scraper.md
- **Developed by:** [inovaflow](https://apify.com/inovaflow) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 event leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Event Leads Scraper — Exhibitors, Speakers & Attendees

**A company that pays for a booth has budget. A person on a stage has authority. Everyone at the event has a
reason to talk this month.** Conferences, expos and meetups are the warmest lead lists there are — and they sit
in plain sight on the event's own pages, in a hundred different layouts.

This Actor reads them all the same way: paste the event's pages and get **one clean row per person or company**,
with the role it holds at the event — **exhibitor, sponsor, speaker, host, organizer, attendee** — plus title,
company, website and domain, booth, session and LinkedIn where the page shows them.

***

### Who it is for

- **Outbound and field marketing** — the exhibitor list of a trade show is your territory plan; the speaker list is
  your executive outreach; the public guest list of a meetup is your warm intro.
- **AI / GTM agents** — one call, a flat dataset, no login and no key. `role`, `name`, `title`, `company`, `domain`,
  `booth`, `session`, `linkedin`, `eventName`, `eventDate` on every row; chain `domain` straight into enrichment.
- **Sponsorship and partnership teams** — who sponsors and exhibits at the events in your market, year after year.
- **Recruiters** — speakers and hosts by topic, with their current company.
- **Event organizers and analysts** — competitor events' exhibitor floors and speaker line-ups, as data.

***

### What you get per lead

```jsonc
{
  "entity": "person",
  "role": "speaker",
  "name": "Colin Zima",
  "title": "Co-founder & CEO",
  "company": "Omni",
  "domain": "omni.co",
  "session": "The future of BI",
  "sessionTime": "October 13 11:15AM – 11:45AM",
  "linkedin": "https://www.linkedin.com/in/colinzima",
  "eventName": "TechCrunch Disrupt 2026",
  "eventDate": "2026-10-13",
  "sourceUrl": "https://techcrunch.com/events/techcrunch-disrupt/speakers/",
  "snippet": "Colin Zima · Co-founder & CEO · Omni"
}
```

```jsonc
{
  "entity": "company",
  "role": "exhibitor",
  "name": "AGAT Software",
  "website": "https://www.agatsoftware.com/",
  "domain": "agatsoftware.com",
  "booth": "132",
  "eventName": "AI & Big Data Expo Global",
  "eventDate": "2027-02-03",
  "sourceUrl": "https://www.ai-expo.net/global/exhibitors/"
}
```

Three dataset views are built in: **Leads**, **Companies** and **People**.

***

### How to use it

| You want | Set |
| --- | --- |
| Every exhibitor at an expo | `eventUrls`: the exhibitor directory page |
| Every speaker at a conference | `eventUrls`: the speakers page (or the agenda) |
| Everything public on an event site | `eventUrls`: the event home page, `exploreSite`: true (the default) |
| A community event's hosts and public guests | `eventUrls`: the event page |
| Every event on a community calendar | `eventUrls`: the calendar page |
| Only companies | `roles`: `exhibitor`, `sponsor` |
| Only people | `roles`: `speaker`, `host`, `attendee` |

With **Explore the event site** on, each pasted page's site is also read for its speakers, exhibitors, sponsors,
partners, agenda and attendees pages, and their next pages — bounded by `maxPagesPerEvent`.

***

### Accuracy, on purpose

- Every row comes from a card, a listing or the event's structured data — never from a guess. The card's own text is
  kept in `snippet` so any row can be checked against the page.
- Attendees are included **only where the event publishes its guest list**. If it doesn't, you get the hosts and the
  organizer, and the run summary says so.
- Titles and companies are read from the card as written ("Co-founder & CEO", "Felix Capital"); a card that shows only
  a name and a company gives `title: null`.
- Company domains come from the website the page links to; when there is none, the company's own homepage is
  checked to confirm it (`domainSource: "homepage"`) — never a lookalike.
- Duplicates are merged per event. No login, no API key, no browser.

***

### Cost

Pay per lead delivered, plus the platform's start fee. Duplicates, rows removed by your role filter and empty runs
are never charged; `maxLeadsPerEvent` caps both rows and spend.

### Pairs well with

- **Company Enrichment** — turn every exhibitor `domain` into firmographics and a tech stack.
- **Decision-Maker Finder** and **Email Finder & Verifier** — from a speaker's name and company to a verified inbox.
- **Hiring Intent Scraper** and **Recently Funded Companies** — which exhibitors are growing right now.

# Actor input Schema

## `eventUrls` (type: `array`):

One URL per line. For a conference, paste the speakers, exhibitors, sponsors or agenda pages (or the event home page and turn on "Explore the event site"). For a community event, paste the event or calendar page.

## `roles` (type: `array`):

Empty = every public role. Attendees are included only where the event publishes its guest list.

## `exploreSite` (type: `boolean`):

From each pasted page, also read the same site's speakers, exhibitors, sponsors, partners, agenda and attendees pages (and their next pages). Turn off to read exactly the pages you pasted.

## `maxPagesPerEvent` (type: `integer`):

Cap on pages read per pasted URL when exploring (list pages and their next pages).

## `maxLeadsPerEvent` (type: `integer`):

Cap on delivered rows per pasted URL. Also caps what you pay: 50 is a quick sample, 300 (the default when unset) a full list.

## `resolveDomains` (type: `boolean`):

For companies without a website on the page, confirm the company's own domain from its homepage (a few fast requests each). Off = only domains the event page links to.

## `maxDomainLookups` (type: `integer`):

Cap on homepage lookups when resolving domains (20 in the sample run, 80 when unset).

## `maxConcurrency` (type: `integer`):

Concurrent page reads. Lower it if a site starts rate-limiting.

## `proxyConfiguration` (type: `object`):

Event pages are public; the default Apify proxy is enough. The Actor retries through a residential session when a site challenges the datacenter range.

## Actor input object example

```json
{
  "eventUrls": [
    "https://www.ai-expo.net/global/exhibitors/",
    "https://slush.org/audience/speakers"
  ],
  "roles": [],
  "exploreSite": true,
  "maxPagesPerEvent": 12,
  "maxLeadsPerEvent": 50,
  "resolveDomains": true,
  "maxDomainLookups": 20,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `leads` (type: `string`):

One row per person or company at the event: role, name, title, company, domain, booth, session, LinkedIn, event name and date.

## `companies` (type: `string`):

Exhibitors, sponsors and partners: company, website, domain, booth, description.

## `people` (type: `string`):

Speakers, hosts and public attendees: name, title, company, session, LinkedIn.

## `summary` (type: `string`):

Leads per event and role, pages read, what could not be read.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "eventUrls": [
        "https://www.ai-expo.net/global/exhibitors/",
        "https://techcrunch.com/events/techcrunch-disrupt/speakers/"
    ],
    "maxLeadsPerEvent": 50,
    "maxDomainLookups": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inovaflow/event-leads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "eventUrls": [
        "https://www.ai-expo.net/global/exhibitors/",
        "https://techcrunch.com/events/techcrunch-disrupt/speakers/",
    ],
    "maxLeadsPerEvent": 50,
    "maxDomainLookups": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("inovaflow/event-leads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "eventUrls": [
    "https://www.ai-expo.net/global/exhibitors/",
    "https://techcrunch.com/events/techcrunch-disrupt/speakers/"
  ],
  "maxLeadsPerEvent": 50,
  "maxDomainLookups": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call inovaflow/event-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,inovaflow/event-leads-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xtKS9Nc42ktILsJ9u/builds/jFdZFjniFzEwfsQVQ/openapi.json
