Pushpad Logo Pushpad

Web Push Notification Service

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

Desktop notification

About Web Push

Off-Site Push Notifications

Notifications are delivered even when a user is not on your website.

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.

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"]
  }'

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.

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.

Web notification on smartphone 2

Reach the Right Audience

Transactional Notifications & User Authentication

Target users or groups instead of devices and use authentication when users subscribe to push notifications.

Tag-based Routing

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

Bulk Notifications

Reach all your audience in a few seconds, even if you have thousands of users.

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

Send thousands of push notifications per second.

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.

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 4,000 developers have already signed up.