Use Meetup & Lu.ma Event Finder by City, Group & Calendar with Python
Search, browse, or look up events on Meetup and Lu.ma by city, group, or calendar: dates, venue, organizer, attendee count, photo and RSVP status from one actor and input shape.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"enrichDetails": false,
"eventPeriod": "upcoming",
"eventType": "any",
"freeOnly": false,
"includeAttendees": false,
"includeMembers": false,
"location": "san francisco",
"maxItems": 3,
"mode": "searchEvents",
"onlyNewSinceLastRun": false,
"platform": "meetup",
"query": "tech",
"sortBy": "relevance"
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
platform | string | required | Which platform to query. All modes are HTTP-only and need no login. |
mode | string | required | What to scrape: search, specific event/group/calendar URLs, group/calendar event lists, nearby discovery, or auto-routed URLs. |
query | string | optional | Free-text keyword. Required for Meetup search. Lu.ma keyword search caps at 50 results per run. |
location | string | optional | City, state, or country. Meetup resolves it server-side; Lu.ma resolves the featured city. Examples: `san francisco`, `New York, NY`, `London, UK`. |
lat | number | optional | Explicit latitude. Bypasses location geocoding and anchors Lu.ma category feeds. |
lng | number | optional | Explicit longitude. Bypasses location geocoding and anchors Lu.ma category feeds. |
country | string | optional | Optional ISO country code used when resolving a Meetup location. |
meetupCategory | string | optional | Browse or filter Meetup by a live topic category. Use `all` with a query for no category filter. |
lumaCategory | string | optional | Lu.ma category feed. Needs a city or `lat`/`lng` to anchor the feed. |
eventType | string | optional | Meetup server-side event format filter. Lu.ma location types are not reliable, so Lu.ma ignores this field. |
sortBy | string | optional | Meetup sorts server-side. Lu.ma sorts client-side by start date; relevance keeps source order. |
dateFrom | string | optional | Earliest event date (inclusive). Accepts `YYYY-MM-DD` or an ISO date-time. |
dateTo | string | optional | Latest event date (inclusive). Accepts `YYYY-MM-DD` or an ISO date-time. |
radiusKm | integer | optional | Meetup search radius around the resolved location. |
minAttendees | integer | optional | Drop events below this RSVP/guest count. Meetup filters server-side; Lu.ma filters client-side. |
freeOnly | boolean | optional | Drop events that are known to charge. Events with an unknown price are kept. |
eventPeriod | string | optional | Upcoming, past, or both. Past is reliable on Meetup groups and Lu.ma calendars; Lu.ma city/category feeds are upcoming-only. |
urls | array | optional | One or more Meetup or Lu.ma URLs. `mode=byUrl` auto-routes each one; `byEvent`, `byGroup`, and calendar modes also accept URLs. |
slugs | array | optional | Meetup group urlnames or Lu.ma event/calendar slugs. For Meetup events, pair index-aligned with `eventIds`. |
eventIds | array | optional | Numeric Meetup event IDs or Lu.ma `evt-...` ids. Meetup numeric IDs can be used alone or index-aligned with `slugs` (group urlnames). |
lumaCity | string | optional | Featured Lu.ma city feed. Alternatively supply `location` or `lat`/`lng`. |
maxItems | integer | optional | Hard cap on emitted records. |
includeAttendees | boolean | optional | Add public RSVP names/photos to Meetup events (one extra request per event, capped at 250). |
includeMembers | boolean | optional | Add a public member sample to Meetup group records (one extra request per group). |
enrichDetails | boolean | optional | Fetch each Lu.ma event's detail endpoint for description, ticket tiers, and featured guests. Off by default for speed. |
onlyNewSinceLastRun | boolean | optional | Remember emitted IDs for this exact input and skip them on later runs. The first run emits everything. |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/KE35NpydwUThD8CQf/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
Event, group, calendar, city, and error records from Meetup and Lu.ma with dates, venue, pricing, hosts, topics, attendance, and optional attendee details.
Questions before you run
Which inputs are required?
The published required fields are platform, mode
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build FFqtvn0WerZ7vwqc7 and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.