Export event data is a bit painful, and email addresses would be useful

Using the đź—“ Discourse Event functionality, I find it quite cumbersome to download and use the image.

Currently it uses a similar mechanism to the User Export, giving you:

  1. a zip file via a PM to those with edit privileges on that post
  2. gives you these fields:
    username status first_answered_at last_updated_at

Suggestion 1

That a direct .csv download be provided from the modal

This would be much simpler from the user perspective

Suggestion 2

That primary emails be reported in this download (or there be an option for this)

This would allow easy export of participants when needed for other purposes related to the event.

I’ve got a Data Explorer query for this at the mo which works well enough, but requires a lot of fiddle to give event organisers (i.e. the OP) access to it:

-- [params]
-- int :post_id

WITH e AS (
  SELECT email, user_id
  FROM user_emails u
  WHERE u.primary = true
)

SELECT dpei.user_id, email, status, notified
FROM discourse_post_event_invitees dpei
JOIN e ON e.user_id = dpei.user_id
WHERE dpei.post_id = :post_id
ORDER BY status, email
2 Likes

Just caught out by this again today, when one of our admins asked how to see when people had clicked “Going”.

The UX issue we had was that clicking on Export event doesn’t appear to actually do anything (i.e. there is no feedback). It was only when I noticed that I had a few messages later (as I clicked several times while looking for errors in the console) that I realised it had actually worked.

Zipping the file just seems to add a lot of friction for zero value. Any CSV is likely to be quite small.

It would be nice to tidy this up a little bit, as it is quite useful functionality (once you work out how it works).

1 Like

+1 — we strongly support this.

We use Discourse’s [event] syntax (via the Calendar plugin) to schedule and coordinate official council meetings — each event lives inside a dedicated topic, and we encourage members to RSVP using the built-in interface.

The problem is: we currently have no clean way to extract that RSVP data in a usable format. For public engagement sessions, executive meetings, and internal briefings, it would be incredibly useful to export:

  • Event topic title + URL
  • Display name / username of RSVPs
  • RSVP status (going / interested / not going)
  • Email address (admin-only, for attendance logs or direct follow-up)
  • Timestamp of RSVP (if possible)

Our clerks and chairs often don’t use Discourse themselves, so being able to download a CSV and share attendance with them is essential.

Understandably, email visibility would need to be permission-limited to site staff or group moderators — but without it, the export loses most of its administrative value.

This kind of structured export would significantly improve the plugin’s usefulness for real-world orgs that use Discourse to coordinate offline meetings.

Happy to provide a sample .csv layout if helpful!

This data explorer query will go a long way towards giving you what you need:

-- [params]
-- int :topic_id

WITH user_emails AS (
  SELECT 
    ue.user_id,
    ue.email
  FROM 
    user_emails ue
  WHERE 
    ue.primary = true
),
forum_timezone AS (
  SELECT 
    value AS timezone
  FROM 
    site_settings
  WHERE 
    name = 'discourse_local_dates_email_timezone'
)

SELECT 
  u.name AS display_name,
  u.username,
  ue.email,
  CASE dpei.status
    WHEN 0 THEN 'Going'
    WHEN 1 THEN 'Interested'
    WHEN 2 THEN 'Not Going'
  END AS status,
  to_char(dpei.created_at AT TIME ZONE 'UTC' AT TIME ZONE ft.timezone, 'YYYY-MM-DD HH24:MI:SS') AS rsvp_timestamp
FROM 
  discourse_post_event_invitees dpei
JOIN 
  posts p ON p.id = dpei.post_id
JOIN 
  users u ON u.id = dpei.user_id
JOIN 
  user_emails ue ON ue.user_id = dpei.user_id
JOIN 
  forum_timezone ft ON true
WHERE 
  p.topic_id = :topic_id
ORDER BY 
  dpei.status, ue.email

If you make a group for your admins staff, and make this query accessible to them it will likely do the job nicely. You’ll probably want to set the Discourse Local Dates Email Timezone setting (or hack the query to ignore it).

You’ll need to teach them to use the Topic ID, and what that means in terms of URL. But that is probably doable.