# Meetup Scraper- All URLs (`hypebridge/meetup-scraper-all-urls`) Actor

Extracts event listings, group profiles, and full event details from [Meetup.com](https://www.meetup.com) without needing an official API. It supports city browse pages, keyword search pages, group profile pages, and direct event URLs.

- **URL**: https://apify.com/hypebridge/meetup-scraper-all-urls.md
- **Developed by:** [Hypebridge](https://apify.com/hypebridge) (community)
- **Categories:** Automation, Agents, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.63 / 1,000 basic-event-scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### What does Meetup Scraper do?

**Meetup Scraper** extracts event listings, group profiles, and full event details from [Meetup.com](https://www.meetup.com) without needing an official API. It supports city browse pages, keyword search pages, group profile pages, and direct event URLs — producing structured records ready for analysis, export, or downstream processing.

### Why scrape Meetup?

- **Event intelligence**: Track upcoming events by city, topic, or organizer to spot trends before they go mainstream.
- **Lead generation**: Identify active communities and event organizers in your target market or geography.
- **Market research**: Analyse RSVP counts, group sizes, and event frequency to gauge interest in a topic or location.
- **Content aggregation**: Build event calendars or newsletters by pulling structured event data across multiple cities and categories.
- **Competitive analysis**: Monitor competitor communities, event cadence, and audience engagement metrics.

### What data can Meetup Scraper extract?

#### Event records

| Field | Type | Description |
|-------|------|-------------|
| `id` | String | Meetup event ID |
| `title` | String | Event title |
| `url` | String | Canonical Meetup event URL |
| `dateTime` | String | Event start time (ISO 8601 with timezone) |
| `endTime` | String | Event end time (ISO 8601) |
| `eventType` | String | `PHYSICAL` or `ONLINE` |
| `goingCount` | Integer | Number of attendees marked as going |
| `description` | String | Full event description (with `Get event details` enabled) |
| `venue` | Object | Venue name, address, city, state, coordinates |
| `group` | Object | Hosting group name, URL slug, and group URL |
| `photo` | Object | Featured event photo ID and URL |
| `feeSettings` | Object | Ticket or fee information when set by the organiser |

#### Group records

| Field | Type | Description |
|-------|------|-------------|
| `name` | String | Group name |
| `url` | String | Group URL |
| `city` / `state` / `country` | String | Group location |
| `memberCount` | Integer | Total group members |
| `avgRating` | Number | Average event rating |
| `upcomingEvents` | Array | First batch of upcoming events |

Full schema available in the **Output** tab.

### How to scrape Meetup

1. [Create a free Apify account](https://apify.com) if you don't have one.
2. Open **Meetup Scraper** and click **Try for free**.
3. Paste one or more Meetup URLs into **Start URLs** — city pages, search pages, group pages, or direct event links all work.
4. Set **Max events** to cap the number of results (use `0` for no limit).
5. Enable **Get event details** if you need full descriptions, end times, and venue coordinates.
6. Click **Start** and download results from the **Dataset** tab as JSON, CSV, Excel, or HTML.

### How much will it cost?

Pay-per-result pricing — you are charged per event scraped, not per compute unit.

| Pricing tier | Price | What's charged |
|---|---|---|
| Basic event | $0.003 / event | Event extracted from a city or search listing |
| Detailed event | $0.005 / event | Event enriched via full GraphQL detail (when **Get event details** is on) |

> Platform compute costs are additional. Run a small capped test first to estimate costs before committing to a large run.

### Input

See the **Input** tab for the full schema. Key fields:

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | Array | required | Meetup URLs to scrape |
| `maxEvents` | Number | 100 | Max unique events to extract. `0` = unlimited |
| `getEventDetails` | Boolean | false | Enrich each event with full GraphQL detail |
| `maxConcurrency` | Number | 20 | Parallel request limit (1–50) |
| `proxyConfiguration` | Object | — | Proxy settings |
| `debugMode` | Boolean | false | Save HTML snapshots for pages missing expected data |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.meetup.com/find/us--tx--austin/" },
    { "url": "https://www.meetup.com/find/?source=EVENTS&keywords=AI" }
  ],
  "maxEvents": 200,
  "getEventDetails": true
}
````

### Output

Results are saved to the **Dataset** tab. Download as JSON, CSV, Excel, or HTML.

Each run produces two record types distinguished by the `recordType` field:

- **Events** (`recordType: "event"`): title, URL, date/time, RSVP count, venue, group, photo, fee settings
- **Groups** (`recordType: "group"`): name, location, member count, rating, upcoming events

#### Sample event output

```json
{
  "recordType": "event",
  "id": "314768754",
  "title": "Monthly AI & Prompt Engineering Meetup",
  "url": "https://www.meetup.com/plano-prompt-engineers/events/314768754/",
  "dateTime": "2026-06-10T18:30:00-05:00",
  "endTime": "2026-06-10T20:30:00-05:00",
  "eventType": "PHYSICAL",
  "status": "ACTIVE",
  "goingCount": 34,
  "group": {
    "id": "35123456",
    "name": "Plano Prompt Engineers",
    "urlname": "plano-prompt-engineers",
    "url": "https://www.meetup.com/plano-prompt-engineers/"
  },
  "venue": {
    "name": "Plano Public Library",
    "address": "2501 Coit Rd",
    "city": "Plano",
    "state": "TX",
    "country": "us",
    "lat": 33.0317,
    "lon": -96.7397
  },
  "extractedFrom": "graphql",
  "sourceUrl": "https://www.meetup.com/find/us--tx--frisco/"
}
```

#### Sample group output

```json
{
  "recordType": "group",
  "id": "35123456",
  "name": "Plano Prompt Engineers",
  "url": "https://www.meetup.com/plano-prompt-engineers/",
  "city": "Plano",
  "state": "TX",
  "country": "us",
  "memberCount": 847,
  "avgRating": 4.8,
  "totalRatings": 62,
  "upcomingEventCount": 2,
  "sourceUrl": "https://www.meetup.com/plano-prompt-engineers/"
}
```

### Tips

- Set `maxEvents` to a small number (e.g. 10) before committing to a large run to verify output and estimate costs.
- Use city find pages (`/find/us--tx--austin/`) to get broad local coverage; use keyword search pages (`/find/?source=EVENTS&keywords=python`) to target a specific topic.
- Enable **Get event details** only when you need full descriptions or end times — basic listings are cheaper and sufficient for most aggregation use cases.
- Scraping a group profile page also returns a group record with member count and rating data, not just its events.

### FAQ

#### Is scraping Meetup legal?

Meetup Scraper only extracts publicly available data visible to any visitor without logging in. Always review Meetup's Terms of Service and ensure you have a legitimate purpose for the data you collect.

#### Can I scrape a specific event URL directly?

Yes — paste a direct event URL (e.g. `https://www.meetup.com/group-name/events/123456789/`) into **Start URLs**. Direct event URLs are always enriched with full GraphQL detail regardless of the **Get event details** setting.

#### Why are some events missing descriptions?

Descriptions are only returned when **Get event details** is enabled. Basic listing scrapes capture title, date, RSVP count, and venue but skip the full description to keep costs low.

### Support

- Bugs and feature requests → **Issues** tab
- Programmatic access → **API** tab

> **Disclaimer**: This Actor only extracts publicly available data that any visitor can see without logging in. It does not collect private user data such as email addresses, profile details, or attendance history. You are responsible for ensuring your use of the data complies with Meetup's Terms of Service, GDPR, and any other applicable regulations.

# Actor input Schema

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

Meetup.com URLs to scrape. Supports city find pages (/find/us--tx--frisco/), keyword search pages (/find/?source=EVENTS\&keywords=...), group pages (/{group-slug}/), and direct event URLs (/{group-slug}/events/{id}/).

## `maxEvents` (type: `integer`):

Maximum number of unique events to extract across all start URLs. Search and group pagination stops once this cap is reached. Use 0 for no limit.

## `getEventDetails` (type: `boolean`):

When enabled, enriches each discovered event through the Meetup GraphQL API for complete fields such as full description, end time, and venue coordinates.

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

Maximum number of parallel page requests.

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

Proxy settings. Datacenter proxies are sufficient based on the current target-site profile.

## `debugMode` (type: `boolean`):

Saves HTML snapshots for pages where expected Meetup SSR data is missing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.meetup.com/find/us--tx--frisco/"
    }
  ],
  "maxEvents": 100,
  "getEventDetails": false,
  "maxConcurrency": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debugMode": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing Meetup event and group records.

## `files` (type: `string`):

Key-value store files created when debug mode is enabled.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("hypebridge/meetup-scraper-all-urls").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("hypebridge/meetup-scraper-all-urls").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call hypebridge/meetup-scraper-all-urls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hypebridge/meetup-scraper-all-urls",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Meetup Scraper- All URLs",
        "description": "Extracts event listings, group profiles, and full event details from [Meetup.com](https://www.meetup.com) without needing an official API. It supports city browse pages, keyword search pages, group profile pages, and direct event URLs.",
        "version": "0.0",
        "x-build-id": "ID4OJ9twJIaKZzHWR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/hypebridge~meetup-scraper-all-urls/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-hypebridge-meetup-scraper-all-urls",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/hypebridge~meetup-scraper-all-urls/runs": {
            "post": {
                "operationId": "runs-sync-hypebridge-meetup-scraper-all-urls",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/hypebridge~meetup-scraper-all-urls/run-sync": {
            "post": {
                "operationId": "run-sync-hypebridge-meetup-scraper-all-urls",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Meetup.com URLs to scrape. Supports city find pages (/find/us--tx--frisco/), keyword search pages (/find/?source=EVENTS&keywords=...), group pages (/{group-slug}/), and direct event URLs (/{group-slug}/events/{id}/).",
                        "default": [
                            {
                                "url": "https://www.meetup.com/find/us--tx--frisco/"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxEvents": {
                        "title": "Max events",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of unique events to extract across all start URLs. Search and group pagination stops once this cap is reached. Use 0 for no limit.",
                        "default": 100
                    },
                    "getEventDetails": {
                        "title": "Get event details",
                        "type": "boolean",
                        "description": "When enabled, enriches each discovered event through the Meetup GraphQL API for complete fields such as full description, end time, and venue coordinates.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of parallel page requests.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Datacenter proxies are sufficient based on the current target-site profile.",
                        "default": {
                            "useApifyProxy": false
                        }
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Saves HTML snapshots for pages where expected Meetup SSR data is missing.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
