GroupsIO Group Manager
A WordPress plugin built for BITS, a blindness-focused nonprofit and professional affiliate of the American Council of the Blind. It keeps BITS’s Groups.io mailing lists in sync with actual paid membership, automatically, so no one has to manage list access by hand.
The problem
BITS runs its member communication over Groups.io mailing lists and manages paid membership through Paid Memberships Pro (PMPro) on WordPress. Before this plugin existed, keeping the two in sync was a manual job — someone had to notice when a membership lapsed or a new member joined, and update Groups.io by hand. Miss it, and either a lapsed member keeps member-only access, or a new member goes unreached.
What it does
- When a membership begins or changes, the plugin reads the mailing list selections already captured on the member’s PMPro profile and adds them to the corresponding BITS Groups.io lists — both the lists every member must belong to, and any tied to their specific membership level.
- When a membership ends — expiration, cancellation, or account deletion — the plugin automatically removes the member from every BITS Groups.io list they were part of.
- A nightly reconciliation job checks for drift between what PMPro says a member’s access should be and what Groups.io actually reflects, and corrects any mismatch.
- A passwordless “magic link” feature lets a member reach their WordPress profile by email, without needing to recall a password.
How it’s built
Membership-change events are picked up via PMPro’s
pmpro_after_all_membership_level_changes hook and handed
off to a background job queue (Action Scheduler), so a member checking
out or an admin making a change is never blocked waiting on a
Groups.io API round trip. Every add and remove call is logged to a
dedicated audit table, with its own retention policy. The Groups.io
API client handles rate limiting (HTTP 429, honoring
Retry-After with jitter) and retries transient failures
with exponential backoff, and hard-stops all sync activity with an
admin alert if the API credential itself becomes invalid.
Because a single member can be registered under different email addresses for different mailing lists, sync and removal logic operates on (list, email) pairs rather than assuming one address covers a member’s entire subscription. The plugin also honors Groups.io’s own unsubscribe, bounce, and spam signals — once flagged, a member is permanently excluded from future automatic adds, in keeping with CAN-SPAM — and handles GDPR/CCPA right-to-be-forgotten erasure with an immediate, no-grace-period removal from every list.
Admin controls
Administrators work through a “GroupsIO Management” admin menu with three pages: feature controls (mandatory lists, grace period before removal, log retention, and an emergency kill switch), subgroup management (creating, editing, and inspecting the Groups.io subgroups themselves), and user assignment (a searchable member list with per-member details and manual override tools for when automation needs a human to step in).