# Meetup Events Scraper (`tacps126/meetup-events-scraper`) Actor

Meetup events by keyword and city, or from Meetup search and group links: name, date, venue and address, organising group, online or in person, full description. Fast, no browser, no login.

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

## Pricing

from $0.80 / 1,000 events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Meetup Events Scraper

Get **Meetup events** as a clean, spreadsheet-ready list: name, start and end time, online or in person, venue with address, the **organising group** with its Meetup page, status, and the full description. Search by keyword and city, or paste any Meetup search or group link.

**Built for:** developer-relations and community teams finding groups to sponsor or speak at, event marketers, recruiters looking for tech communities, and founders mapping a city's scene.

### Why this scraper

- **Groups behind the events.** Every event comes with the group that runs it and the group's page, a ready list of communities.
- **Search like a person.** `AI` in `London`, `python` in `Bengaluru`, `startup` `online`. About 70 big cities are known by name; for any other write `City, CC` (e.g. `Lyon, FR`).
- **Or paste links:** a Meetup search or a group's events page.
- **Fast and light.** No browser and no login: Meetup publishes its events as structured data, which the Actor reads directly.
- **New-event alerts.** Schedule it with *Only new events* and each run returns only events you haven't received yet.
- **Change alerts.** Turn on *Changes only* and schedule it: each run returns only new events, events whose date, venue, status, price or sold-out state changed (old and new values in `changes`), and upcoming events that disappeared (`changeType: "removed"`, cancelled or unlisted).

### How to use it

1. Type **Topics or keywords** (e.g. `AI`) and a **Location** (e.g. `London`, or `online`), or paste **Event links**.
2. Press **Start**. Download from the **Output** tab, or connect Google Sheets, Slack, Make, Zapier, n8n or webhooks.

```json
{
  "searches": ["AI", "python"],
  "location": "London",
  "maxItems": 50
}
```

A Meetup search returns its first page of results, about 30 events per keyword and city. Add related keywords for more.

### What you get

| Field | Description |
|-------|-------------|
| `name`, `url`, `source` | Event, link, and the site |
| `startAt`, `endAt`, `timezone` | Times (ISO 8601) |
| `isOnline`, `status` | Online or in person; scheduled / cancelled / postponed where published |
| `venue` | `{name, street, city, region, postalCode, country, fullAddress, latitude, longitude}` |
| `organizer` | `{name, url}` |
| `price` | `{isFree, min, max, currency, soldOut}` where the site shows tickets |
| `description`, `imageUrl` | Full text (plain) and cover image |
| `foundVia` | The search or link it came from |

### Pricing

Pay per result: about **$1 per 1,000 events**. Past events and (with *Only new events*) events you already received are free. On Apify's free plan a run returns up to 200 events, enough to try it.

### Use it in n8n, Make, Zapier or AI agents

Every run is one API call (`run-sync-get-dataset-items`). In n8n, use an HTTP Request node or Apify's own node. AI agents can call it through Apify's hosted MCP server.

### More event sites in one run

This Actor reads Meetup only. [Events Scraper](https://apify.com/tacps126/events-scraper) searches **Luma, Eventbrite and Meetup together** and returns them in this same format. For trade-show exhibitor lists, see [Trade Show Exhibitor List Scraper](https://apify.com/tacps126/exhibition-scraper).

### Notes

- Only public event pages are read. Organiser and host names are shown as published; use personal data within GDPR and the site's terms.
- Pages that ask for a human check (captcha) are skipped and reported in the run log; this Actor does not solve captchas.

### Support

Missing a field? Open an issue on the **Issues** tab with a link; requests decide what gets added next.

# Actor input Schema

## `searches` (type: `array`):

What the events are about, e.g. `AI`, `startup`, `networking`, `marketing`. One search each.

## `location` (type: `string`):

City in plain words (`London`, `San Francisco`, `Bengaluru`) or `online`. About 70 big cities are known by name; for others write `City, CC` with the two-letter country code (`Lyon, FR`), or paste a Meetup search link.

## `startUrls` (type: `array`):

Paste links instead of (or as well as) searching. Meetup links: a search (`meetup.com/find/?keywords=…`) or a group's events page (`meetup.com/<group>/events/`).

## `maxItems` (type: `integer`):

Maximum events from each link, and from each search on each site.

## `includeDetails` (type: `boolean`):

Open each Eventbrite and Meetup event (and Luma events missing text) for the organiser, ticket prices, end time and full description. Off = faster.

## `upcomingOnly` (type: `boolean`):

Skip events that have already ended.

## `onlyNew` (type: `boolean`):

Return only events no earlier run with the same input delivered. Schedule it for new-event alerts; you pay only for new events.

## `changesOnly` (type: `boolean`):

Return only events that are new, changed (date, venue, status, price or sold-out — with old and new values in `changes`) or gone before they started (`changeType: "removed"`: cancelled or unlisted) since the last run with the same input. The first run returns everything as new.

## `monitorName` (type: `string`):

Optional name for the *Only new* memory, to share it between differently configured runs.

## `delivery` (type: `object`):

Webhook: {"webhookUrl": "https://…", "format": "json" | "slack" | "discord", "onlyWhenResults": true, "includeItems": 10}. Google Sheets: {"spreadsheetId": "<id from the sheet URL>", "sheetName": "Sheet1"} plus the service account key below; share the sheet with the service account's e-mail first. Leave empty to only save results in the dataset.

## `googleServiceAccountJson` (type: `string`):

Only for Google Sheets delivery: paste the service account's JSON key. Stored encrypted; the account sees only sheets you share with it.

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

Not needed for these sites; available if a site starts refusing requests.

## Actor input object example

```json
{
  "searches": [
    "AI"
  ],
  "location": "London",
  "maxItems": 100,
  "includeDetails": true,
  "upcomingOnly": true,
  "onlyNew": false,
  "changesOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The produced items (default dataset items).

# 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 = {
    "searches": [
        "AI"
    ],
    "location": "London"
};

// Run the Actor and wait for it to finish
const run = await client.actor("tacps126/meetup-events-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 = {
    "searches": ["AI"],
    "location": "London",
}

# Run the Actor and wait for it to finish
run = client.actor("tacps126/meetup-events-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 '{
  "searches": [
    "AI"
  ],
  "location": "London"
}' |
apify call tacps126/meetup-events-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tacps126/meetup-events-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/1AAXDU5jmBYr8cuNO/builds/1xlEUTKEO0ZBzdHIe/openapi.json
