Connect Retool to Meetup by creating a REST API Resource pointing to Meetup's GraphQL API endpoint (api.meetup.com/gql), authenticated with an OAuth 2.0 access token. Build community event management dashboards that display group events, RSVP lists, and attendance metrics — giving developer relations and marketing teams an operational view of their Meetup group activity from within Retool.
| Fact | Value |
|---|---|
| Tool | Meetup |
| Category | Other |
| Method | REST API Resource |
| Difficulty | Beginner |
| Time required | 20 minutes |
| Last updated | April 2026 |
Why Connect Retool to Meetup?
Developer relations teams, community managers, and marketing teams running regular meetups often need to track event attendance, monitor RSVP conversion rates, and report on community growth — all data that Meetup's native analytics pages present but don't allow exporting or combining with other operational data. Connecting Meetup to Retool enables building custom dashboards that surface this data alongside speaker schedules, venue records, or CRM data from other tools.
Common use cases include a community health dashboard that tracks monthly event attendance trends, RSVP-to-attendance ratios, and member growth across multiple Meetup groups managed by the same organization. Event operations panels let community managers view upcoming events, see who has RSVP'd, and cross-reference against internal speaker databases or venue booking systems. Marketing teams combine Meetup attendance data with their CRM to identify which community members are most engaged and should be targeted for product announcements or beta programs.
Meetup's GraphQL API provides access to group information, event listings, RSVP data, and member profiles. Note that Meetup migrated from a REST API to a GraphQL API — all modern integrations use the GraphQL endpoint. The API requires OAuth 2.0 authentication, and access to certain data (particularly member contact details) may require the group organizer account's authorization.
Integration method
Retool connects to Meetup through a REST API Resource targeting Meetup's GraphQL API endpoint. Authentication uses an OAuth 2.0 bearer token obtained through Meetup's OAuth flow. All requests are proxied server-side through Retool's backend, keeping access tokens off the browser. Queries are sent as POST requests with GraphQL query strings in the request body, and JavaScript transformers reshape the nested GraphQL response format into flat arrays suitable for Retool's Table and Chart components.
Prerequisites
- A Retool account (Cloud or self-hosted) with permission to create Resources
- A Meetup account that is an organizer or co-organizer of at least one Meetup group (required to access full event and RSVP data via the API)
- A Meetup OAuth application created at secure.meetup.com/meetup_api/oauth_consumers/ — you will need the OAuth Consumer Key (Client ID) and Secret
- An OAuth 2.0 access token for the Meetup account — you can generate this using Meetup's authorization code flow or use the Meetup OAuth Playground at secure.meetup.com/meetup_api/console
- Basic familiarity with GraphQL query syntax — Meetup's API uses GraphQL rather than REST endpoints, so queries are sent as POST requests with query strings in the request body
Step-by-step guide
Create a Meetup OAuth app and obtain an access token
To access Meetup's API, you need an OAuth application and an access token linked to a Meetup organizer account. Go to secure.meetup.com/meetup_api/oauth_consumers/ and click Create New Consumer. Fill in the application name (e.g., 'Retool Integration'), redirect URI (you can use https://retool.com as a placeholder if not building a user-facing OAuth flow), and application website. Click Save. You will receive an OAuth Consumer Key (this is your Client ID) and a Consumer Secret. Copy both — these are needed to generate access tokens. For the simplest Retool setup with a single organizer account, use the Meetup API Console at secure.meetup.com/meetup_api/console to generate an access token interactively. Log in, authorize the application, and Meetup will show you an access token. Access tokens for Meetup are long-lived but can be revoked, so treat them as sensitive credentials. For production integrations where you need ongoing token refresh without manual intervention, implement Meetup's full OAuth 2.0 authorization code flow: redirect users to Meetup's authorization URL, exchange the returned code for an access token and refresh token, then store the refresh token to generate new access tokens automatically. Retool's Custom Auth feature can automate this token refresh flow. Note your Meetup group's URL slug (the part after meetup.com/ in your group URL, e.g., 'london-javascript' from meetup.com/london-javascript/) — you will use this as a query variable in your GraphQL queries to scope data to your specific group.
Pro tip: Meetup's access tokens from the API Console are useful for testing but may expire. For ongoing Retool dashboards, implement the full OAuth 2.0 authorization code flow with a refresh token, and store the access token in a Retool Configuration Variable that your Workflow refreshes automatically before expiry.
Expected result: You have a Meetup OAuth Consumer Key, Consumer Secret, and an active access token linked to your organizer account. You have noted your Meetup group's URL slug for use in GraphQL queries.
Create the Meetup REST API Resource in Retool
Navigate to the Resources tab in Retool and click Add Resource. Select REST API from the resource type list. Configure the resource: - Name: 'Meetup GraphQL' - Base URL: https://api.meetup.com For authentication, select Bearer Token from the Auth dropdown and enter your Meetup OAuth access token. Add a default header that applies to all requests: - Key: Content-Type - Value: application/json Click Save Changes. To verify the resource works, create a test query. Because Meetup uses GraphQL, queries are always POST requests to the /gql endpoint with a JSON body containing the 'query' field. In the query editor: - Method: POST - Path: /gql - Body type: JSON - Body: { "query": "{ self { id name } }" } Click Run. If configured correctly, the response returns your Meetup account's ID and display name, confirming the bearer token and endpoint are working. If you receive a 401 error, the access token has expired — return to Meetup's API Console to generate a new one.
Pro tip: Store the Meetup group URL slug (e.g., 'your-group-name') as a Retool Configuration Variable or as a constant in a JavaScript query at the top of your app. This makes it easy to reuse across all your Meetup GraphQL queries without hardcoding the group name in each query body.
Expected result: The Meetup GraphQL REST API Resource appears in the Resources list. A test POST to /gql with the self query returns your Meetup account information, confirming authentication is working.
Query upcoming group events and display in a table
Meetup's GraphQL API uses a group query type to retrieve events for a specific Meetup group. The groupByUrlname query accepts the group's URL slug and returns event details including name, date, venue, RSVP count, and description. Create a new query using the Meetup GraphQL resource: - Method: POST - Path: /gql - Body type: Raw JSON - Body: set the body to a JSON object with a 'query' key containing your GraphQL query string The GraphQL query to fetch upcoming events looks like this (adapt the field selections based on what your dashboard needs): The response comes back as a nested GraphQL structure: data.groupByUrlname.upcomingEvents.edges, where each edge has a node containing the event fields. Write a transformer that extracts the nodes array and formats the date fields for display. Drag a Table component onto the Retool canvas and set its data source to the transformer output. Add columns for: Event Name, Date (formatted), Venue Name, RSVP Count, Max Capacity (if available), and a computed fill rate percentage. Sort the table by date ascending so the next event appears at the top.
1// GraphQL query body for upcoming events2// Use this as the raw JSON body in the Retool query editor3{4 "query": "{ groupByUrlname(urlname: \"your-group-slug\") { id name upcomingEvents(input: { first: 20 }) { edges { node { id title dateTime venue { name address city } going rsvpSettings { rsvpLimit } description } } } } }"5}67// ---8// JavaScript transformer to flatten the GraphQL response9const edges = data?.data?.groupByUrlname?.upcomingEvents?.edges || [];1011return edges.map(({ node: event }) => {12 const eventDate = event.dateTime ? new Date(event.dateTime) : null;13 const rsvpLimit = event.rsvpSettings?.rsvpLimit || null;14 const goingCount = event.going || 0;1516 return {17 id: event.id,18 title: event.title || 'Untitled Event',19 date: eventDate ? eventDate.toLocaleDateString('en-US', {20 weekday: 'short', year: 'numeric', month: 'short', day: 'numeric'21 }) : 'Date TBD',22 time: eventDate ? eventDate.toLocaleTimeString('en-US', {23 hour: '2-digit', minute: '2-digit'24 }) : '',25 venue: event.venue?.name || 'Online / TBD',26 city: event.venue?.city || '',27 rsvp_count: goingCount,28 capacity: rsvpLimit || 'Unlimited',29 fill_rate: rsvpLimit ? ((goingCount / rsvpLimit) * 100).toFixed(0) + '%' : 'N/A'30 };31});Pro tip: Replace 'your-group-slug' in the GraphQL query with your actual Meetup group's URL name. If you manage multiple Meetup groups, add a dropdown selector component and use {{ groupSelect.value }} in the query body: '\"' + groupSelect.value + '\"' — this lets you switch between groups without editing the query.
Expected result: A Table component shows upcoming Meetup events with formatted dates, venue names, RSVP counts, and fill rates. Events are sorted chronologically. The next upcoming event appears at the top of the table.
Query the RSVP list for a selected event
Once your events table is working, add a detail panel that shows who has RSVP'd to a specific event when a row is selected. The Meetup GraphQL API provides an event query type that returns the list of attendees. Create a second query using the Meetup GraphQL resource, configured to run only when an event is selected from the events table: - Method: POST - Path: /gql - Body: JSON object with a query targeting a specific event's RSVPs by event ID - Set the query to 'Only run when': {{ eventsTable.selectedRow !== null }} The GraphQL query for event RSVPs retrieves the list of members who have RSVP'd with their names and RSVP status. Note that detailed member profile information (email, profile URL) requires the querying account to be an organizer of the group. Write a transformer for the RSVP response that extracts the attendee list and creates a flat array with member name, RSVP status (yes/waitlist), and join date. Display this in a second Table component below the events table, or in a side panel. Use the event table's selectedRow to pass the selected event's ID into the RSVP query's GraphQL variables: {{ eventsTable.selectedRow.id }}. Add a Stat component showing the total RSVP count and waitlist size for the selected event, which gives a quick snapshot of event demand before reviewing the full list.
1// GraphQL query body for event RSVPs2// Reference the selected event ID from the events table3{4 "query": "query EventAttendees($eventId: ID!) { event(id: $eventId) { id title going rsvps(input: { first: 100, status: YES }) { edges { node { member { id name } status } } } } }",5 "variables": { "eventId": "{{ eventsTable.selectedRow.id }}" }6}78// ---9// JavaScript transformer for RSVP response10const rsvpEdges = data?.data?.event?.rsvps?.edges || [];1112return rsvpEdges.map(({ node: rsvp }) => ({13 name: rsvp.member?.name || 'Unknown Member',14 member_id: rsvp.member?.id || '',15 status: rsvp.status || 'YES'16}));Pro tip: Meetup's API limits RSVP list queries to 100 attendees per request using the 'first' pagination parameter. If your events regularly exceed 100 RSVPs, implement cursor-based pagination using the pageInfo.endCursor field in the GraphQL response and add a 'Load More' button in Retool that fetches the next page.
Expected result: Clicking an event row in the events table triggers the RSVP query and populates a second table with attendee names and RSVP statuses. A stat card shows the total RSVP count for the selected event. The RSVP table is searchable by name.
Build a past events attendance analytics chart
Add a historical view to your community dashboard by querying Meetup's past events and calculating attendance metrics. Use the groupByUrlname query with the pastEvents field to retrieve completed events with their RSVP and attendance counts. Create a third query using the Meetup GraphQL resource: - Method: POST - Path: /gql - Body: GraphQL query for past events, requesting event title, date, RSVP count, and attendance count (if available — Meetup provides 'going' count which reflects RSVPs, not check-in attendance) Write a transformer that converts the past events response into a chart-ready array with date and count fields. Bind this to a Retool Chart component configured as a Line chart or Bar chart, with the date on the X-axis and RSVP count on the Y-axis. This shows the trend of community interest in your events over time. Add a Stats row above the chart showing: total events in the last 12 months, average RSVPs per event, and the highest-attended event name and count. These headline numbers are useful for quarterly community reports and stakeholder presentations.
1// GraphQL query body for past events2{3 "query": "{ groupByUrlname(urlname: \"your-group-slug\") { pastEvents(input: { first: 24 }) { edges { node { id title dateTime going } } } } }"4}56// ---7// JavaScript transformer for past events chart data8const edges = data?.data?.groupByUrlname?.pastEvents?.edges || [];910const chartData = edges11 .map(({ node: event }) => ({12 date: event.dateTime13 ? new Date(event.dateTime).toLocaleDateString('en-US', { month: 'short', year: 'numeric' })14 : 'Unknown',15 rsvp_count: event.going || 0,16 event_title: event.title || 'Untitled'17 }))18 .reverse(); // reverse so oldest appears first on chart1920return chartData;Pro tip: Meetup's 'going' field represents the number of members who RSVP'd 'yes', not actual check-in attendance. If you track actual attendance separately (in a spreadsheet or database), combine that data in a Retool JavaScript transformer to compute the RSVP-to-attendance conversion rate for each event.
Expected result: A line or bar chart displays RSVP counts for the last 24 past events, ordered chronologically. The chart shows community growth trends. Stat cards above the chart summarize total events, average RSVPs, and the best-attended event.
Common use cases
Build a community events calendar and RSVP tracker
Create a Retool dashboard that queries the Meetup GraphQL API for all upcoming events across your organization's Meetup groups, displaying them in a sorted Table with event name, date, venue, RSVP count, and waitlist count. DevRel managers use this as their operational view for upcoming events, tracking RSVP momentum and identifying events that may need promotion to fill seats.
Build a community events dashboard that queries Meetup's GraphQL API for all upcoming events in a specified group. Display events in a Table sorted by date, with columns for event name, date and time, venue, current RSVP count, max capacity, waitlist count, and a computed fill rate percentage. Add a refresh button and highlight rows where the event is more than 2 weeks out but less than 50% full.
Copy this prompt to try it in Retool
Create an attendance analytics panel for community reporting
Build a Retool app that pulls past event data from Meetup and calculates attendance metrics over a rolling time window. Charts show RSVP count vs actual attendance per event, attendance trends over 6 months, and average attendance by day of week or event type. Marketing and DevRel managers use this panel for quarterly community reports and to inform decisions about event frequency and format.
Create an attendance analytics panel that queries Meetup's GraphQL API for past events with their RSVP counts. Display a bar chart showing RSVPs vs attendance per event over the last 12 events. Add a Stat component showing average attendance rate (attended/RSVP'd). Include a Table of all past events with their attendance data sorted by date descending.
Copy this prompt to try it in Retool
Build an RSVP list panel for event check-in preparation
Build an event day operations panel that pulls the RSVP list for a selected upcoming event and displays attendee names and RSVP status. Community managers use this panel to prepare check-in lists, identify VIP attendees (speakers, sponsors, notable community members) based on cross-referencing with an internal contacts table, and track attendance as the event progresses.
Create an event check-in panel with a dropdown to select an upcoming event from the Meetup group. When an event is selected, query the Meetup GraphQL API for the full RSVP list with member names and RSVP status. Display the list in a searchable Table. Add a cross-reference query that checks each RSVP name against an internal VIP contacts table, highlighting VIP rows in the table.
Copy this prompt to try it in Retool
Troubleshooting
All Meetup API requests return 401 Unauthorized despite providing the access token
Cause: The OAuth access token has expired or was revoked. Meetup access tokens can expire depending on how they were generated — tokens from the API Console may have a limited lifespan.
Solution: Generate a new access token via the Meetup API Console at secure.meetup.com/meetup_api/console and update the bearer token in the Retool resource configuration. For long-lived integrations, implement the full OAuth 2.0 authorization code flow with a refresh token, and use Retool's Custom Auth feature to automatically refresh the token before it expires.
GraphQL query returns null for groupByUrlname even though the group exists
Cause: The group URL slug in the query does not match exactly — it is case-sensitive and must match the slug as it appears in the group's Meetup URL. Alternatively, the querying account may not have organizer access required to view certain group data.
Solution: Check the exact URL slug from your group's Meetup URL (the part after meetup.com/ in the group URL). Verify the slug is lowercase and contains hyphens instead of spaces. Confirm the OAuth account used for authentication is a member or organizer of the group — non-members may receive null results for private groups.
GraphQL query body fails with 'Unexpected token' or 'JSON parse error' in Retool
Cause: The GraphQL query string contains unescaped double quotes or newlines in the JSON body, making the body invalid JSON. This is a common issue when writing multi-line GraphQL queries inline in a JSON body.
Solution: Use Retool's JSON body editor and ensure the 'query' field value is a single-line string with all internal double quotes escaped as backslash-quote (\".). Alternatively, use Retool's body template mode and reference the query string from a JavaScript variable, which avoids manual JSON escaping. Test the query string in a GraphQL playground first before putting it into Retool.
1// Use this pattern in Retool's Raw JSON body to avoid escaping issues:2// Build the query as a JS template literal and stringify it3const gqlQuery = `{4 groupByUrlname(urlname: "your-group-slug") {5 upcomingEvents(input: { first: 20 }) {6 edges { node { id title dateTime going } }7 }8 }9}`;10return JSON.stringify({ query: gqlQuery });RSVP list query only returns the first 100 members even though the event has more RSVPs
Cause: Meetup's GraphQL API uses cursor-based pagination — the 'first: 100' parameter caps results at 100 per request. Events with more than 100 RSVPs require additional paginated requests to retrieve the full list.
Solution: Add pageInfo fields to your GraphQL query: request 'pageInfo { hasNextPage endCursor }' alongside the edges data. If hasNextPage is true, run additional queries using 'after: endCursor' to retrieve subsequent pages. In Retool, implement a 'Load More' button that triggers the next-page query and merges results into the existing list using a Retool state variable that accumulates pages.
Best practices
- Store the Meetup OAuth access token in a Retool Configuration Variable marked as secret, not directly in the resource's Bearer Token field — this enables rotation without editing the resource configuration.
- If managing multiple Meetup groups, parameterize the group URL slug in all GraphQL queries using a dropdown selector component, so a single dashboard covers all groups without duplicating queries.
- Set GraphQL queries to 'Only run when' required parameters are set — for RSVP queries, add the condition {{ eventsTable.selectedRow !== null }} to prevent unnecessary API calls when no event is selected.
- Cache Meetup data aggressively using Retool's query caching feature (10-30 minutes is appropriate for event data that changes infrequently) to avoid hitting Meetup's API rate limits during dashboard sessions.
- Always include null checks and fallback values in Meetup GraphQL transformers — optional fields like venue, rsvpSettings, and member profile data may be null depending on event configuration and member privacy settings.
- Use Retool Workflows with a daily schedule to fetch Meetup data and store it in a Retool Database or connected PostgreSQL table — this enables historical trend analysis beyond what Meetup's API pagination limits allow.
- Test GraphQL queries in Meetup's API Explorer or a GraphQL playground before implementing them in Retool, to validate the query syntax and inspect the actual response structure for your group.
Alternatives
Choose Eventbrite if your events involve ticket sales, paid admission, or in-person check-in scanning, as Eventbrite's API provides order management, payment data, and a dedicated check-in API that Meetup lacks.
Choose Calendly if you need to manage one-on-one or small-group scheduling rather than community events, as Calendly's API covers invitee booking, event type management, and scheduling link analytics.
Choose GoToWebinar if your community events are primarily online webinars requiring registration, recording, and attendance tracking with more detailed analytics than Meetup's virtual event capabilities.
Frequently asked questions
Does Meetup's API use REST or GraphQL, and how does that affect how I configure queries in Retool?
Meetup migrated to a GraphQL API and deprecated their REST API for most use cases. In Retool, this means all Meetup queries are POST requests to the /gql endpoint with a JSON body containing a 'query' string — not GET requests to different URL paths. Set the Retool query method to POST, the path to /gql, and use the Raw JSON body type to pass your GraphQL query. This is handled through a single Retool REST API Resource with one endpoint path.
Can Retool create new Meetup events or update RSVPs through the API?
Meetup's GraphQL API includes mutation operations for creating and updating events, which require organizer-level OAuth access. You can add Retool form components that collect event details and trigger a POST to /gql with a mutation query body. However, mutations require the OAuth token to have the appropriate scopes (event_management). Review Meetup's API documentation for the required mutation structure before building write-capable features in Retool.
Why can't I see member email addresses in the RSVP list from Meetup's API?
Meetup's API respects member privacy settings. Email addresses are not returned in standard RSVP list queries — only the member's display name and Meetup profile ID are available. If you need to contact attendees, Meetup provides an in-platform messaging feature, or you can ask members to provide contact details through a separate form at event registration. This is intentional privacy protection by Meetup and cannot be circumvented through the API.
How do I handle multiple Meetup groups in the same Retool dashboard?
Use a dropdown or select component that lists your Meetup group URL slugs. Reference the selected value ({{ groupSelect.value }}) in the GraphQL query body's urlname field. Set all event queries to trigger when the dropdown value changes. If you manage many groups, store the group list in a Retool Database or a JavaScript state variable at the top of the app, populated from a configuration query rather than hardcoded in the component.
Are there rate limits on Meetup's API that I should plan for in a Retool dashboard?
Meetup enforces rate limits on their API, though the specific limits are not publicly documented. In practice, dashboards used by small teams with reasonable query patterns (not querying every few seconds) stay well within limits. Enable Retool's query caching with a 5-15 minute cache window for event data, and avoid auto-refreshing queries more frequently than once per minute. If your Retool app is used by many concurrent users, consider using a Retool Workflow to periodically fetch and cache data rather than having each user session hit the Meetup API independently.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation