Home » Docs » Reporting Abilities

Reporting Abilities

These abilities surface the same membership metrics shown on the Members Only admin dashboard, plus a flexible member search. They are all read-only and require the manage_options capability (site administrator). See the Abilities API Overview for the full catalog.

get-membership-stats

members-only/get-membership-stats returns site-wide membership statistics. It takes no parameters.

Returns (among others):

  • active_members and total_members, with active_member_share
  • paid_members_total, paid_members_active, and paid_member_share
  • access_pass_only_active_members
  • groups and groups_with_members
  • billing_issues — members with payment problems
  • new_members_last_30_days and new_members_previous_30_days — note that despite the field names, these count all new WordPress user accounts registered in each window, not only users who acquired a membership (a membership start date is not tracked)

get-recent-activity

members-only/get-recent-activity returns a short feed of recent site activity: new WordPress user account registrations (which may include non-member accounts) and group events. It takes no parameters.

Returns: a count and an activity array; each entry has a title, description, timestamp, and url.

get-signup-counts

members-only/get-signup-counts returns new user account signup counts for trend comparison. It counts every account registered on the site — including accounts with no membership relationship — because a membership start date is not tracked. Do not report these numbers as member signups. It takes no parameters.

Returns: last_30_days and previous_30_days.

find-members

members-only/find-members searches your site’s members — users with a membership relationship: a Stripe customer record, an access pass, or a group membership. This is the same population the Members admin screen lists. Results are paginated and ordered by registration date (newest first), and all filters combine. To look up a user who is not yet a member (for example, before granting an access pass or adding them to a group), set include_non_members to true to search every WordPress user account instead.

ParameterTypeRequiredDescription
searchstringNoMatches against username, email, or display name
group_idintegerNoRestrict to members of this group (requires the Group Memberships extension)
registered_afterstringNoOnly users registered on or after this date, e.g. 2026-01-01
registered_beforestringNoOnly users registered on or before this date, e.g. 2026-06-30
has_access_passbooleanNoOnly users that have an access pass record
include_non_membersbooleanNoSearch every WordPress user account instead of only users with a membership relationship. Defaults to false.
limitintegerNoMaximum members to return, 1–100. Defaults to 20.
offsetintegerNoNumber of members to skip, for pagination. Defaults to 0.

Returns: count, total, limit, offset, and a members array. Each member includes their user_id, email, display_name, registered date, and two flags: is_member (true, false, or null when unknown) and has_access_pass.

A few notes:

  • Active-membership status for the returned page is resolved with a single batched Stripe lookup rather than one call per member, so large result sets stay fast
  • If Stripe is unreachable, the response includes stripe_unavailable: true and is_member is null for users whose status cannot be determined from local data — paying subscribers are never reported as non-members
  • Administrators count as members for access checks, but they only appear in results when they hold a membership signal or include_non_members is true
  • Using group_id on a site without the Group Memberships extension returns members_only_group_filter_unavailable instead of silently ignoring the filter