Pushpad Logo Pushpad

Web Push Notification Service

Pushpad is the easiest way to add professional push notifications to websites and web apps.

Web notifications on desktop and mobile

About Web Push

Like apps, websites and web apps can send push notifications to their users.

Web Technology • No App Required

Pushpad uses the W3C Push API for Chrome, Firefox and Opera, and the Apple Push Notification service for Safari. We rely only on browser features — no apps, no plugins.

Off-Site Push Notifications

The great thing about web push is that the notifications are delivered even when a user is not on your website!

Supported Browsers

Pushpad works with all browsers (desktop & mobile) that support push notifications.

Pushpad pro prompt and code

Pushpad Pro

A customizable solution - no widgets - made for developers who want to add push notifications to a website or web app. Choose Pushpad Pro if you are looking for a Backend as a Service and you want to subscribe users to push notifications directly on your domain using the Javascript SDK.

Get started

Pushpad express subscription page

Pushpad Express

The easiest solution to create a channel to send push notifications to your users. You don't need to write code and you don't need HTTPS. When you create a new project you can setup your own subdomain on Pushpad and you get a link. Share it with your users to let them subscribe to your notifications.

Get started

Sending push notifications

You can send notifications manually from the dashboard. You can also automate notification sending with the REST API or using one of the libraries. Pushpad also offers RSS feed integration.

Send new notification with browser frame
notification = Pushpad::Notification.new({
  body: "Hello world!", # required
  title: "My Notification Title",
  target_url: "http://example.com",
  icon_url: "http://example.com/assets/icon.png"
})

# deliver to a user
user = User.find …
notification.deliver_to user # or user.id

# deliver to a group of users
users = User.where …
notification.deliver_to users

# deliver to some users only if they have a given preference
# e.g. only users who have opted in for global announcements will be reached
notification.deliver_to users, tags: ['global-announcements']

# deliver to segments
notification.broadcast tags: ['segment1', 'segment2']

# deliver to everyone
notification.broadcast
$notification = new Pushpad\Notification(array(
  'body' => "Hello world!", # required
  'title' => "My Notification Title",
  'target_url' => "http://example.com",
  'icon_url' => "http://example.com/assets/icon.png"
));

# deliver to a user
$notification->deliver_to("user1");

# deliver to a group of users
$notification->deliver_to(["user1", "user2", "user3"]);

# deliver to some users only if they have a given preference
# e.g. only users who have opted in for global announcements will be reached
$notification->deliver_to($users, ["tags" => ["global-announcements"]]);

# deliver to segments
$notification->broadcast(["tags" => ["segment1", "segment2"]]);

# deliver to everyone
$notification->broadcast();
var pushpad = require('pushpad');

var project = new pushpad.Pushpad({
  authToken: AUTH_TOKEN,
  projectId: PROJECT_ID
});

var notification = new pushpad.Notification({
  project: project,
  body: 'Hello world!',
  title: 'My Notification Title',
  targetUrl: 'http://example.com',
  iconUrl: 'http://example.com/assets/icon.png' // optional, defaults to the project icon
});

// deliver to a user
notification.deliverTo('user1', function(err, result) { /*...*/ });

// deliver to a group of users
notification.deliverTo(['user1', 'user2', 'user3'], function(err, result) { /*...*/ });

// deliver to some users only if they have a given preference
// e.g. only users who have opted in for global announcements will be reached
notification.deliverTo(users, { tags: ['global-announcements'] }, function (err, result) { /*...*/ });

// deliver to segments
notification.broadcast({ tags: ['segment1', 'segment2'] }, function (err, result) { /*...*/ });

// deliver to everyone
notification.broadcast(function(err, result) { /*...*/ });
import pushpad

project = pushpad.Pushpad(auth_token='5374d7dfeffa2eb49965624ba7596a09', project_id=123)

notification = pushpad.Notification(
    project,
    body="Hello world!",
    title="My Notification Title",
    target_url="http://example.com",
    icon_url="http://example.com/assets/icon.png" # optional, defaults to the project icon
)

# deliver to a user
notification.deliver_to('user_id')

# deliver to a group of users
notification.deliver_to(('user1_id', 'user2_id', 'user3_id'))

# deliver to some users only if they have a given preference
# e.g. only users who have opted in for global announcements will be reached
notification.deliver_to(('user1_id', 'user2_id', 'user3_id'), tags=['global-announcements'])

# deliver to segments
notification.broadcast(tags=['segment1', 'segment2'])

# deliver to everyone
notification.broadcast()
String authToken = "5374d7dfeffa2eb49965624ba7596a09";
String projectId = "123";
Pushpad pushpad = new Pushpad(authToken, projectId);

Notification notification = pushpad.buildNotification("My Notification Title", "Hello world!", "http://example.com");
// optional, defaults to the project icon
notification.iconUrl = "http://example.com/assets/icon.png";

try {
  // deliver to a user
  notification.deliverTo("user_id");

  // deliver to a group of users
  String[] users = {"user1_id", "user2_id", "user3_id"};
  notification.deliverTo(users);

  // deliver to some users only if they have a given preference
  // e.g. only users who have opted in for global announcements will be reached
  String[] tags1 = {"global-announcements"};
  notification.deliverTo(users, tags1);

  // deliver to segments
  String[] tags2 = {"segment1", "segment2"};
  notification.broadcast(tags2);

  // deliver to everyone
  notification.broadcast();
} catch (DeliveryException e) {
  e.printStackTrace();
}
curl -H 'Authorization: Token token="AUTH_TOKEN"' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -X POST 'https://pushpad.xyz/projects/PROJECT_ID/notifications' \
  -d '{
    "notification": {
      "body": "Hello world!",
      "title": "My Notification Title",
      "target_url": "http://example.com",
      "icon_url": "http://example.com/assets/icon.png"
    },
    "uids": ["user1_id", "user2_id", "user3_id"],
    "tags": ["segment1", "segment2"]
  }'
Web notifications examples

Reach the Right Audience

Transactional Notifications & User Authentication

Safely authenticate your users with SSO and target users and groups instead of devices.

Tag-based Routing

Filter your audience with tags and expressions (AND, OR, NOT) and manage notification preferences for each device.

Marketing Campaigns & Bulk Notifications

Sometimes you just want to reach all your subscribers. It's very simple and you can reach your audience in a few seconds, even if you have thousands of users.

Stats

Analytics & Monitoring

See how many people subscribe to your notifications, the number of clicks and the delivery status for each notification. Monitor your project with aggregated stats.

A Layer of Abstraction

Unified API for Multiple Services

Send notifications to Firebase, Mozilla autopush and Apple Push Notification service with just one API.

High Level SDK

The libraries are simple and opinionated. We have already made the hard choices for you.

VAPID, without hassle

The key pairs required for Firebase and Mozilla autopush are generated and configured automatically.

Performance & Deliverability

High Throughput

You can send thousands of push notifications per second and they get delivered in near real-time.

Low Response Time

API calls take only fractions of a second, because we move everything to the background, scheduling included.

Error Handling

We manage many kinds of exceptions and perform automatic retries to ensure the notification delivery.

Rich web notifications

Rich Web Notifications

Send awesome notifications and customize the title, body, link, icon, TTL and sender domain. You can also add emoji, large images and action buttons. Action buttons can open a link or even perform Javascript actions in background.

Privacy

Privacy

We respect the privacy of your business and we don't collect or resell data about your users for marketing purposes other than yours. We are based in Europe.

Wordpress plugin metabox

Wordpress integration

Push notifications re-engage your users by notifying them when you publish something new on your blog.

Get started

5,000 notifications/mo are free forever.
More than 5,000 developers have already signed up.