# Loyalty Reporting, Wallet Push & Email Newsletter: Win Back Existing Customers Without an App

> Your loyalty program KPIs, Wallet push broadcasts to the lock screen, and Markdown newsletters — how to build reach without an app install in the reloop dashboard.

Canonical: https://reloop.cards/en/blog/loyalty-reporting-push-newsletter
Published: 2026-04-27
Updated: 2026-08-02
Author: reloop Team (candybytes GmbH)

---
export const metadata = {
  title:
    'Loyalty Reporting, Wallet Push & Email Newsletter: Win Back Existing Customers Without an App',
  description:
    'Your loyalty program KPIs, Wallet push broadcasts to the lock screen, and Markdown newsletters — how to build reach without an app install in the reloop dashboard.',
  publishedAt: '2026-04-27',
  updatedAt: '2026-08-02',
  category: 'Reporting & Marketing',
  tags: [
    'Reporting',
    'Push Messages',
    'Wallet Broadcast',
    'Newsletter',
    'Loyalty',
    'Stamp Card',
  ],
  readingMinutes: 11,
};

When your **digital stamp card program** is up and running and the first hundred cards are in your guests' wallets, the real work begins: **getting existing customers to come back**. In practice, Wallet push often delivers significantly higher visibility and engagement than a classic email newsletter — though the exact margin depends on your setup, your cadence, and the specific reward. reloop gives you both channels — plus a reporting dashboard that shows you what's working. This article explains every metric, every push strategy, and every newsletter use case.

You'll find the full dashboard overview in the [pillar article](/blog/merchant-dashboard-funktionen). How to set up your program in the first place is covered in the [spoke "How to create a stamp card"](/blog/digitale-stempelkarte-erstellen).

## Why classic newsletters fall flat and Wallet pushes work

A classic email newsletter typically reaches only a fraction of your existing customers: some emails land in the Promotions tab, others in the spam folder, and many are never opened. Click and return rates often sit in the low single-digit percentages. That's fine for seasonal campaigns, but not for weekly reactivation.

A **Wallet push** works differently: the notification appears right on the lock screen, with your card's logo and brand color. The customer sees it without opening an app, without inbox filters, without the risk of a spam folder. In practice, we see that reloop merchants' Wallet pushes generate considerably more engagement than a classic newsletter — but how big that difference is depends on your industry, offer, and reward. Treat every push campaign as an experiment: measure the stamp spike in the days afterward and compare it to your normal baseline. That's exactly what the reporting dashboard is built for.

## The reporting dashboard in detail

Before you run campaigns, you need to know what works. The reporting dashboard is your single source of truth.

<DashboardMock variant="kpi-overview" caption="The full picture: 4 KPI tiles, a trend chart, two donut funnels, and plan usage." />

### Time ranges and data freshness

Four time ranges are available: **24 hours, 7 days, 30 days, 90 days**. Each switch fires a backend request to `/api/stats/overview?range=...&tz=Europe/Vienna`. The response is cached for 60 seconds per `(merchant, range, tz)` tuple — meaning if you pull up the same report twice within a minute, the second one comes from the cache (header `x-stats-cache: hit`).

All aggregates are **timezone-aware** — the buckets form according to your business's timezone, not UTC. This matters for breakdowns like "stamps per day," which would otherwise shift around the world at midnight.

### The eight core KPIs explained

#### 1. Stamps in the period

The sum of all positive stamp transactions in the selected period. Negative stamps (corrections, reversals) are netted out. **Practical read:** a volume indicator. If the stamp count rises week over week, you're gaining frequency.

#### 2. Rewards in the period

The number of redemption transactions — how many customers actually redeemed a full card? **Practical read:** a closing-rate signal. A high value = the program is landing. A low value = the reward isn't compelling or the threshold is too high.

#### 3. New cards

Cards issued for the first time during the period (`issuedAt` in range). **Practical read:** an acquisition indicator. If new cards stagnate, you need more QR codes in your business, a promotion, or more advertising.

#### 4. Active cards

Distinct cards with ≥1 stamp in the period. **Practical read:** an engagement indicator. Compare this to your total card base and you have your true activation rate.

#### 5. Activation rate

`(cards with ≥1 stamp ÷ total cards) × 100%`. **Practical read:** how many of the cards you've issued are actually being used? Values below 60% suggest that a lot of cards get forgotten after save-to-Wallet — and a push can work wonders here.

#### 6. Completion rate

`(cards with ≥1 redemption ÷ total cards) × 100%`. **Practical read:** how many customers go the full way from card → first stamp → reward? Values below 25% often mean the stamp goal is too high or the reward isn't attractive enough.

#### 7. Avg. stamps per active card

Stamps in the period divided by active cards. **Practical read:** frequency per regular customer. For a coffee program, 2.5–4 is typical (once a week over a 4-week window). Lower = low frequency, higher = a very engaged regular base.

#### 8. Top program

The program with the highest stamp count in the period. **Practical read:** if you run several programs in parallel, you immediately see which one is the "hero." Tip: launch promotions in program B when program A is on top — you tap into your existing reach without competing with your main program.

### Trend chart and donut funnels

The **trend chart** plots stamps against rewards over time. For 24h: hourly buckets. For 7d and 30d: daily buckets. For 90d: weekly buckets. The lines show the trend, the shaded areas show volume.

The two **donut funnels** are:

- **Activation** — the share of cards with ≥1 stamp (how many were used at least once?)
- **Completion** — the share of cards with ≥1 redemption (how many actually finish the program?)

<KpiGrid>
  <KpiTile label="Stamps 30d" value="1,284" delta="+18%" hint="vs. prior period" tone="brand" />
  <KpiTile label="Rewards" value="142" delta="+9%" hint="redemptions 30d" tone="reward" />
  <KpiTile label="Activation rate" value="78%" delta="+5 pts" hint="of the card base" tone="accent" />
  <KpiTile label="Top program" value="Coffee" hint="Coffee Loyalty Card leads" tone="neutral" />
</KpiGrid>

### Program top lists and filters

You can **filter every KPI by program**. In the Programs section, you see a table with:

- Program name
- Status (Active / Paused / Ended)
- Active cards
- Stamps in the period
- Redemptions in the period

Sortable by any column — so you can quickly tell which program contributes the most and where it pays to double down with push and newsletter.

### Tier limits card

On the overview you see a **plan usage card** with your current card and program usage compared to your plan limit. At 80%, you get an automatic email with an upgrade link. At 100%, a light-gray notice banner appears — existing cards keep working, while new signups see a friendly "no new cards right now" page.

## Wallet push broadcasts: your direct channel to the lock screen

The **broadcast composer** is available on every plan — including the free Starter plan. The fastest way to reach all of your existing customers at once.

<DashboardMock variant="broadcasts" caption="The broadcast composer with reach, program selection, and a live lock-screen-style preview." />

### How a push works

1. You compose a header (≤50 characters) and body (≤200 characters)
2. Pick the target programs (multi-select) — you see the number of Google Wallet users per program
3. Send via "Send now"
4. The backend triggers the Google Wallet push API via `patchLoyaltyClassMessages`
5. A message (`messageType: TEXT_AND_NOTIFY`) is appended to the LoyaltyClass
6. Google distributes it to all LoyaltyObjects linked to that class
7. On receipt, the notification appears on the lock screen — a banner with the card's logo and brand color

### Apple Wallet limitation

Apple does **not allow direct lock-screen pushes** from third parties. Instead, reloop quietly updates the card (for example, with a new hero image carrying your promo message), and through the geofences, iOS triggers the card automatically as soon as the guest is near your location. The practical effect: Apple users see your promotion the next time they walk past your café — which often converts better than a random push.

### Reach logic

A push campaign's reach is calculated per program as the **sum of the `googleSavedCount` values**. That's the number of LoyaltyObjects saved to a Google Wallet. Apple cards are **not counted** here — they don't receive the push, for the reasons above.

### Push best practices

<Callout tone="tip" title="When to send a push?">
- **Mornings 9–11 a.m.** for breakfast cafés and bakeries<br />
- **Afternoons 2–4 p.m.** for cafés and snacks<br />
- **Evenings 5–7 p.m.** for restaurants and bistros<br />
- **Never after 9 p.m.** or before 7 a.m. — notification fatigue<br />
- **At most once a week** per card — otherwise pushes lose their punch
</Callout>

**In terms of content**, what works best:

- Specific promotions with a time window ("Happy hour today, 4–6 p.m.")
- Bonus stamp promises ("Bring your card today — double stamps")
- Seasonal news ("Spring blends starting Monday")
- Personal reminders ("You have 3 of 5 stamps — the next one's on us")

**Avoid**: overly long sentences, multiple CTAs, generic copy with no connection.

### Send history and resend

On the history page (`/dashboard/broadcasts/verlauf`) you see every message sent, with:

- Sent timestamp
- Reach
- Failed count (undeliverable cards)
- Resend button for after-the-fact corrections

If a push goes wrong (typo, wrong date), you simply send a corrected push afterward — a little awkward, sure, but better than a confused customer base.

## Email newsletter: deeper content for subscribers

Where the Wallet push is the quick, short banner, the **email newsletter** is your format for longer content: seasonal news, storytelling, multiple CTAs, images. Requirement: you've set `emailCaptureMode` to `optional` or `required` in the program editor and collected email addresses as a result.

<DashboardMock variant="newsletter" caption="The newsletter composer with a Markdown editor and live preview. Hero image and CTA button optional." />

### Composer fields

| Field | Description |
| --- | --- |
| **Subject** | The first impression in the inbox — crucial for open rate |
| **Preheader** | Preview text next to the subject (10–80 characters recommended) |
| **Hero image** | Optional, large banner image at the top (URL, JPG/PNG/WebP) |
| **Markdown body** | Main content with headers, lists, bold, italic, links, tables |
| **CTA button text** | Optional, button label (e.g. "Open card") |
| **CTA button link** | Where the button leads (internal or external URL) |
| **Target program** | Multi-select; determines which subscribers receive the newsletter |

### Live preview on the right

As you write in the editor, the live preview on the right renders the newsletter exactly as it will arrive in your subscriber's inbox. You see Markdown instantly as HTML, the hero image, button styling — all WYSIWYG.

### Sending via Resend

When you click "Send," delivery runs through the batch API from [Resend](https://resend.com). One API call per 1,000 recipients, very fast. Plan-dependent:

- **Starter and Business**: no email newsletter included
- **Premium**: up to 25,000 recipients per month

If you go over, you get an advance warning — you can either upgrade or wait until next month.

### Subscriber management

At `/dashboard/broadcasts/subscribers` you see every email address on file, with:

- Email address (full or anonymized depending on the mode)
- Program association
- Opt-in date
- Last send date
- Opt-in status

You can manually exclude individual subscribers (e.g. after complaints) or export an entire subscriber list to CSV.

### Newsletter best practices

<Callout tone="info" title="Frequency and tone">
- **Once a month** is solid — focused, not annoying<br />
- **Twice a month** for active seasons (summer promotion, holidays)<br />
- **Weekly only as an exception** — for clearly defined promotional weeks<br />
- **A personal tone**, conversational, short sentences<br />
- **At least one image** — cafés with a latte photo get 35% higher click rates than text-only
</Callout>

### What works: three newsletter templates

#### Template 1: Seasonal launch

> **Subject:** Spring blends are here 🌸
> **Hero:** A photo of your signature drink
> **Body:** 1 paragraph of storytelling, 3 new blends as a bullet list, 1 bonus note
> **CTA:** "Open card" (link to the Wallet card)

#### Template 2: Bonus promotion

> **Subject:** This week: double stamps
> **Hero:** Optional — can work great text-only too
> **Body:** Clear mechanics, time window, scarcity ("only 100 cards")
> **CTA:** "Stop by" (link to the location address / Google Maps)

#### Template 3: Re-engagement

> **Subject:** We miss you (3 stamps = free coffee)
> **Hero:** A personalized image or a stamp visualization
> **Body:** "You have 3 of 5 stamps — the next one's on us"
> **CTA:** "Open card"

## When to push, when to newsletter, when to do both?

| Scenario | Best channel |
| --- | --- |
| Spontaneous promotion in the next 2 hours | Push |
| Weekend promotion starting Friday | Push on Friday, newsletter Thursday evening |
| Seasonal launch with a story | Newsletter |
| Re-engaging existing customers after 30 days of inactivity | Push (short) + follow-up newsletter (deeper) |
| Local event at your location | Push (geofencing is often enough on its own) |
| Bonus stamp promotion | Push as a reminder on the day of the promotion |

A **double strategy** works especially well: a newsletter Thursday evening with the story and a CTA, then a push Friday morning with a short reminder. Reach adds up, and engagement sometimes doubles.

## Tier gating and reach limits

Wallet push is included on every plan; the email newsletter starts with Premium:

| Feature | Starter | Business | Premium |
| --- | --- | --- | --- |
| Wallet push broadcasts | unlimited* | unlimited* | unlimited* |
| Newsletter reach/month | – | – | 25,000 |
| Subscriber list | – | – | ✓ |
| Send history | – | – | ✓ |

*Push broadcasts have no hard volume limits. The Google API has a technical quota limit (several thousand per hour) that normal business operations never hit. We parallelize in batches of 20 to conserve quota.

## Reporting + campaigns = the loyalty loop

The most effective strategy isn't push **or** newsletter, but the **loyalty loop**:

1. **Reporting** shows you which program is slipping
2. **A push campaign** reactivates the dormant cards
3. **Reporting** measures the impact — stamp growth, new active cards
4. **The newsletter** deepens the story for your motivated subscribers
5. **Reporting** shows conversion rates, and you iterate

With the reloop dashboard, you have this entire loop in a single web app. No extra tool stack, no data export, no API integrations.

<Callout tone="success" title="Next steps">
- [Complete overview of every dashboard feature →](/blog/merchant-dashboard-funktionen)<br />
- [How to create your first program →](/blog/digitale-stempelkarte-erstellen)<br />
- [Examples from 6 industries →](/beispiele)<br />
- [Compare plans →](/preise)<br />
- [Get started for free →](/signup)
</Callout>
