Bulk Subscriber Enrollment
Bulk enrollment lets you import a list of email addresses and immediately grant them access — either as active subscribers on a tier, or as followers — no payment required. It is designed for onboarding a founding cohort, fulfilling a Kickstarter backer reward, migrating subscribers from a platform whose export you can’t run through the standard Migration Wizard, or seeding a follower list.
Enrolling subscribers requires Built-in Membership to be active on your show. Enrolling followers works under any membership plugin, or none.
Opening the Screen
From the Subscribers screen, click Bulk enroll (the person-with-plus icon in the screen header). This opens the Bulk Enrollment screen at /subscribers/bulk-enroll.
Preparing Your List
The input accepts one email address per line or a comma-separated list. Blank lines and duplicates are ignored. The maximum per job is 1,000 addresses. For larger lists, split them across multiple jobs — Benecaster processes one job at a time per show and will queue a second job if one is already running.
Enrollment Settings
| Field | Description |
|---|---|
| Add as | Subscribers on a tier (default) or Followers — see below |
| Tier | The membership tier to assign. Only shown for Subscribers on a tier; only active native tiers are listed |
| Email list | Paste or type addresses, one per line or comma-separated |
Subscribers on a tier, or Followers
Add as: Subscribers on a tier creates an active, paid-tier subscription for each address — this is the original behavior of this screen. It requires Built-in Membership to be active on your show. On a show whose membership plugin is anything else (MemberPress, WooCommerce Subscriptions, Paid Memberships Pro, Restrict Content Pro) — or has no membership connected at all — this option is greyed out, Followers is pre-selected instead, and an amber note explains why: that the show’s subscribers are managed by the connected plugin and should be added there, or (with no plugin connected) that this show has no membership connected. A subscriber batch on such a show is refused by the same rule; the built-in-membership requirement is enforced, not just stated.
Add as: Followers works on any show, regardless of membership plugin. It assigns no tier and creates no subscription — each address gets a follower feed carrying only public episodes, plus the welcome email (sent even if this show’s welcome email is turned off — for a bulk-added follower, it is the only way they receive their feed URL). A newly created account also gets a set-password link. On an unlicensed show, the 100-follower cap applies; addresses past the cap are listed as Skipped, “Follower limit reached — [tell them how to reach you, or try again once you’ve licensed the plugin].” If double opt-in for followers is on, those addresses get a confirmation email first instead of an immediate follower token.
Either way, anyone already on the show is left untouched and not emailed — the results summary reports them as Already on this show rather than Added, whether they currently hold a paying subscription, a follower token, or (for a subscriber batch) a subscription on a different tier.
Running the Job
Click Enroll (labeled Add N subscribers or Add N followers, matching your Add as choice) to submit. Benecaster runs the job asynchronously in the background via WP-Cron. The screen shows a live progress indicator — addresses processed, successful enrollments, and any addresses that were skipped, each with a plain-language reason. On low-traffic sites, WP-Cron relies on incoming requests to trigger — if the job doesn’t start promptly, see Cron isn’t firing on time →.
For each address, Benecaster finds or creates a WordPress user account, then grants the chosen access. No action is required from the recipient — they get a welcome email with their feed URL.
Skipped addresses — an address is skipped if:
- It is already on the show — an active subscriber on the selected tier, a subscriber on a different tier (for a subscriber batch), or an existing follower (for a follower batch)
- The email address is invalid
- (Followers only, on an unlicensed show) The 100-follower cap has been reached
If the show is switched off Built-in Membership while a subscriber batch is waiting to run — after you click Enroll but before the background job starts — the job finishes at once instead of running. Every address appears under Rows needing attention reading Not enrolled — this show no longer uses the built-in membership. Nobody is enrolled and nobody is emailed. (Before this fix, a job caught in that window could be left showing as in progress indefinitely.)
After Enrollment
Enrolled subscribers receive a welcome email, same as an organic sign-up. The benecaster_subscription_activated action fires for each successful enrollment with $source = 'admin_enrolled', so you can distinguish bulk-enrolled subscribers in automation or reporting code.
Two emails per new subscriber, not one
Enrollees whose account is created by the job also receive a “set your password” email, on top of the welcome email. A 400-address import therefore sends 800 messages. Plan the send accordingly — and if your list is large, be aware of what your mail provider will make of it.
The reason is that these users were never asked for a password: you created their account for them, so it has one they have never seen. Their feed works — the token in the feed URL is the credential — but without the set-password email they cannot log in to the account page to find that URL, reset a token, or manage anything. People who sign themselves up choose a password on the form and get no such email.
Only newly created accounts get it. Enrolling an address that already has a WordPress account on your site sends the welcome email but no password email — that person already has a login, and mailing them a reset link would be confusing at best.
To suppress it, a developer can return false from the benecaster_subscribe_send_password_email filter. It receives a $source argument that is bulk_enroll for this job, so you can switch it off for imports and leave it on for subscribers added by hand or through a donation. See Suppress the Set-Password Email for a Role or a Provisioning Flow.
If you suppress it, give those subscribers another way in. Otherwise they have a working feed and no account access, and the problem surfaces weeks later as a support request that looks nothing like an enrollment issue.
Suppressing the welcome email
If you want to suppress the welcome email for bulk enrollments, add a short snippet filtering benecaster_email_should_send and returning false when the activation source is admin_enrolled. See Suppressing Emails for Specific Activations for a working example.
The benecaster_bulk_enrollment_complete action fires once when the entire job finishes, with a summary of the outcome. See the developer reference for the argument list.
For Developers
REST API endpoints for programmatic bulk enrollment are documented at Bulk Enroll REST API.
Relevant hooks:
benecaster_subscriber_account_provisioned— fires once per newly created account with$source = 'bulk_enroll', before the feed token exists. This is what core sends the set-password email onbenecaster_subscribe_send_password_email— gates that email; returnfalsefor$source === 'bulk_enroll'to switch it off for imports only
Relevant classes:
BulkEnrollmentProcessor— synchronous Benecaster; can be called directly without WP-CronBulkEnrollmentJobRunner— async orchestrator; enforces the one-active-job-per-show constraint
See Also
Need this built rather than just documented? See our services →