# Meetup Scraper — Events by Keyword, City & Group, No Phones (`highbrow_fame/meetup-events`) Actor

Meetup events by keyword and city, from search links, or from groups (upcoming or past): date, time zone, venue city, group, fee, going count, topics, description. No hosts or attendees.

- **URL**: https://apify.com/highbrow\_fame/meetup-events.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 event delivereds

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

## Meetup Scraper — Events by Keyword, City & Group, No Phones

Get events from Meetup: title, start and end time with time zone, in person or online, venue name and city, the group that runs it, fee, how many are going, topics, category, image and the full description. Search by keyword and city, paste your meetup.com search links, or paste group links for a group's upcoming or past events.

**Why this one**

- 🔗 **Your search, as you set it up.** Paste a search from meetup.com/find with its keyword, place, distance, dates, category and in-person/online filter. Or type places here — Berlin, Austin, TX, Sydney — with keywords, distance, dates, category and in person or online. Group links give a group's upcoming events, past events, or both; event links give that one event.
- 📅 **Deeper than Meetup's own list.** Meetup's list stops after a few hundred events; this goes through the dates one day at a time. A live run read 1,500 in-person events around New York for the next 15 days in one search, and 2,000 London events for next week in another.
- 🎯 **Events that really mention your keyword.** Meetup's search also returns loosely related events: for "python" in New York over 30 days it suggested 5,527 events, and 19 of them mention Python. Only those 19 come back — untick **Only events that mention the keyword** to get everything Meetup suggests.
- ⚡ **Fast.** A live run read 1,925 events from five inputs — among them a New York search and NY Tech Meetup's 412 past events, back to 2004 — in 51 seconds.
- 🔒 **No hosts, no attendees.** Hosts', organisers' and attendees' names and member ids are never collected. Venues keep their name and city, no street address or coordinates. Phone numbers, e-mail addresses and names after contact cues ("text … at", "hosted by …") in titles and descriptions are replaced with `[phone removed]`, `[e-mail removed]` and `[name removed]`.
- 💸 **You pay only for events delivered.** A link that is not a Meetup event page, a place Meetup does not know or a group that does not exist comes back as a free record with the reason.

### What you get

For every event:

| Field | What it is |
|---|---|
| `title`, `url`, `eventId` | the event |
| `startTime`, `endTime`, `timezone` | local date and time with the UTC offset, and the group's time zone |
| `eventType`, `isOnline`, `eventStatus` | in-person, online or hybrid; upcoming, past or cancelled |
| `venueName`, `venueCity`, `venueState`, `venueCountry` | where it happens (empty for online events) |
| `groupName`, `groupUrl`, `groupUrlname`, `groupCity`, `groupCountry`, `groupMembers` | the Meetup group that runs it |
| `category`, `topics` | Meetup's category of the group (Technology, Social Activities, …) and the event's topics |
| `isFree`, `fee`, `feeCurrency` | the ticket price, if there is one |
| `goingCount`, `waitlistCount` | how many said they are going, and how many wait for a place |
| `description`, `image` | the event text (Markdown) and its picture |
| `createdAt` | when the event was created |
| `input`, `keyword`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, the place Meetup matched, and why a search gave nothing |

#### Example

A real record from a live run — technology events in London, in person, 26 September 2026:

```json
{
  "input": "https://www.meetup.com/find/?location=gb--17--London&source=EVENTS&categoryId=546&eventType=inPerson",
  "place": "London, Greater London, England, United Kingdom",
  "position": 2,
  "eventId": "315785102",
  "title": "AI & Society Run & Coffee Club | London Event",
  "url": "https://www.meetup.com/ai-society-uk/events/315785102/",
  "startTime": "2026-09-27T08:30:00+01:00",
  "endTime": "2026-09-27T10:30:00+01:00",
  "timezone": "Europe/London",
  "eventType": "in-person",
  "isOnline": false,
  "eventStatus": "upcoming",
  "venueName": "Italian Gardens fountain, Kensington Gardens",
  "venueCity": "London",
  "venueCountry": "GB",
  "groupName": "AI & Society UK",
  "groupUrl": "https://www.meetup.com/ai-society-uk/",
  "groupMembers": 144,
  "category": "Technology",
  "topics": ["AI and Society", "Machine Learning", "Data Science", "Beginners Running", "Free Running"],
  "isFree": true,
  "fee": null,
  "goingCount": 39,
  "waitlistCount": 0,
  "image": "https://secure.meetupstatic.com/photos/event/d/1/a/1/highres_535313665.jpeg",
  "description": "Overview\nJoin us for a fun run and coffee chat in London, mixing AI talks with good vibes and a morning coffee/tea! …",
  "createdAt": "2026-07-22T00:07:02-04:00",
  "status": "OK"
}
```

### How to use it

1. Paste **Meetup links**, one per line: a search from meetup.com/find (pick a location there first), a group, a group's past events, or an event. Or type **Places** and, if you like, **Keywords** — every keyword is searched in every place — and choose the distance, dates, category and in person or online.
2. Set **Max events per search or group**. Searches without an end date cover the next 30 days; change **Days ahead** for more (up to 180).
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new events in a city, save your input as a task and schedule it daily or weekly: searches without fixed dates always start from the moment the run starts.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per event delivered** — see the price on this page. Links that are not Meetup event pages, places Meetup does not know, groups that do not exist and searches with nothing in them come back as free records with the reason.

### FAQ

**How many events per search?** As many as Meetup has in the dates you ask for. One live run read 1,500 in-person events around New York in 15 days; another read 2,000 London events for a single week. Set **Max events per search or group** as high as you need.

**Why do I get fewer events for my keyword than meetup.com shows?** Meetup's search adds loosely related events. With **Only events that mention the keyword** ticked — the default — only events whose title, description, topics or group name contain every word of your keyword come back. Untick it to get Meetup's full list.

**Why are there online events in my city search?** Meetup adds online events to every place search (in a London search for next week, 921 of 2,000). Choose **In person** in the form, or "In person" on meetup.com before you copy the link.

**The place came out wrong.** The `place` field shows which place Meetup matched. Meetup knows some cities by their local name only: "Munich" is Munich, North Dakota and "Rome" is Rome, New York, while "München" and "Roma" are the ones in Europe. Add the state or country for towns that share a name ("Springfield, MA"), or paste a search link from meetup.com.

**Can I get past events?** Yes, for groups: choose **Upcoming and past** or **Past**, or paste a group's past-events link (…/events/?type=past). A live run read the 412 past events of NY Tech Meetup, back to 2004. Searches start from the moment the run starts.

**Why no host or attendee names?** They are personal data. Every event has its `url`; people RSVP and contact the organisers on Meetup.

**Is this affiliated with Meetup?** No. This is an independent tool that reads public Meetup events.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

## `searchUrls` (type: `array`):

One per line: an event search set up on meetup.com/find (with a location), a group (https://www.meetup.com/<group>/ — its upcoming events; …/events/?type=past for past ones), or a single event.

## `locations` (type: `array`):

Or search here without a link: cities or towns (Berlin, Austin, TX, São Paulo). Add the state or country when a name is ambiguous. With no keywords, you get every event near the place.

## `keywords` (type: `array`):

Optional: searched in each place above, one search per keyword and place (python, hiking, board games).

## `onlyExactMatches` (type: `boolean`):

Meetup's search also returns loosely related events. Keeps only events whose title, description, topics or group name contain every word of the keyword. Untick to get everything Meetup suggests.

## `radiusKm` (type: `integer`):

Optional: only events this far from the place. Empty: Meetup's own area.

## `eventType` (type: `string`):

For the places above.

## `category` (type: `string`):

Optional, for the places above.

## `dateFrom` (type: `string`):

Optional (YYYY-MM-DD), for the places above. Empty: from now.

## `dateTo` (type: `string`):

Optional (YYYY-MM-DD), for the places above. Empty: see "Days ahead".

## `daysAhead` (type: `integer`):

How many days a search covers when it has no end date — also for search links without a date filter.

## `groupEvents` (type: `string`):

For group links. A link to a group's past events always gives past events.

## `maxEventsPerSearch` (type: `integer`):

Stops each search, place-and-keyword or group after this many events.

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

How many searches or groups to work on at the same time.

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

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.meetup.com/find/?keywords=hiking&location=gb--17--London&source=EVENTS"
  ],
  "onlyExactMatches": true,
  "eventType": "any",
  "category": "any",
  "daysAhead": 30,
  "groupEvents": "upcoming",
  "maxEventsPerSearch": 30,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "searchUrls": [
        "https://www.meetup.com/find/?keywords=hiking&location=gb--17--London&source=EVENTS"
    ],
    "maxEventsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/meetup-events").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 = {
    "searchUrls": ["https://www.meetup.com/find/?keywords=hiking&location=gb--17--London&source=EVENTS"],
    "maxEventsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/meetup-events").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 '{
  "searchUrls": [
    "https://www.meetup.com/find/?keywords=hiking&location=gb--17--London&source=EVENTS"
  ],
  "maxEventsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/meetup-events --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/meetup-events"
        }
    }
}
```

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/Lg5whQskKCjAGcwU6/builds/66mCyE92j0gVThFXm/openapi.json
