# Send your first push campaign in the console

Turn push on for your organization, generate its VAPID keys, write a push campaign for an audience list, send it and read its delivery report.

A push campaign sends one notification to every subscribed browser of the
people on a list. This guide tells Acme Analytics' beta testers that cohort
reports are here.

> **Note:**
  A plan that includes push notifications, and an audience list (**Audience**,
  then **Lists**) of people who signed up to your app and whose browsers
  subscribed through it
  ([`usePushNotifications`](/push-notifications/overview)). A push goes to
  signed-up users only: a contact who never signed up, or who unsubscribed, gets
  none. A console role that can create push campaigns.

## 1. Turn push on for the organization

[Open Notification events in the console](https://console.buildbase.app/dashboard/admin/notifications)

In the left rail choose **Messaging**, then **Notification events**, and open
the **Global** tab. Turn on **Push notifications**. Off, campaigns are refused
and your events send no push.

![Global notification settings, with the Push notifications switch highlighted as step 1](/images/push-notifications/first-push-campaign/org-switch.webp)

## 2. Generate the VAPID keys, once

[Open Push campaigns in the console](https://console.buildbase.app/dashboard/admin/push)

Choose **Push campaigns**. Until the organization has its VAPID keys, the key
pair browsers use to check that a push comes from you, the page says **Push
notifications not configured**. Press **Generate VAPID keys**. You do this
once; the first browser that subscribes also creates them.

![Push notifications not configured, with the Push campaigns menu item highlighted as step 2 and Generate VAPID keys as step 3](/images/push-notifications/first-push-campaign/generate-keys.webp)

## 3. Create a campaign

**Push campaigns** lists each campaign with what it delivered and what failed.
On a plan that limits them, two meters beside **Create campaign** count your
subscribed browsers and your campaigns against those limits. Press **Create
campaign**.

![Push campaigns, with the Create campaign button highlighted as step 4](/images/push-notifications/first-push-campaign/campaigns.webp)

## 4. Name it

In **Create push campaign**, fill **Campaign name** (only you see it) and press
**Create draft**.

![Create push campaign: Campaign name Cohort reports are here highlighted as step 5, and the Create draft button](/images/push-notifications/first-push-campaign/create.webp)

## 5. Pick who, and write it

Pick the **Audience / users list**; under it the console counts the
recipients. Then fill **Notification title**,
**Notification body** and, if a tap should open a page, **Click URL
(optional)**. Under **Icon (optional)**, **Choose** an image from your assets
or upload one, shown beside the notification; without one, your
organization's icon is used, and **Remove** goes back to it. Press **Save**.

![The campaign: the list Beta testers (2 members) highlighted as step 6, the title, body, click URL and Icon (optional), and the Save button](/images/push-notifications/first-push-campaign/form.webp)

![Icon (optional): None, with the Choose button highlighted, and the note that without one the organization's icon is used](/images/push-notifications/first-push-campaign/icon.webp)

## 6. Send it

**Send campaign** shows once the campaign has a list with people on it, a
title and a body. Press it and confirm. Every subscribed browser of each
signed-up person on the list gets the notification, and the campaign is marked
**Sent**.

![The Send campaign dialog, with the Send campaign button highlighted as step 7](/images/push-notifications/first-push-campaign/send.webp)

## 7. Read the report

**Delivery analytics** counts the **Total devices** it went to, how many were
**Delivered**, how many **Failed**, and the **Expired** subscriptions it found
and removed: browsers that stopped accepting pushes.

![The Delivery analytics card of the sent campaign, highlighted as step 8: total devices, delivered, failed and expired, and when it was sent](/images/push-notifications/first-push-campaign/report.webp)

Here neither beta tester has subscribed a browser yet, so every count is 0.

## Check it works

Subscribe a browser in your app, then send a campaign to a list it is on. Each
browser gets one "Notifications Enabled" notification the moment it
subscribes, which is the quickest way to see the whole path work.

## Things to watch out for

- **A sent campaign cannot be deleted.** Archive it from its row's menu.
- **Your plan caps push campaigns and subscribed browsers.** At the subscriber limit a new browser is turned away, and the meter shows it here.
- **A tap goes through link safety first,** so a click URL found harmful later stops working ([how](/push-notifications/overview#clicks-go-through-link-safety)).
- **A workflow can push to one person** with the **Send Push Notification** step ([triggers and actions](/workflows/triggers-and-actions)).

## If something goes wrong

| What you see                                                  | What it means                                                                                     |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Push is not set up for this organization yet (409)            | Generate the VAPID keys on Push campaigns, then send again.                                       |
| Push notifications are turned off for this organization (409) | Turn on **Push notifications** under **Notification events**, **Global**.                         |
| Campaign needs a title and body (400)                         | Fill both and press **Save**.                                                                     |
| Campaign needs an audience list (400)                         | Pick a list with people on it.                                                                    |
| Nobody on this list can receive push notifications (409)      | No one on the list is a signed-up user who has not unsubscribed: pick a list of your app's users. |
| Delivered 0                                                   | Nobody on the list has a subscribed browser yet.                                                  |

## Next Steps

- [Push notifications overview](/push-notifications/overview) - subscribe browsers from your app and serve the service worker.
- [Notifications](/notifications/overview) - one call for email and push, and the gates it passes.
- [Audience lists](/users/lists) - build the list a campaign goes to.
