Community events, with how many people are actually going
The Meetup API returns local event and group data as clean JSON.
4 active endpoints. Every call is 1 credit.
- POST/meetup/v1/search
- POST/meetup/v1/event
- POST/meetup/v1/group
- POST/meetup/v1/group_events
What Meetup endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Meetup API
3 of 4 endpoints, ready to run
Events matching a place and a window, with the name, start and end times, whether it is online, the attendance count and the link.
{ "ok": true, "meta": { "api": "meetup", "endpoint": "search", "mode": "live", "latency_ms": 1670.2, "record_count": 20, "cache_hit": false }, "data": { "events": [ { "event_id": "315638879", "name": "Inside Microsoft IQ: A Walkthrough of Foundry", "url": "https://www.meetup.com/technology-ai/events/315638879/", "start_date": "2026-08-31T18:00:00-04:00", "end_date": "2026-08-31T20:00:00-04:00", "is_online": true, "event_type": "ONLINE", "going_count": 11, "max_tickets": null, "fee": null, "image": "https://secure.meetupstatic.com/photos/event/8/3/a/4/highres_534813700.jpeg", "venue": { "name": "Online event", "address": null, "city": null, "state": null, "country": null, "postal_code": null, "latitude": -8.521147, "longitude": 179.1962 }, "group": { "group_id": "38270338", "name": "technology.ai", "urlname": "technology-ai", "city": "New York", "state": "NY", "country": "us" } }, { "event_id": "315919823", "name": "Singles Happy Hour", "url": "https://www.meetup.com/singles-meetup-com-1608/events/315919823/", "start_date": "2026-09-04T17:00:00-04:00", "end_date": "2026-09-04T19:00:00-04:00", "is_online": false, "event_type": "PHYSICAL", "going_count": 50, "max_tickets": 50, "fee": null, "image": "https://secure.meetupstatic.com/photos/event/4/e/e/5/highres_535880197.jpeg", "venue": { "name": "Casa Mia at the Hawthorne", "address": "2421 Berlin Turnpike", "city": "Berlin", "state": "CT", "country": "us", "postal_code": "06037", "latitude": 41.587006, "longitude": -72.76042 }, "group": { "group_id": "913958", "name": "Singles Social Connections", "urlname": "singles-meetup-com-1608", "city": "Bristol", "state": "CT", "country": "us" } }, { "event_id": "316192822", "name": "What’s New in C#: Modern C# in 2026", "url": "https://www.meetup.com/technology-ai/events/316192822/", "start_date": "2026-09-02T19:00:00-04:00", "end_date": "2026-09-02T21:00:00-04:00", "is_online": true, "event_type": "ONLINE", "going_count": 8, "max_tickets": null, "fee": null, "image": "https://secure.meetupstatic.com/photos/event/1/e/9/7/highres_535747831.jpeg", "venue": { "name": "Online event", "address": null, "city": null, "state": null, "country": null, "postal_code": null, "latitude": -8.521147, "longitude": 179.1962 }, "group": { "group_id": "38270338", "name": "technology.ai", "urlname": "technology-ai", "city": "New York", "state": "NY", "country": "us" } } ] } }
How the Meetup API works
Meetup is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 184 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Judging whether a community is active or dormant
Every technology has a group in every city. Most of them last ran an event in 2019, and the group page does not make that obvious.
{"location": "Berlin", "event_type": "PHYSICAL"}Rows carry the attendance count, which is the fastest way to see which of twenty listings anyone is actually going to.
{"group": "…", "type": "past"}Then the group's history. A group with events every month and one with a three-year gap look identical until you ask.
Attendance counts and event cadence together answer the question a listings page cannot: is this a community or an abandoned page.
curl -X POST https://api.reefapi.com/meetup/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"location":"New York"}'{
"ok": true,
"data": { … },
"meta": {
"api": "meetup",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Group urlname vs group_id, event ids, and how location and time really resolve
Two things decide whether this API gives you the events you meant: which name you pass for a group, and which place name you pass for a search. Every value below is from live calls on 2026-08-27 against code-for-boston plus event searches for Berlin.
| Field | Measured value | What to know |
|---|---|---|
| group.urlname | code-for-boston | The slug in meetup.com/<urlname>/. The group and group_events actions take this, not the id |
| group.group_id | "7832132" | A numeric string. It is returned everywhere but is not accepted as an input anywhere |
| event_id | "315399364" | A numeric string. The event action still wants the full url, because the id alone has no group path attached |
| start_date / end_date | 2026-08-25T19:00:00-04:00 | ISO 8601 carrying the venue's local UTC offset, never UTC. group.timezone gives the zone name, America/New_York |
| location | "Berlin" resolved to "Berlin, CT"; "Berlin, Germany" resolved to "Berlin, de" | meta.resolved_location tells you what the geocoder actually picked. Read it every time |
| going_count / max_tickets | 179 going against max_tickets 180 | max_tickets null means the event is uncapped, not that the field is missing |
| fee | null on all 21 events measured | Null is a free or unpriced event. A fee object with amount, currency and is_free only appears on paid ones |
| rating / rating_count | 4.81 over 1,196 ratings | A five-point group rating. It exists on the group action only and never on an event |
| online events | venue.name "Online event" with address, city, state and postal_code null | event_type is the flag to test: it reads "ONLINE" or "PHYSICAL" |
| venue.country | "us", "de" and "DE" across three rows in one session | Case is not consistent. Compare it case-insensitively |
Non-US venue data can carry upstream placeholders. Both Berlin venues measured on 2026-08-27 returned postal_code as the literal string "meetup1", and non-US groups return state as an empty string rather than null. group.social_links behaves the same way: code-for-boston returned the literal "http://" for flickr, tumblr, instagram and tiktok, so test for a real host before you follow one. In search meta, total_count is the size of the page you received rather than the size of the result set, so page on has_more and next_cursor ("MjA=", which is base64 for 20).
What the rows tell you about a community
Measured on city searches.
How many people have said they are going, on the search result itself. In community events that number is the whole signal, and it is the one field a listings page buries.
Both the event type and an online boolean are returned, and the type is a search filter. Since the pandemic these are genuinely different products sharing one listing surface, and conflating them makes a local search useless.
A group's events are retrievable by its readable slug, upcoming or past. That makes tracking a specific community over time straightforward rather than requiring you to store an opaque id.
Start and end times carry their timezone offset. For events specifically, a naive local time is a bug waiting for the next time somebody in another country reads the listing.
This is where user groups, hobby communities and small professional meetups live. It is the best available view of grassroots activity in a city and it is not where large conferences are listed.
What people build with Meetup
The jobs this data is most often used for.
endpoints
credit per call
Event-discovery apps call search to show upcoming Meetup events near a user.
Community tools use group and group_events to track a community's activity.
Local-marketing products use search to find engaged audiences by topic and city.
What Meetup data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 184 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/meetup/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"location":"New York"}'import requests
r = requests.post(
"https://api.reefapi.com/meetup/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"location": "New York"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Meetup.
Get a free key →Why did a search for Berlin return events in Connecticut?▾
Because location is geocoded, and a bare city name resolves to whichever match the geocoder ranks first. On 2026-08-27, location "Berlin" returned 17 events around Bristol and West Hartford with meta.resolved_location "Berlin, CT". Passing "Berlin, Germany" returned 20 events in Berlin proper with meta.resolved_location "Berlin, de". Always qualify the place, and always read meta.resolved_location before you trust the rows.
Are the event times in UTC?▾
No. start_date and end_date are ISO 8601 with the venue's own UTC offset attached, for example 2026-08-25T19:00:00-04:00 for a Boston event and 2026-08-27T19:00:00+02:00 for a Berlin one. The offset is the local wall-clock offset on that date, so it already accounts for daylight saving. The group action adds timezone as an IANA zone name, America/New_York, if you need the zone rather than the offset.
Can I fetch an event from its id alone?▾
Not reliably. A Meetup event URL is /<group-urlname>/events/<event_id>/, and the id has no group path in it, so the event action asks for url instead. Every search and group_events row already carries the full url, so pass that through. If you only have an id, get the group urlname first and rebuild the URL.
How do I tell an online event from an in-person one?▾
Read event_type, which is "ONLINE" or "PHYSICAL". Online events still return a venue object, but it is a stub: name reads "Online event" and address, city, state, country and postal_code are null on the group_events rows measured. The search action also accepts event_type as a filter, so you can ask for one kind only rather than filtering client-side.
What does a null fee mean?▾
That the event has no price attached, which on Meetup means free. Across 21 events measured on 2026-08-27, spanning Berlin, Boston and central Connecticut, every single one returned fee null. When an event is paid, fee is an object with amount, currency and is_free. Do not read null as "unknown price"; read it as no fee published.
Does the API return a group rating?▾
The group action does. code-for-boston returned rating 4.81 with rating_count 1,196 on a five-point scale, alongside member_count 8,125, leadership_count 7, founded_date 2013-03-29T07:52:19-04:00, join_mode "OPEN", status "PAID", 13 topics and an organizer block with a name and member_id. None of that is on an event row, so if you are ranking events by organizer quality you need one group call per group.
Why are half the social_links just "http://"?▾
Because Meetup stores an unset social link as an empty URL prefix rather than as nothing. code-for-boston returned real values for facebook, twitter, linkedin and other, and the literal string "http://" for flickr, tumblr, instagram and tiktok. Treat any value with no host after the scheme as absent.
How does pagination work on search?▾
Page on meta.has_more and meta.next_cursor, and ignore meta.total_count as a total. A live Berlin search returned total_count 20 with has_more true and next_cursor "MjA=", which is base64 for 20, so total_count was the page size rather than the result count. Feed next_cursor back in as cursor and keep going until has_more is false. radius, from 1 to 100 miles, and the date window (today, tomorrow, this-week, this-weekend, this-month) are the levers for narrowing before you page.
What is the Meetup API?▾
Meetup API is a ReefAPI endpoint group for meetup It returns live JSON through POST requests under /meetup/v1.
Is the Meetup API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Meetup calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Meetup login or account?▾
No login to Meetup is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Meetup data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Meetup API use?▾
Meetup actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Meetup from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call meetup actions with the same key, credit pool and JSON envelope used by normal REST requests.
25 Media, Film & Knowledge APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Meetup, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-30.