PushAI – Self-Hosted Web Push Notifications
PushAI – Self-Hosted Web Push Notifications

PushAI – Self-Hosted Web Push Notifications

5/5 (1 ratings) 100 active installs Updated Sep 21, 2026
Dashboard — subscriber counts, 7-day delivery & click stats, recent campaigns, and live Web Push service health at a glance.

Dashboard — subscriber counts, 7-day delivery & click stats, recent campaigns, and live Web Push service health at a glance.

🚀 Try the live demo — explore the PushAI admin panel without installing anything. | 💎 Upgrade to PushAI Pro — AI digests, WooCommerce automation, and more.

PushAI turns your WordPress site into a re-engagement channel. Visitors subscribe with one click, and you reach them directly in their browser — even when your site is closed — using the native Web Push standard. No third-party SDK, no per-subscriber pricing, no external delivery service: notifications go straight from your own server using your own VAPID credentials, generated automatically on activation.

Everything stays on your site. Subscribers live in your own database, delivery runs through a background queue so large sends never block your site, and every push link is tagged with UTM parameters automatically so traffic shows up correctly in Google Analytics and your other reporting tools. The free plugin covers the full lifecycle out of the box: subscribe button, a customizable opt-in popup, automatic notifications for posts and custom post types, a manual composer, per-user targeting, click tracking with 7-day dashboard stats, delivery history, and GDPR export/erasure. With the optional email fallback, registered users who haven’t subscribed to browser push still get the same notification as a clean HTML email — so no one is left out.

PushAI is device-aware: when a logged-in visitor subscribes, PushAI keeps one active subscription per device type — one mobile, one desktop — so the same person can opt in independently on each device and receive notifications on whichever ones they enabled. Stale and duplicate subscriptions are pruned automatically.

PushAI Pro adds the three things self-hosted push plugins almost never offer out of the box:

  • AI-summarized post digests, powered by OpenAI, Google Gemini, xAI Grok, DeepSeek, or any OpenRouter model — with a template fallback so digests always send, even without an API key.
  • Deep WooCommerce automation — order and stock alerts, order-status updates, abandoned-cart reminders, cross-sell follow-ups, and trending-product pushes.
  • A built-in Progressive Web App (PWA) — an installable manifest and service worker, so visitors can add your site to their home screen without a separate PWA plugin.

Actively developed. New automations, AI providers, and WooCommerce flows ship regularly, and every release is documented in the changelog below. Feature requests and feedback directly shape the roadmap.

Why choose PushAI?

  • You own your subscriber list. Subscriptions live in your WordPress database, never on a third-party platform.
  • Unlimited subscribers and notifications — on Free and Pro. No per-subscriber pricing, no monthly send caps.
  • No third-party SDK or delivery service. Native Web Push + your own VAPID keys, straight from your server.
  • Transparent, flat pricing. Free stays free forever; Pro is one flat price no matter how big your audience gets.
  • AI digests, built in (Pro). Summarize your latest posts and send them on a schedule, across multiple AI providers.
  • WooCommerce automation (Pro). Order, stock, status, abandoned-cart, cross-sell, and trending-product pushes.
  • Built-in PWA (Pro). Make your site installable — no separate PWA plugin required.

Free vs Pro

Both plans include unlimited subscribers, unlimited notifications, the self-hosted setup, and the developer API. Pro adds automation, AI digests, WooCommerce, the built-in PWA, and analytics on top — you only pay for the automation and AI layer, not for audience size.

Free — $0 forever

  • One-click subscribe button (shortcode)
  • Customizable opt-in popup (permission prompt)
  • Automatic new-post notifications
  • Custom post type automation
  • Click tracking & 7-day dashboard stats
  • Manual notification composer
  • Scheduled notifications (composer + developer API)
  • Per-user / specific-subscriber targeting
  • Separate mobile & desktop subscriptions
  • Guest subscriptions
  • Email fallback for users without a push subscription
  • Automatic VAPID key generation
  • Background delivery queue with retries
  • WP-CLI queue processing (wp pushai queue)
  • Automatic UTM link tagging
  • Delivery history & status
  • Privacy / GDPR export & erasure
  • Developer API (functions + action hooks)

Pro — $21/year — everything in Free, plus:

  • Scheduled AI digests (OpenAI, Gemini, Grok, DeepSeek, OpenRouter + template fallback)
  • WooCommerce order & stock alerts
  • WooCommerce order-status & customer notes
  • Abandoned-cart reminders
  • Cross-sell follow-ups
  • “Trending Today” (post & product daily-view alerts)
  • Built-in PWA (installable manifest + service worker)
  • Statistics & analytics (7/30/90-day, CTR, most-clicked links, per-category performance, audience segment CTR, A/B CTR, digest conversion)
  • Audience segments in the composer and developer API (role, device, category, tag)
  • Action buttons and A/B tests in the composer
  • Outbound webhooks and an inbound REST trigger for Zapier / Make
  • Abandoned-browse reminders (non-WooCommerce)
  • Site-management admin alerts (pending comments, posts awaiting review, published posts, new subscribers)
  • Comment notifications (authors & replies)

Upgrade to PushAI Pro

PushAI is developed and maintained by PushAI.

Shortcode

Place a subscribe button anywhere with:

[pushai_button]

Optional attributes:

  • label — default button text.
  • on — text shown after notifications are enabled.
  • blocked — text shown when the visitor has blocked notifications.
  • align — left, center, or right.
  • class — extra CSS classes.

Example:

[pushai_button label="Enable browser notifications" align="center"]

In PHP templates:

<?php echo do_shortcode( '[pushai_button]' ); ?>

The shortcode is also shown on the PushAI Settings screen with a copy button.

Show a logged-in visitor whether they currently have an active push subscription:

[pushai_notification_badge]

Guests see nothing. Logged-in users see “Notifications Enabled” plus the number of active devices, or “No Active Subscriptions”. Use it on account pages or membership dashboards.

Developer API

Queue a notification from a theme or plugin:

pushai_trigger_notification( array(
    'title' => 'Title',
    'body'  => 'Message',
    'url'   => home_url( '/' ),
    'image' => '',
) );

The same notification can be triggered with a WordPress action:

do_action( 'pushai_send_notification', array(
    'title' => 'Title',
    'body'  => 'Message',
    'url'   => home_url( '/' ),
) );

Scheduling a notification

Pass scheduled_at in the site timezone to store the notification and send it later. The delivery queue picks it up once that time is reached:

pushai_trigger_notification( array(
    'title'        => 'Evening briefing',
    'body'         => 'Here is what happened today.',
    'scheduled_at' => '2026-09-21 18:00',
) );

Targeting specific users

By default a notification is delivered to every active subscription. To send it to specific WordPress users instead, pass target_user_id (a single user) or target_user_ids (an array of users). Only subscriptions tied to those user accounts receive the message.

Send to one user:

pushai_trigger_notification( array(
    'title'          => 'Your order shipped',
    'body'           => 'Track it from your account.',
    'url'            => home_url( '/my-account/' ),
    'target_user_id' => 123,
) );

Send to several users:

pushai_trigger_notification( array(
    'title'           => 'Members-only update',
    'body'            => 'A new perk is available.',
    'target_user_ids' => array( 12, 45, 78 ),
) );

Targeting an audience segment

With an active PushAI Pro license, pass target_segment to filter subscriptions by WordPress role, device type, category, or tag. Dimensions are combined with AND; values inside a dimension are OR. Category and tag IDs match logged-in users who published or commented on posts in those terms. Device-only filters include guests; role and term filters require a logged-in subscriber. Explicit target_user_ids are intersected with the segment.

pushai_trigger_notification( array(
    'title'          => 'Editors on mobile',
    'body'           => 'A draft is waiting.',
    'target_segment' => array(
        'roles'    => array( 'editor' ),
        'devices'  => array( 'mobile' ),
        'categories' => array( 4, 9 ),
    ),
) );

Without a Pro license, a non-empty target_segment returns a pushai_segment_requires_pro error instead of sending.

Notes on targeting:

  • Only users who subscribed while logged in can be targeted; guest subscriptions have no user account and are never matched.
  • A user with several browsers or devices receives the notification on each active subscription (mobile and desktop are tracked separately).
  • If targeting arguments are supplied but none resolve to a valid user, the notification is rejected with a WP_Error instead of being broadcast to everyone.

Supported arguments

  • title (required) — notification heading.
  • body (required) — notification message.
  • url — link opened when the notification is clicked. Defaults to the site home URL. UTM parameters are appended automatically.
  • image — image URL shown in the notification.
  • target_user_id — a single WordPress user ID to deliver to.
  • target_user_ids — an array of WordPress user IDs to deliver to.
  • source_type — a short label describing what triggered the notification (e.g. post, manual, developer). Metadata only — shown in admin history and used to build the utm_campaign value; it does not affect who receives the message. Defaults to developer.
  • source_id — the ID of the object that triggered the notification, paired with source_type (e.g. the post ID for a post source). Metadata only, not a recipient — use target_user_id/target_user_ids to choose recipients. Defaults to 0.
  • scheduled_at — send later instead of immediately. Accepts a site-timezone datetime (Y-m-d H:i or Y-m-d H:i:s), an ISO-8601 value with offset, or a Unix timestamp. Omit it, or pass a time that is already past, to queue delivery now.
  • target_segment — Pro-licensed audience filters: roles, devices (mobile and/or desktop), categories (term IDs), and tags (term IDs). Empty dimensions are ignored. Selecting both devices is the same as omitting the device filter.
  • actions — Pro-licensed action buttons. An array of {title, url} objects (max two). The service worker opens the button URL when pressed.
  • ab — Pro-licensed A/B copy: {title, body} for variant B. Variant A is the main title/body. Even subscription ids receive A; odd ids receive B.

Available hooks:

  • pushai_should_create_post_notification — filter whether a published post creates a notification.
  • pushai_should_send_to_subscription — filter, per subscription, whether it should receive a given notification.
  • pushai_notification_payload — filter the payload sent to the browser.
  • pushai_utm_parameters — filter (or disable) the UTM parameters appended to push links.
  • pushai_notification_queued — fires after a notification is queued for delivery.
  • pushai_notification_scheduled — fires after a notification is stored for a future send.
  • pushai_notification_failed — fires when a notification fails to send.
  • pushai_notification_delivery_completed — fires after each delivery chunk finishes, with success/failed/expired counts for that chunk.
  • pushai_loaded — fires once PushAI has initialized its services.
  • pushai_queue_batch_size — filter how many pending jobs one processor run claims (default 5, clamped 1–50).
  • pushai_delivery_chunk_size — filter how many subscriptions one delivery job sends (default 250, clamped 1–1000).
  • pushai_completed_job_retention_days — filter how many days completed queue jobs are kept (default 7).
  • pushai_should_record_post_views — filter whether daily post/product view tracking runs.
  • pushai_admin_pages — filter the admin page list (menu, sidebar, and assets). PushAI Pro uses this to replace Free preview screens.
  • pushai_can_target_segment — filter whether a non-empty target_segment may be stored. Defaults to false; PushAI Pro returns true when licensed.
  • pushai_can_use_actions — filter whether action buttons may be stored. Defaults to false; PushAI Pro returns true when licensed.
  • pushai_can_ab_test — filter whether A/B copy may be stored. Defaults to false; PushAI Pro returns true when licensed.
  • pushai_notification_composer_fields — extra fields inside the notification composer. PushAI Pro adds audience segments, action buttons, and A/B fields here.
  • pushai_notification_composer_payload — filter composer arguments before they are queued.
  • pushai_notification_clicked — fires after a signed click is recorded.

Automations (Pro)

With an active PushAI Pro license, Settings Automations can POST signed JSON (X-PushAI-Signature, X-PushAI-Event) when a notification is queued, sent, or clicked. The same screen exposes POST /wp-json/pushai/v1/trigger for Zapier and Make: send X-PushAI-Token and a JSON body using the same fields as pushai_trigger_notification(). A blueprint file is linked from that settings tab.

WP-CLI

Process, inspect, and prune the delivery queue from the command line:

wp pushai queue process
wp pushai queue process --jobs=20
wp pushai queue status
wp pushai queue prune<h3>Bundled Libraries</h3>

PushAI bundles the following open-source libraries in its vendor/ directory. All are MIT-licensed and GPL-compatible.

Third-Party Services

PushAI communicates with two categories of external services. No personal data is sent without user action.

Browser push services

When a visitor subscribes and a notification is delivered, the encrypted push payload is sent directly from your server to the browser’s native push service:

  • Google Chrome / Edge — Google’s Firebase Cloud Messaging (FCM): Privacy Policy
  • Mozilla Firefox — Mozilla’s Autopush service: Privacy Policy
  • Apple Safari — Apple Push Notification service (APNs): Privacy Policy

This follows the Web Push standard (RFC 8030). Only the encrypted notification payload (title, body, URL, optional image) is transmitted; the subscriber’s email address or identity is never sent. You control the VAPID keys used to sign each push.

PushAI license API (Pro only)

Sites with a PushAI Pro license send license key verification requests to the PushAI license server at wpushai.com. This happens:

  • When the license is first activated.
  • On a periodic background check (at most once per day) to confirm the license remains valid.
  • When the admin manually refreshes the license status.
  • When WordPress checks for Pro plugin updates.

The request includes your site URL (so the license can be validated against the registered domain) and the license key. No personal data beyond these two values is transmitted. PushAI Privacy Policy