---
name: pp-klaviyo
description: "Klaviyo from the shell, with local customer-behavior analytics layered on top. Trigger phrases: `inspect a Klaviyo profile`, `deploy a Klaviyo campaign`, `check Klaviyo flow decay`, `reconcile Klaviyo campaign revenue`."
author: "Cathryn Lavery"
license: "Apache-2.0"
argument-hint: "<command> [args] | install cli|mcp"
allowed-tools: "Read Bash"
metadata:
  openclaw:
    requires:
      bins:
        - klaviyo-pp-cli
    install:
      - kind: go
        bins: [klaviyo-pp-cli]
        module: github.com/mvanhorn/printing-press-library/library/marketing/klaviyo/cmd/klaviyo-pp-cli
---

# Klaviyo — Printing Press CLI

## Prerequisites: Install the CLI

This skill drives the `klaviyo-pp-cli` binary. **You must verify the CLI is installed before invoking any command from this skill.** If it is missing, install it first:

1. Install via the Printing Press installer. It defaults binaries to `$HOME/.local/bin` on macOS/Linux and `%LOCALAPPDATA%\Programs\PrintingPress\bin` on Windows:
   ```bash
   npx -y @mvanhorn/printing-press-library install klaviyo --cli-only
   ```
2. Verify: `klaviyo-pp-cli --version`
3. Ensure the reported install directory is on `$PATH` for the agent/runtime that will invoke this skill.

If the `npx` install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.6 or newer):

```bash
go install github.com/mvanhorn/printing-press-library/library/marketing/klaviyo/cmd/klaviyo-pp-cli@latest
```

If `--version` reports "command not found" after install, the runtime cannot see the binary directory on `$PATH`. Do not proceed with skill commands until verification succeeds.

## When to Use This CLI

Use this CLI when an agent needs to inspect or operate Klaviyo without the web UI, especially for profiles, events, campaigns, flows, segments, templates, metrics, and compound growth workflows.

## Unique Capabilities

These capabilities aren't available in any other tool for this API.

### Campaign operations
- **`campaigns deploy`** — Create an email template, create a draft campaign, and assign the template to the campaign message in one audited workflow.

  _Agents can build a draft campaign without hand-stitching three endpoint calls._

  ```bash
  klaviyo-pp-cli campaigns deploy --template-html ./email.html --campaign-name "May offer" --list-id LIST_ID --subject "May offer" --from-email marketing@example.com --from-label "Marketing" --json
  ```
- **`campaigns image-swap`** — Find a campaign message template and replace an image URL inside the HTML while preserving the rest of the draft.

  _Agents can make safe creative swaps without rebuilding a whole campaign._

  ```bash
  klaviyo-pp-cli campaigns image-swap --campaign-id CAMPAIGN_ID --old-url https://cdn.example.com/old.jpg --new-url https://cdn.example.com/new.jpg --json
  ```

### Behavior graph analytics
- **`flow-decay`** — Identify flows whose open or click performance has decayed across recent time buckets using synced local data.

  _Agents can spot lifecycle automations that need refresh before revenue falls further._

  ```bash
  klaviyo-pp-cli flow-decay --days 90 --threshold 0.15 --json
  ```
- **`cohort`** — Group profiles by first event date and compute retention or repeat-action curves from synced profiles and events.

  _Agents can answer which acquisition cohorts keep buying without exporting CSVs._

  ```bash
  klaviyo-pp-cli cohort --metric "Placed Order" --interval month --json --select cohort,profiles,retained
  ```
- **`attribution`** — Join order events with campaign and flow attribution properties to summarize revenue by channel and source.

  _Agents can explain which automation or campaign generated revenue using local event evidence._

  ```bash
  klaviyo-pp-cli attribution --metric "Placed Order" --group-by flow --since 2026-01-01 --json
  ```

### Data hygiene
- **`dedup`** — Find profiles that appear duplicated by email, phone, or cross-channel collisions in the local profile mirror.

  _Agents can flag customer records that split behavior and revenue history across identities._

  ```bash
  klaviyo-pp-cli dedup --by email,phone --json
  ```
- **`reconcile`** — Compare campaign UTM evidence with local Klaviyo order events and optional Shopify credentials when available.

  _Agents can check whether campaign performance agrees with order evidence before reporting numbers._

  ```bash
  klaviyo-pp-cli reconcile --campaign-id CAMPAIGN_ID --since 2026-01-01 --json
  ```

### Growth planning
- **`plan brief-to-strategy`** — Turn a growth brief into a structured Klaviyo campaign, flow, segment, and experiment strategy.

  _Agents can convert strategy notes into a concrete Klaviyo execution plan._

  ```bash
  klaviyo-pp-cli plan brief-to-strategy --brief ./brief.md --json
  ```
- **`plan qa-gate`** — Run a launch-readiness checklist for links, offers, dates, timezone, fallback tokens, compliance, and deliverability flags.

  _Agents can block risky campaign launches with explicit findings instead of vague review notes._

  ```bash
  klaviyo-pp-cli plan qa-gate --campaign-id CAMPAIGN_ID --json
  ```

## Command Reference

**accounts** — accounts

- `klaviyo-pp-cli accounts get` — Retrieve the account(s) associated with a given private API key. This will return 1 account object within the array....
- `klaviyo-pp-cli accounts get-id` — Retrieve a single account object by its account ID. You can only request the account by which the private API key...

**back-in-stock-subscriptions** — Manage back in stock subscriptions

- `klaviyo-pp-cli back-in-stock-subscriptions` — Subscribe a profile to receive back in stock notifications. Check out [our Back in Stock API...

**campaign-clone** — Manage campaign clone

- `klaviyo-pp-cli campaign-clone` — Clones an existing campaign, returning a new campaign based on the original with a new ID and name.<br><br>*Rate...

**campaign-message-assign-template** — Manage campaign message assign template

- `klaviyo-pp-cli campaign-message-assign-template` — Creates a non-reusable version of the template and assigns it to the message.<br><br>*Rate limits*:<br>Burst:...

**campaign-messages** — Manage campaign messages

- `klaviyo-pp-cli campaign-messages get` — Returns a specific message based on a required id.<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m`...
- `klaviyo-pp-cli campaign-messages update` — Update a campaign message<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m` **Scopes:** `campaigns:write`

**campaign-recipient-estimation-jobs** — Manage campaign recipient estimation jobs

- `klaviyo-pp-cli campaign-recipient-estimation-jobs get` — Retrieve the status of a recipient estimation job triggered with the `Create Campaign Recipient Estimation Job`...
- `klaviyo-pp-cli campaign-recipient-estimation-jobs refresh-campaign-recipient-estimation` — Trigger an asynchronous job to update the estimated number of recipients for the given campaign ID. Use the `Get...

**campaign-recipient-estimations** — Manage campaign recipient estimations

- `klaviyo-pp-cli campaign-recipient-estimations <id>` — Get the estimated recipient count for a campaign with the provided campaign ID. You can refresh this count by using...

**campaign-send-jobs** — Manage campaign send jobs

- `klaviyo-pp-cli campaign-send-jobs cancel-campaign-send` — Permanently cancel the campaign, setting the status to CANCELED or revert the campaign, setting the status back to...
- `klaviyo-pp-cli campaign-send-jobs get` — Get a campaign send job<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m` **Scopes:** `campaigns:read`
- `klaviyo-pp-cli campaign-send-jobs send-campaign` — Trigger a campaign to send asynchronously<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m` **Scopes:**...

**campaign-values-reports** — Manage campaign values reports

- `klaviyo-pp-cli campaign-values-reports` — Returns the requested campaign analytics values data<br><br>*Rate limits*:<br>Burst: `1/s`<br>Steady:...

**campaigns** — campaigns

- `klaviyo-pp-cli campaigns create` — Creates a campaign given a set of parameters, then returns it.<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady:...
- `klaviyo-pp-cli campaigns delete` — Delete a campaign with the given campaign ID.<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m` **Scopes:**...
- `klaviyo-pp-cli campaigns get` — Returns some or all campaigns based on filters. A channel filter is required to list campaigns. Please provide...
- `klaviyo-pp-cli campaigns get-id` — Returns a specific campaign based on a required id.<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m`...
- `klaviyo-pp-cli campaigns update` — Update a campaign with the given campaign ID.<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m` **Scopes:**...

**catalog-categories** — Manage catalog categories

- `klaviyo-pp-cli catalog-categories create-catalog-category` — Create a new catalog category.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m` **Scopes:** `catalogs:write`
- `klaviyo-pp-cli catalog-categories delete-catalog-category` — Delete a catalog category using the given category ID.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m`...
- `klaviyo-pp-cli catalog-categories get` — Get all catalog categories in an account. Catalog categories can be sorted by the following fields, in ascending and...
- `klaviyo-pp-cli catalog-categories get-catalog-category` — Get a catalog category with the given category ID.<br><br>*Rate limits*:<br>Burst: `350/s`<br>Steady: `3500/m`...
- `klaviyo-pp-cli catalog-categories update-catalog-category` — Update a catalog category with the given category ID.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m`...

**catalog-category-bulk-create-jobs** — Manage catalog category bulk create jobs

- `klaviyo-pp-cli catalog-category-bulk-create-jobs bulk-create-catalog-categories` — Create a catalog category bulk create job to create a batch of catalog categories. Accepts up to 100 catalog...
- `klaviyo-pp-cli catalog-category-bulk-create-jobs get-bulk-create-categories-job` — Get a catalog category bulk create job with the given job ID. An `include` parameter can be provided to get the...
- `klaviyo-pp-cli catalog-category-bulk-create-jobs get-bulk-create-categories-jobs` — Get all catalog category bulk create jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate...

**catalog-category-bulk-delete-jobs** — Manage catalog category bulk delete jobs

- `klaviyo-pp-cli catalog-category-bulk-delete-jobs bulk-delete-catalog-categories` — Create a catalog category bulk delete job to delete a batch of catalog categories. Accepts up to 100 catalog...
- `klaviyo-pp-cli catalog-category-bulk-delete-jobs get-bulk-delete-categories-job` — Get a catalog category bulk delete job with the given job ID.<br><br>*Rate limits*:<br>Burst: `350/s`<br>Steady:...
- `klaviyo-pp-cli catalog-category-bulk-delete-jobs get-bulk-delete-categories-jobs` — Get all catalog category bulk delete jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate...

**catalog-category-bulk-update-jobs** — Manage catalog category bulk update jobs

- `klaviyo-pp-cli catalog-category-bulk-update-jobs bulk-update-catalog-categories` — Create a catalog category bulk update job to update a batch of catalog categories. Accepts up to 100 catalog...
- `klaviyo-pp-cli catalog-category-bulk-update-jobs get-bulk-update-categories-job` — Get a catalog category bulk update job with the given job ID. An `include` parameter can be provided to get the...
- `klaviyo-pp-cli catalog-category-bulk-update-jobs get-bulk-update-categories-jobs` — Get all catalog category bulk update jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate...

**catalog-item-bulk-create-jobs** — Manage catalog item bulk create jobs

- `klaviyo-pp-cli catalog-item-bulk-create-jobs bulk-create-catalog-items` — Create a catalog item bulk create job to create a batch of catalog items. Accepts up to 100 catalog items per...
- `klaviyo-pp-cli catalog-item-bulk-create-jobs get-bulk-create-catalog-items-job` — Get a catalog item bulk create job with the given job ID. An `include` parameter can be provided to get the...
- `klaviyo-pp-cli catalog-item-bulk-create-jobs get-bulk-create-catalog-items-jobs` — Get all catalog item bulk create jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...

**catalog-item-bulk-delete-jobs** — Manage catalog item bulk delete jobs

- `klaviyo-pp-cli catalog-item-bulk-delete-jobs bulk-delete-catalog-items` — Create a catalog item bulk delete job to delete a batch of catalog items. Accepts up to 100 catalog items per...
- `klaviyo-pp-cli catalog-item-bulk-delete-jobs get-bulk-delete-catalog-items-job` — Get a catalog item bulk delete job with the given job ID.<br><br>*Rate limits*:<br>Burst: `350/s`<br>Steady:...
- `klaviyo-pp-cli catalog-item-bulk-delete-jobs get-bulk-delete-catalog-items-jobs` — Get all catalog item bulk delete jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...

**catalog-item-bulk-update-jobs** — Manage catalog item bulk update jobs

- `klaviyo-pp-cli catalog-item-bulk-update-jobs bulk-update-catalog-items` — Create a catalog item bulk update job to update a batch of catalog items. Accepts up to 100 catalog items per...
- `klaviyo-pp-cli catalog-item-bulk-update-jobs get-bulk-update-catalog-items-job` — Get a catalog item bulk update job with the given job ID. An `include` parameter can be provided to get the...
- `klaviyo-pp-cli catalog-item-bulk-update-jobs get-bulk-update-catalog-items-jobs` — Get all catalog item bulk update jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...

**catalog-items** — Manage catalog items

- `klaviyo-pp-cli catalog-items create` — Create a new catalog item.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m` **Scopes:** `catalogs:write`
- `klaviyo-pp-cli catalog-items delete` — Delete a catalog item with the given item ID.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m` **Scopes:**...
- `klaviyo-pp-cli catalog-items get` — Get all catalog items in an account. Catalog items can be sorted by the following fields, in ascending and...
- `klaviyo-pp-cli catalog-items get-catalogitems` — Get a specific catalog item with the given item ID.<br><br>*Rate limits*:<br>Burst: `350/s`<br>Steady: `3500/m`...
- `klaviyo-pp-cli catalog-items update` — Update a catalog item with the given item ID.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m` **Scopes:**...

**catalog-variant-bulk-create-jobs** — Manage catalog variant bulk create jobs

- `klaviyo-pp-cli catalog-variant-bulk-create-jobs bulk-create-catalog-variants` — Create a catalog variant bulk create job to create a batch of catalog variants. Accepts up to 100 catalog variants...
- `klaviyo-pp-cli catalog-variant-bulk-create-jobs get-bulk-create-variants-job` — Get a catalog variant bulk create job with the given job ID. An `include` parameter can be provided to get the...
- `klaviyo-pp-cli catalog-variant-bulk-create-jobs get-bulk-create-variants-jobs` — Get all catalog variant bulk create jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...

**catalog-variant-bulk-delete-jobs** — Manage catalog variant bulk delete jobs

- `klaviyo-pp-cli catalog-variant-bulk-delete-jobs bulk-delete-catalog-variants` — Create a catalog variant bulk delete job to delete a batch of catalog variants. Accepts up to 100 catalog variants...
- `klaviyo-pp-cli catalog-variant-bulk-delete-jobs get-bulk-delete-variants-job` — Get a catalog variant bulk delete job with the given job ID.<br><br>*Rate limits*:<br>Burst: `350/s`<br>Steady:...
- `klaviyo-pp-cli catalog-variant-bulk-delete-jobs get-bulk-delete-variants-jobs` — Get all catalog variant bulk delete jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...

**catalog-variant-bulk-update-jobs** — Manage catalog variant bulk update jobs

- `klaviyo-pp-cli catalog-variant-bulk-update-jobs bulk-update-catalog-variants` — Create a catalog variant bulk update job to update a batch of catalog variants. Accepts up to 100 catalog variants...
- `klaviyo-pp-cli catalog-variant-bulk-update-jobs get-bulk-update-variants-job` — Get a catalog variate bulk update job with the given job ID. An `include` parameter can be provided to get the...
- `klaviyo-pp-cli catalog-variant-bulk-update-jobs get-bulk-update-variants-jobs` — Get all catalog variant bulk update jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...

**catalog-variants** — Manage catalog variants

- `klaviyo-pp-cli catalog-variants create` — Create a new variant for a related catalog item.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m`...
- `klaviyo-pp-cli catalog-variants delete` — Delete a catalog item variant with the given variant ID.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m`...
- `klaviyo-pp-cli catalog-variants get` — Get all variants in an account. Variants can be sorted by the following fields, in ascending and descending order:...
- `klaviyo-pp-cli catalog-variants get-catalogvariants` — Get a catalog item variant with the given variant ID.<br><br>*Rate limits*:<br>Burst: `350/s`<br>Steady: `3500/m`...
- `klaviyo-pp-cli catalog-variants update` — Update a catalog item variant with the given variant ID.<br><br>*Rate limits*:<br>Burst: `75/s`<br>Steady: `750/m`...

**client** — client

- `klaviyo-pp-cli client bulk-create-events` — Create new events to track a profile's activity. This endpoint is specifically designed to be called from...
- `klaviyo-pp-cli client create-back-in-stock-subscription` — Subscribe a profile to receive back in stock notifications. Check out [our Back in Stock API...
- `klaviyo-pp-cli client create-event` — Create a new event to track a profile's activity. This endpoint is specifically designed to be called from...
- `klaviyo-pp-cli client create-profile` — Create or update properties about a profile without tracking an associated event. This endpoint is specifically...
- `klaviyo-pp-cli client create-push-token` — Create or update a push token. This endpoint is specifically designed to be called from our mobile SDKs...
- `klaviyo-pp-cli client create-review` — Create a review with the given ID. This endpoint is for client-side environments only.<br><br>*Rate...
- `klaviyo-pp-cli client create-subscription` — Creates a subscription and consent record for email and/or SMS channels based on the provided `email` and...
- `klaviyo-pp-cli client get-geofences` — Get all geofences in an account. Returns a paginated list of all geofences for the specified company. This is the GA...
- `klaviyo-pp-cli client get-review-values-reports` — Get all reviews values reports in an account.<br><br>*Rate limits*:<br>Burst: `10/s`<br>Steady: `150/m`
- `klaviyo-pp-cli client get-reviews` — Get all reviews. This endpoint is for client-side environments only, for server-side use, refer to...
- `klaviyo-pp-cli client unregister-push-token` — Unregister a push token. This endpoint is specifically designed to be called from our mobile SDKs...

**conversation-messages** — Manage conversation messages

- `klaviyo-pp-cli conversation-messages` — Send an outbound message to a conversation. Requires OAuth authentication and account-level enablement. To request...

**coupon-code-bulk-create-jobs** — Manage coupon code bulk create jobs

- `klaviyo-pp-cli coupon-code-bulk-create-jobs bulk-create-coupon-codes` — Create a coupon-code-bulk-create-job to bulk create a list of coupon codes. Max number of coupon codes per job we...
- `klaviyo-pp-cli coupon-code-bulk-create-jobs get-bulk-create-coupon-code-jobs` — Get all coupon code bulk create jobs. Returns a maximum of 100 jobs per request.<br><br>*Rate limits*:<br>Burst:...
- `klaviyo-pp-cli coupon-code-bulk-create-jobs get-bulk-create-coupon-codes-job` — Get a coupon