Skip to main content
RapidDev - Software Development Agency
v0-integrationsNext.js API Route

How to Integrate Meetup with V0

To integrate Meetup with V0 by Vercel, create a Next.js API route that queries the Meetup GraphQL API to fetch events and groups. V0 generates the event discovery UI; you add your Meetup API key or OAuth credentials to Vercel environment variables and deploy. The result is a local event discovery page or community group dashboard built on top of Meetup's 35 million member network.

What you'll learn

  • How to generate an event discovery and listing UI with V0
  • How to create a Next.js API route that sends GraphQL queries to the Meetup API
  • How to authenticate with the Meetup API using OAuth2 bearer tokens
  • How to store Meetup API credentials securely in Vercel environment variables
  • How to display Meetup events, groups, and RSVP counts in a Next.js app
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate13 min read20 minutesOtherApril 2026RapidDev Engineering Team
TL;DR

To integrate Meetup with V0 by Vercel, create a Next.js API route that queries the Meetup GraphQL API to fetch events and groups. V0 generates the event discovery UI; you add your Meetup API key or OAuth credentials to Vercel environment variables and deploy. The result is a local event discovery page or community group dashboard built on top of Meetup's 35 million member network.

Build Local Event Discovery and Community Pages Using the Meetup API

Meetup's API grants access to community group profiles, upcoming event listings, member counts, RSVP data, and past event histories. Unlike Eventbrite which focuses on one-off ticketed events, Meetup specializes in recurring community gatherings — weekly tech meetups, monthly book clubs, and interest-based groups that meet regularly. This makes Meetup data valuable for community portals, local city guides, and tech scene directories.

V0 generates the event discovery UI — location-based event cards, group profile pages, RSVP buttons, and recurring event calendars. Your Next.js API routes handle the GraphQL queries to Meetup, transform the response data, and serve it to your components. Since Meetup uses GraphQL, your API route acts as a GraphQL client, sending POST requests to Meetup's endpoint with query and variables.

Meetup's API access requires creating a consumer key at meetup.com's developer portal. Public group and event data is accessible with basic API authentication. User-specific actions like RSVP management require OAuth2 with user consent. This tutorial covers the most common use case: displaying public Meetup event data in a V0-generated interface.

Integration method

Next.js API Route

Meetup connects to V0-generated Next.js apps through a server-side API route that queries Meetup's GraphQL API. The Meetup API key or OAuth2 token lives in Vercel environment variables. Your frontend fetches local events, group details, and RSVP information from your own API route, which proxies GraphQL queries to Meetup's API endpoint.

Prerequisites

  • A V0 account at v0.dev with a Next.js project created
  • A Meetup account at meetup.com
  • A Meetup API consumer key — create one at secure.meetup.com/meetup_api/key
  • For OAuth2 user flows: a registered Meetup OAuth consumer application with client ID and secret
  • A Vercel account connected to your V0 project for deployment

Step-by-step guide

1

Generate the Events Discovery UI with V0

Open your V0 project and prompt V0 to generate the event discovery interface. Meetup events include rich data: event title, date and time, event URL, venue details (name, address, city, latitude/longitude), a description, RSVP count, photo URL, fee information, and the group that is hosting it. Design your UI around the fields you want to display prominently. For a local events page, a grid of cards with event photo, title, date/time, venue, and RSVP count works well. For a group directory, a list layout with group avatar, name, member count, and next event is common. Ask V0 to include loading skeleton states and an empty state message for when no events match the search criteria. Specify that event data should be fetched from /api/meetup/events (or /api/meetup/groups for group listings) — V0 will wire up the components to these routes with the appropriate fetch calls. Include a location search or category filter UI to give users control over the results they see. V0 can generate the filter state management with React hooks.

V0 Prompt

Create a local events discovery page with a search bar (city name) and topic filter dropdown at the top. Below, show a responsive grid of event cards. Each card has a colored header with the event date, event title in bold, group name, venue name, RSVP count with a people icon, and a 'RSVP on Meetup' button that opens the event URL in a new tab. Fetch events from /api/meetup/events. Show 'No events found in this area' when the results array is empty. Use shadcn/ui Card and Badge components.

Paste this in V0 chat

Pro tip: Meetup event descriptions contain HTML markup. Ask V0 to render the description as HTML using dangerouslySetInnerHTML or to strip HTML tags and show a plain text excerpt — the raw description string often has paragraph and anchor tags.

Expected result: V0 generates an events discovery page with a search bar, filters, and event card grid using mock data. Cards are wired to /api/meetup/events which does not exist yet.

2

Create the Meetup GraphQL API Route

Create a new file at app/api/meetup/route.ts. The Meetup API v3 uses GraphQL, so your route sends POST requests to https://api.meetup.com/gql with a JSON body containing a query string and variables object. The response is a standard GraphQL response with a data key. For fetching upcoming events near a location, use Meetup's keywordSearch query or the upcomingEvents query on a specific group. The keywordSearch query accepts a filter object with lat, lon, radius, and source fields. The upcomingEvents query on a group object takes a groupUrlname and returns the next N events. Set the Authorization header to Bearer {access_token} where the token is your Meetup OAuth access token. For a service account integration where you are displaying public Meetup data on your own site (not user-specific data), you can obtain a long-lived token using the OAuth2 client credentials flow. This token goes in your MEETUP_ACCESS_TOKEN environment variable. The GraphQL response structure nests data under the query name. For keywordSearch, the events are in data.keywordSearch.edges[].node. Always check the Meetup GraphQL schema explorer at api.meetup.com/gql for the exact field names available in queries.

app/api/meetup/route.ts
1import { NextRequest, NextResponse } from 'next/server';
2
3const MEETUP_GRAPHQL_URL = 'https://api.meetup.com/gql';
4
5export async function GET(request: NextRequest) {
6 const { searchParams } = new URL(request.url);
7 const lat = searchParams.get('lat') || '37.7749';
8 const lon = searchParams.get('lon') || '-122.4194';
9 const radius = searchParams.get('radius') || '10';
10 const topic = searchParams.get('topic') || 'tech';
11
12 const token = process.env.MEETUP_ACCESS_TOKEN;
13 if (!token) {
14 return NextResponse.json(
15 { error: 'Meetup API token not configured' },
16 { status: 500 }
17 );
18 }
19
20 const query = `
21 query GetUpcomingEvents($lat: Float!, $lon: Float!, $radius: Float!, $topic: String!) {
22 keywordSearch(
23 filter: {
24 lat: $lat
25 lon: $lon
26 radius: $radius
27 source: EVENTS
28 query: $topic
29 }
30 ) {
31 edges {
32 node {
33 result {
34 ... on Event {
35 id
36 title
37 dateTime
38 eventUrl
39 rsvpState
40 going
41 venue {
42 name
43 address
44 city
45 }
46 group {
47 name
48 urlname
49 groupPhoto {
50 source
51 }
52 }
53 }
54 }
55 }
56 }
57 }
58 }
59 `;
60
61 try {
62 const response = await fetch(MEETUP_GRAPHQL_URL, {
63 method: 'POST',
64 headers: {
65 Authorization: `Bearer ${token}`,
66 'Content-Type': 'application/json',
67 },
68 body: JSON.stringify({
69 query,
70 variables: {
71 lat: parseFloat(lat),
72 lon: parseFloat(lon),
73 radius: parseFloat(radius),
74 topic,
75 },
76 }),
77 });
78
79 if (!response.ok) {
80 return NextResponse.json(
81 { error: 'Meetup API request failed' },
82 { status: response.status }
83 );
84 }
85
86 const data = await response.json();
87
88 if (data.errors) {
89 return NextResponse.json(
90 { error: data.errors[0].message },
91 { status: 400 }
92 );
93 }
94
95 const events = data.data?.keywordSearch?.edges
96 ?.map((edge: any) => edge.node.result)
97 .filter(Boolean) || [];
98
99 return NextResponse.json({ events });
100 } catch (error) {
101 console.error('Meetup API error:', error);
102 return NextResponse.json(
103 { error: 'Failed to fetch Meetup events' },
104 { status: 500 }
105 );
106 }
107}

Pro tip: Meetup's GraphQL API may evolve — check the schema introspection by running a query against https://api.meetup.com/gql or use their GraphQL explorer to verify field names are current before deploying.

Expected result: The API route returns an array of upcoming Meetup events for the specified coordinates and topic after the access token is configured.

3

Add Meetup API Credentials to Vercel Environment Variables

You need a Meetup OAuth access token to authenticate API requests. For a service integration displaying public Meetup data on your own site, the simplest approach is to create a Meetup OAuth consumer app and use the OAuth2 Authorization Code flow once to generate a long-lived token that you store in environment variables. To set up: go to secure.meetup.com/meetup_api/key and create a new OAuth consumer. Note the Consumer Key (Client ID) and Consumer Secret. Then use the Meetup OAuth flow to obtain an access token for your own Meetup account. The access token authorizes your app to read public Meetup data. Meetup's access tokens have an expiry — check their developer documentation for the current token lifetime and refresh token process. In Vercel Dashboard → Settings → Environment Variables, add MEETUP_ACCESS_TOKEN with your OAuth access token value. If you also need MEETUP_CLIENT_ID and MEETUP_CLIENT_SECRET for a user-facing OAuth flow, add those as well. After adding variables, trigger a redeployment. Note: Meetup has been gradually updating its API access model. If you encounter access issues, check the current state of Meetup's API documentation at api.meetup.com — the available authentication methods and endpoints may have changed since this guide was written.

Pro tip: Meetup's API has had periods of restricted access and changes to their developer program. If you find the API access difficult to obtain, consider using Eventbrite's API as an alternative for event discovery — it has a more straightforward developer access process.

Expected result: MEETUP_ACCESS_TOKEN is set in Vercel. The events endpoint returns real Meetup events after redeployment.

4

Add a Group-Specific Events Route

Many use cases require fetching events for a specific Meetup group rather than searching by location — for example, embedding a tech community's events on their own website, or building a community hub for a specific organization's Meetup group. Create app/api/meetup/group/route.ts that accepts a groupUrlname query parameter and fetches that group's upcoming events using the proGroup GraphQL query. The group URL name is the slug in the Meetup URL — for https://www.meetup.com/javascript-san-francisco/, the urlname is 'javascript-san-francisco'. This route returns the group's details (name, member count, description, next event) and a list of upcoming events. The response can be used to build embedded event widgets, group profile pages, or recurring event calendars. You can also fetch past events by using the pastEvents field in the group query, useful for building event archives or showing a group's activity history.

V0 Prompt

Add a 'Featured Group' section to the page that shows a specific Meetup group's profile: group name, member count, description, and their next 3 upcoming events. Fetch from /api/meetup/group?urlname=javascript-san-francisco. Style as a highlighted card above the main events grid. Add a 'Join on Meetup' button that links to the group's Meetup URL.

Paste this in V0 chat

app/api/meetup/group/route.ts
1import { NextRequest, NextResponse } from 'next/server';
2
3const MEETUP_GRAPHQL_URL = 'https://api.meetup.com/gql';
4
5export async function GET(request: NextRequest) {
6 const { searchParams } = new URL(request.url);
7 const urlname = searchParams.get('urlname');
8
9 if (!urlname) {
10 return NextResponse.json(
11 { error: 'groupUrlname is required' },
12 { status: 400 }
13 );
14 }
15
16 const token = process.env.MEETUP_ACCESS_TOKEN;
17 if (!token) {
18 return NextResponse.json(
19 { error: 'Meetup API token not configured' },
20 { status: 500 }
21 );
22 }
23
24 const query = `
25 query GetGroupEvents($urlname: String!) {
26 proNetworkBySlug(slug: $urlname) {
27 id
28 name
29 urlname
30 description
31 memberships {
32 count
33 }
34 upcomingEvents(input: { first: 5 }) {
35 edges {
36 node {
37 id
38 title
39 dateTime
40 eventUrl
41 going
42 venue {
43 name
44 city
45 }
46 }
47 }
48 }
49 }
50 }
51 `;
52
53 try {
54 const response = await fetch(MEETUP_GRAPHQL_URL, {
55 method: 'POST',
56 headers: {
57 Authorization: `Bearer ${token}`,
58 'Content-Type': 'application/json',
59 },
60 body: JSON.stringify({ query, variables: { urlname } }),
61 });
62
63 const data = await response.json();
64 return NextResponse.json(data.data || {});
65 } catch (error) {
66 return NextResponse.json(
67 { error: 'Failed to fetch group events' },
68 { status: 500 }
69 );
70 }
71}

Pro tip: The exact GraphQL query structure for group events may differ depending on whether the group is a standard group or a Pro Network. Use Meetup's GraphQL playground to test queries before building your API route.

Expected result: The group endpoint returns a specific Meetup group's details and upcoming events, enabling group-specific event widgets.

Common use cases

Local Tech Events Discovery Page

Build a page listing upcoming tech meetups in a specific city. Fetch events from Meetup's API filtered by location and topic categories like 'tech', 'javascript', or 'machine-learning'. Display event cards with date, location, RSVP count, and a link to the Meetup event page.

V0 Prompt

Create a local events page with a city search input and a grid of event cards. Each card shows the event photo (or a placeholder), event title, group name, date and time, venue name, current RSVP count, and a 'View on Meetup' link button. Fetch upcoming events from /api/meetup/events?lat=37.7749&lon=-122.4194&radius=10&topic=tech. Use Tailwind CSS card styling.

Copy this prompt to try it in V0

Community Group Profile Directory

Create a directory page listing Meetup groups in a category, showing each group's name, description, member count, and most recent event. Useful for tech community websites, co-working spaces, and city startup ecosystems that want to showcase local groups.

V0 Prompt

Build a meetup group directory page with a filter sidebar (category, location radius) and a list of group cards. Each card shows group name, category badge, member count, next event date, and a description excerpt. Fetch from /api/meetup/groups?city=San+Francisco&category=technology. Add pagination with a 'Load more' button. Sort by member count by default.

Copy this prompt to try it in V0

Embedded Events Widget for a Tech Blog

Add a sidebar widget on a developer blog or community site that shows the next 3 upcoming events for a specific Meetup group. Readers can see what events are coming up from their local community without leaving the site.

V0 Prompt

Create a compact events sidebar widget that displays the next 3 upcoming events for a specific Meetup group. Show event title, date formatted as 'Tuesday, March 31', time, and RSVP count. Fetch from /api/meetup/upcoming?groupUrlname=javascript-san-francisco. Add a 'See all events on Meetup' footer link. Keep the widget under 300px wide.

Copy this prompt to try it in V0

Troubleshooting

401 Unauthorized — 'Not authorized to make this request' from Meetup API

Cause: The MEETUP_ACCESS_TOKEN is missing, expired, or was not generated with the correct OAuth scopes for the data being requested.

Solution: Go through the Meetup OAuth2 flow again to obtain a fresh access token. Ensure you request the necessary scopes — for reading public event data, the 'basic' scope is typically sufficient. Check the Meetup API documentation for current scope requirements and token expiry periods.

GraphQL errors in the response — 'errors' array present with message about unknown fields

Cause: Meetup has updated their GraphQL schema since the query was written, and some fields or query names no longer exist or have been renamed.

Solution: Use Meetup's GraphQL introspection or their developer playground to check the current schema. Run the introspection query to get the full current schema, then update your query to use the correct field names. The Meetup API is actively developed and field names do change.

typescript
1// Test your query in the Meetup GraphQL playground first:
2// Visit: https://api.meetup.com/gql (with a valid Authorization header)
3// Send an introspection query to see all available types and fields

Events array is empty even though the city has active Meetup groups

Cause: The latitude/longitude coordinates are incorrect, the search radius is too small, or the topic keyword has no matching events in the area. Meetup's search is keyword-based — broad terms like 'tech' return more results than specific ones like 'kubernetes'.

Solution: Verify the lat/lon coordinates for your city using a geocoding service. Increase the radius parameter (try 25 or 50 miles). Try a broader topic keyword. Check the Meetup website directly to confirm there are active groups in the area — some cities have limited Meetup activity.

Best practices

  • Cache Meetup API responses for at least 15-30 minutes since event data changes infrequently — this improves performance and avoids unnecessary API calls.
  • Sanitize Meetup event descriptions before rendering since they may contain HTML — either strip tags for plain text excerpts or use a safe HTML renderer to prevent XSS.
  • Always check for the errors array in GraphQL responses before accessing data — GraphQL can return partial results with errors alongside them.
  • Include fallback content for when Meetup API is unavailable — event data sites should degrade gracefully with cached data or placeholder messages rather than showing broken UI.
  • Link users to the Meetup event page for RSVP actions rather than implementing your own RSVP system — managing RSVPs requires more complex OAuth user delegation and Meetup's terms of service.
  • Filter events by upcoming dates on the server side before returning to the frontend — Meetup's API may include past events in some query results depending on how filters are applied.
  • Test with real coordinates and valid topic keywords before deploying — Meetup's search returns empty results for invalid coordinates rather than an error, which can look like a bug.

Alternatives

Frequently asked questions

Does Meetup's API use REST or GraphQL?

Meetup's current API v3 uses GraphQL. All queries are sent as POST requests to https://api.meetup.com/gql with a query string and variables in the request body. Earlier Meetup API versions used REST, but the v3 GraphQL API is the current standard. When searching online for Meetup API examples, check that they use the GraphQL endpoint.

Can I create events or RSVPs through the Meetup API?

Yes, the Meetup API supports creating events and managing RSVPs, but these actions require OAuth2 authorization from the specific Meetup user account taking the action. Your app must implement the user-facing OAuth2 flow where the user logs in to Meetup and grants permission. The API key alone is only sufficient for reading public data.

What is the difference between Meetup and Eventbrite?

Meetup focuses on recurring community groups and free or low-cost social gatherings — tech meetups, hobby clubs, language exchanges. Eventbrite focuses on one-off ticketed events like concerts, conferences, and fundraisers. For a developer community or local tech scene directory, Meetup's data is more relevant. For event ticketing or paid event management, Eventbrite is more appropriate.

Are Meetup API access tokens free?

Meetup provides API access for Meetup account holders. You need to create an OAuth consumer application at secure.meetup.com/meetup_api/key. There is no separate API subscription fee for basic usage, but Meetup's terms require you not to resell their data or use it to compete with Meetup directly. Pro network API access may have different requirements.

How do I get the latitude and longitude for a city search?

You can either hardcode coordinates for known cities, use a free geocoding API to convert city names to coordinates, or use the browser's Geolocation API (navigator.geolocation.getCurrentPosition) to get the user's current coordinates. For a location search input, Google Maps Geocoding API or the free Nominatim API from OpenStreetMap can convert city names to lat/lon.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.