---
title: "Shopper ID and Klaviyo: what you're charged for, refunds, the daily cap, and the holdout"
description: "Half price for shoppers already in your Klaviyo, refunds for bounces and complaints, a self-adjusting daily cap, and a built-in holdout."
url: https://wholayer.com/help/shopper-id-klaviyo-guarantees
---

# Shopper ID and Klaviyo: what you're charged for, refunds, the daily cap, and the holdout

> Half price for shoppers already in your Klaviyo, refunds for bounces and complaints, a self-adjusting daily cap, and a built-in holdout.

Category: Shopper ID

These apply to live ecommerce sites once you've added a [Klaviyo destination](https://wholayer.com/help/destination-klaviyo). On other email platforms, each guarantee applies where the platform's API supports it: see the [platform table](https://wholayer.com/docs/integrations#shopper-platforms). Where a platform can't be checked first, every match is charged as a new shopper; without bounce data there are no automatic refunds; without rates the daily cap is fixed at 50; without orders there's no holdout. Your Klaviyo key needs Profiles (read and write), Events (read and write), and Metrics (read).

## Shoppers already on your list cost half
Before we charge for a shopper, we look their email up in your Klaviyo:
- **New to you:** we create the profile, send **WhoLayer Shopper Identified**, and charge 2 credits, once.
- **Already a profile:** we don't create a duplicate, send **WhoLayer Returning Shopper**, and charge 1 credit, half price, because finding them still costs us a match.

We remember the answer by a hash of the email for 30 days (24 hours when they weren't found), so we don't ask Klaviyo again on every visit. If we match the same person again on another device, that match is charged at the half price.

We only match new shoppers while your Klaviyo key has worked in the last 24 hours. If Klaviyo has a short outage after we've matched someone, we don't charge or send yet: the shopper waits, hidden from your People list, we retry every hour, and once Klaviyo answers they're charged as above. We pause new matching while 20 or more shoppers are waiting.

## Returning Shopper events
When a shopper who is already in your Klaviyo, or one we sent you before, comes back, we send a **WhoLayer Returning Shopper** event with the product pages they viewed, at most once per shopper per day. Use it to trigger your browse-abandonment flow for people who are already opted in. Return visits we recognize by our own first-party cookie, or by the hashed email your site passes with `wholayer("identify")`, are free, because they need no paid lookup.

## Refunds for bounces and spam complaints
Every day we read your Klaviyo's Bounced Email and Marked Email as Spam events. If a shopper we sent you bounces (soft bounces, like a full inbox, don't count) or marks your email as spam within 30 days of delivery, we refund the credits automatically and never send that shopper again. Refunds show on the **Usage** page. They share the [refund limit](https://wholayer.com/help/how-credits-work) with reported results: up to 10% of the credits you spent in the last 30 days; above that, our team reviews them.

## Deliverability Guard: a daily cap that adjusts itself
Each store has a daily limit on new contacts (200 by default; change it under **Sites**). Once a day we read your Klaviyo account's last 7 days of email:
- **Spam complaint rate** = spam complaints ÷ emails received.
- **Bounce rate** = bounces ÷ (emails received + bounces).

If complaints are over 0.08% or bounces over 2%, we halve today's cap (it pauses below 5). When both are healthy, it rises 10% a day back to your setting. With fewer than 200 emails a week the rates are too noisy to act on, so the cap follows your setting. When the cap is full, we stop matching new shoppers for the day, so you're never charged for someone we can't send. The **Sites** page shows the current rates, the cap, and why.

## Built-in holdout
By default 10% of new shoppers (not already in your Klaviyo) go into a holdout group, chosen by a fixed hash of their email. We never send or charge for them, and keep only a hash of their email. Each day we count Placed Order events in your Klaviyo for both groups, within 30 days of each shopper's first match, and the **Sites** page compares purchase rates and revenue per shopper. The report waits until each group has at least 50 shoppers with a full 30 days, shows a 95% range for the difference, and is an estimate, not a guarantee. Set the holdout to 0% (up to 20%) under **Sites**; shoppers already in the holdout stay out.

## How the holdout is paid for
Holdout shoppers are free for you, but each one still costs us a paid match. We never sell below cost, so the holdout is paid for out of the shoppers you're charged for: each new-shopper charge covers 0.12 of a holdout shopper and each half-price charge 0.06, over the last 30 days. When that doesn't cover the next one, the shopper who would have gone to the holdout is sent and charged as usual instead. A new store starts this way, and the holdout begins once enough charges cover it. The **Sites** page tells you when the holdout is paused.

## Related

- [How Shopper ID works](https://wholayer.com/help/shopper-id-how-it-works.md)
- [Klaviyo schema: WhoLayer profile properties and events](https://wholayer.com/help/klaviyo-schema.md)
- [Send shoppers to Klaviyo](https://wholayer.com/help/destination-klaviyo.md)
- [Emails are bouncing](https://wholayer.com/help/emails-bouncing.md)
