Power BI 12 Days of Dashboards – Day 6 – Meetup.com Dashboard

Power BI Dashboard Meetup

Day #6 - Meetup.com Dashboard

As part of my Power BI 12 Days of Dashboards series, the 6th day of dashboards introduces a Meetup.com dashboard that you can use as a Meetup Group owner to display the number and location of members, next meetup date, and more.

Today's dashboard is brought to you by Dominik Petri (fb li tw xing), founder of Petri Software and leader of the Frankfurt Power BI User Group. Dominik leverages Meetup to organize and coordinate the 100+ participants in the Frankfurt Power BI User Group and has created a nice dashboard for the group.

Here is a English translated screenshot of the dashboard, followed by the live/interactive dashboard in German below. The template is available in English in the link to the TechNet Gallery hosting site.




In Dominik's own words:

Meetup.com is a platform for scheduling in-person events. As leader of the Power BI User Group Frankfurt (Germany) I use Meetup to announce upcoming meetings and assist with the member registration. The Meetup website provides some useful information to organizers that can be accessed using the Meetup API. For each service, the necessary input parameters and the output results are well documented.

To use Meetup’s API you need a API key which you can get here:


In addition to the API key you need the Meetup group’s name as used in the URL:


In the dashboard for my Power BI User Group I connect to two different services:
One gives me details about my group’s members (names, where they come from etc.).
The second returns previous and upcoming meetings.

Both services return the results in JSON format that can easily read and transformed by Power BI Desktop. I’ve added a few DAX Measures to enhance the data and get the necessary figures for the dashboard.

To use the dashboard for your Meetup group, download the Power BI Template from here and continue with the following steps:

  1. After downloading the Power BI Template, open it in Power BI Desktop
  2. A popup box appears asking for your API key and your Meetup group’s name as used in the URL
  3. Click the “Load” button in the bottom right.

The dashboard is completely maintenance-free: It automatically shows the next meeting’s details and once the meeting is over, the next meeting’s stats will be shown.

Feel free to use this template as a starting point to explore the various possibilities of the Meetup API and to create your own personal Meetup dashboard.
The template can be used for any meetup. It is NOT restricted to Power BI User Groups!

Thanks Dominik for the great contribution and for all of the work you do for the Power BI and Excel technical communities.
Sam Lester (MSFT)


Comments (4)
  1. Sophie Marchand says:

    Hi there,

    I tried your solution template.

    I had 2 problems with it. One that I was able to resolve and another one that I was not able to resolve.

    The first problem was with the transformation of a date that did not take into account the locale. As I said, I was able to resolve that one on my side.

    The second problem was that my meetup group has much more users than the one used to create the template. Members actually appear on several different pages. So, when I use your template, I only get the first members whos family names start with an A.

    I’m not used to work with json so I do not know what to do to correct that and get all my members.

    It would be really nice if you could modify your template or show us how to do so.


    1. Hi Sophie,

      the template uses the Meetup API to get the members so it should not matter that your members appear on multiple pages on the Meetup website.

      To retrieve the data in XML-Format, just add .xml to the URL (after members). You can even try it in your browser 🙂
      Just replace the group’s URL name and enter your API-Key at the end:

      I’ve just realized that there is a new version (v2) for the API Call. The one I used is depreciated. It still works for me but you might want to try the v2. Just add 2/ before members in the URL:

      You find the documentation for this API call here:

      The result is a bit different from v1 especially the “joined” field is now returned in milliseconds since the epoch so you have to adjust the steps in the Power BI Desktop Template. Let me know if you need some help…

      Best regards from Germany

      1. Sophie Marchand says:

        I think the reason it is working on your side is because you only have 130 contacts. We have more than 2500 in our group and the problem is real. Only the persons on the first page appears as members. I asked Cathy Monier, who wrote a book on Power Query, to help me with this and she wrote a recursive code that now gets the data on every page. We now have all our members. So we did have to modify the original code. Thanks

  2. I had an error message in the step which converts the joined-timestamp into a date.
    I solved it be merging the year back into the date, like here:

    Source = Json.Document(Web.Contents(“https://api.meetup.com/members?status=past” & “&group_urlname=” & GroupUrlName & “&key=” & MeetupApiKey)),
    results = Source[results],
    #”Convert to table” = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #”Expand records” = Table.ExpandRecordColumn(#”Convert to table”, “Column1”, {“zip”, “country”, “city”, “joined”, “topics”, “link”, “bio”, “lon”, “other_services”, “name”, “visited”, “state”, “photo_url”, “id”, “lang”, “lat”}, {“zip”, “country”, “city”, “joined”, “topics”, “link”, “bio”, “lon”, “other_services”, “name”, “visited”, “state”, “photo_url”, “id”, “lang”, “lat”}),
    #”Remove unused columns” = Table.SelectColumns(#”Expand records”,{“country”, “city”, “joined”, “lon”, “name”, “state”, “id”, “lat”}),
    #”Split date and time from joined” = Table.SplitColumn(#”Remove unused columns”,”joined”,Splitter.SplitTextByPositions({0, 11}, false),{“joined.1”, “joined.2″}),
    #”Split Column by Position” = Table.SplitColumn(#”Split date and time from joined”,”joined.2″,Splitter.SplitTextByPositions({0, 12}, false),{“joined.2.1”, “joined.2.2″}),
    #”Renamed Columns” = Table.RenameColumns(#”Split Column by Position”,{{“joined.2.1”, “joined.2″}}),
    #”Keep time component” = Table.TransformColumns(#”Renamed Columns”, {{“joined.2”, each Text.Start(Text.From(_, “de-DE”), 8), type text}}),
    #”Merged Columns” = Table.CombineColumns(#”Keep time component”,{“joined.1”, “joined.2.2″},Combiner.CombineTextByDelimiter(” “, QuoteStyle.None),”joined.1.1″),
    #”Renamed Columns1″ = Table.RenameColumns(#”Merged Columns”,{{“joined.1.1”, “joined.1″}}),
    #”Convert text to date” = Table.TransformColumnTypes(#”Renamed Columns1″, {{“joined.1”, type date}}, “en-US”),
    #”Convert text to time” = Table.TransformColumnTypes(#”Convert text to date”,{{“joined.2″, type time}}),
    #”Combine date and time” = Table.CombineColumns(#”Convert text to time”, {“joined.1”, “joined.2”}, (columns) => List.First(columns) & List.Last(columns), “joined”),
    #”Country code to uppercase” = Table.TransformColumns(#”Combine date and time”,{{“country”, Text.Upper}}),
    #”Convert lat and lon to numbers” = Table.TransformColumnTypes(#”Country code to uppercase”, {{“lat”, type number}, {“lon”, type number}}, “en-US”),
    #”Set data types for columns” = Table.TransformColumnTypes(#”Convert lat and lon to numbers”,{{“city”, type text}, {“joined”, type datetime}, {“name”, type text}, {“state”, type text}, {“id”, Int64.Type}})
    #”Set data types for columns”

Comments are closed.

Skip to main content