Pushpad Logo Pushpad

Web Push Notifications Service

Pushpad is the easiest way to add professional push notifications to your website or web app.

Desktop notification b906920265bdebf69b816f8d9bbfab306f1e5c41bb3f06836e4134dd659e4299

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 and Firefox and 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 f600e70ffcab4852e95e6e9c9fa3f93b46013f8152bd987d70eae94f69a7c81c

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 7da70b4394fb821254a095e1d7c0c34c04a29ca0133607ce15f3f650277854fe

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 f079ade8622f6f24bfd68a00ea37c2e9266e8bb07af09906c3950364d483f4fc
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

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 984c54adfd7ac8b3ae0a92c1b20dfbf71692f651d7ba3540b3ea24d16a683979

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.

Error Handling

We perform automatic retries if an error occurs when delivering a notification.

Performance

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.

Wordpress plugin metabox 1abd8e2acdf72a14b5bb26a30498fe17e658d6ce0b2bd67011ff0219061bf065

Wordpress integration

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

Get started

Sign up now to get 10,000 notifications/mo for free forever!