Klaviyo API Skill: AI-Powered Email Marketing Automation via Maton OAuth
14,435+ downloads and 3 stars on ClawHub. The klaviyo skill by @byungkyu connects OpenClaw agents to the full Klaviyo marketing API through Maton's managed OAuth gateway. Manage customer profiles, campaigns, flows, segments, lists, events, and metrics — all from your AI agent. One MATON_API_KEY, no OAuth complexity.
Why Klaviyo + AI Agents?
Klaviyo is the dominant email marketing platform for eCommerce. It holds behavioral data on your customers — what they bought, when they browsed, what emails they opened. That data, combined with an AI agent that can take action on it, creates possibilities that weren't previously accessible:
- Query segment performance in natural language
- Audit flows for gaps and optimization opportunities
- Create campaigns from a description
- Route new customer events to trigger the right automation
Klaviyo knows this. They launched their own official MCP server (in beta as of mid-2025) and published blog posts titled "6 Ways Klaviyo MCP Server Can Drive Marketing Efficiency." The klaviyo OpenClaw skill provides an alternative path: through Maton's gateway rather than Klaviyo's MCP, integrated directly into your OpenClaw workflow.
Quick Start
export MATON_API_KEY="your-maton-key"
# List profiles
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/klaviyo/api/profiles')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('revision', '2024-10-15')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFImportant: Klaviyo uses date-based API versioning. Always include
revision: 2024-10-15in all requests.
First-Time Setup
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'klaviyo'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
result = json.load(urllib.request.urlopen(req))
print(result['connection']['url']) # Open to complete OAuth
EOFCore Operations
Profiles (Customer Data)
# List profiles with filters
GET /klaviyo/api/profiles?filter=equals(email,"jane@example.com")&revision=2024-10-15
# Get a profile by ID
GET /klaviyo/api/profiles/{profile_id}?revision=2024-10-15
# Create or update a profile
POST /klaviyo/api/profiles
{
"data": {
"type": "profile",
"attributes": {
"email": "jane@example.com",
"first_name": "Jane",
"last_name": "Smith",
"properties": { "plan": "premium", "signup_source": "webinar" }
}
}
}Lists and Segments
# Get all lists
GET /klaviyo/api/lists?revision=2024-10-15
# Get members of a list
GET /klaviyo/api/lists/{list_id}/profiles?revision=2024-10-15
# Get all segments
GET /klaviyo/api/segments?revision=2024-10-15
# Get profiles in a segment
GET /klaviyo/api/segments/{segment_id}/profiles?revision=2024-10-15Campaigns
# List campaigns
GET /klaviyo/api/campaigns?filter=equals(status,"draft")&revision=2024-10-15
# Get a campaign
GET /klaviyo/api/campaigns/{campaign_id}?revision=2024-10-15
# Create a campaign
POST /klaviyo/api/campaigns
{
"data": {
"type": "campaign",
"attributes": {
"name": "April Re-engagement",
"audiences": {
"included": [{"type": "segment", "id": "SEGMENT_ID"}]
},
"send_options": { "use_smart_sending": true }
}
}
}Flows
# List all flows
GET /klaviyo/api/flows?revision=2024-10-15
# Get flow actions
GET /klaviyo/api/flows/{flow_id}/flow-actions?revision=2024-10-15Useful for auditing your automation: an agent can list all flows, check their statuses, and report which are active, draft, or paused.
Events (Behavioral Tracking)
Track custom customer events to trigger flows:
python <<'EOF'
import urllib.request, os, json
event = {
"data": {
"type": "event",
"attributes": {
"profile": {"data": {"type": "profile", "attributes": {"email": "jane@example.com"}}},
"metric": {"data": {"type": "metric", "attributes": {"name": "Completed Onboarding"}}},
"properties": {"step": "billing_added", "plan": "team"},
"value": 49.00
}
}
}
data = json.dumps(event).encode()
req = urllib.request.Request('https://gateway.maton.ai/klaviyo/api/events', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('revision', '2024-10-15')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFMetrics (Analytics)
# List all metrics
GET /klaviyo/api/metrics?revision=2024-10-15
# Query metric aggregates
POST /klaviyo/api/metric-aggregates
{
"data": {
"type": "metric-aggregate",
"attributes": {
"metric_id": "METRIC_ID",
"interval": "day",
"measurements": ["count", "unique"],
"filter": ["greater-or-equal(datetime,2026-01-01T00:00:00Z)"]
}
}
}AI Agent Use Cases
Campaign performance audit: An agent queries campaign metrics for the last 30 days, calculates open rate, click rate, and revenue per recipient for each campaign, and surfaces the top 3 underperformers with suggestions.
Segment hygiene: An agent checks which lists and segments haven't been used in a campaign in 90+ days, and flags them for review or archival.
Triggered event pipeline: When a user completes a key action in your product (subscription upgrade, feature activation), an agent fires a Klaviyo event that triggers the corresponding flow automatically — without manual Zapier configuration.
New subscriber routing: An agent captures new subscribers from a third-party form, creates a Klaviyo profile with enriched attributes (company size, plan type), adds them to the appropriate list, and triggers a welcome flow.
Pre-campaign checklist: Before sending a major campaign, an agent verifies: segment size > threshold, subject line length, send time optimization enabled, and unsubscribe link present.
Klaviyo Skill vs. Klaviyo's Official MCP Server
Klaviyo launched its own MCP server in mid-2025. Here's how the two approaches compare:
| Klaviyo skill (Maton) | Klaviyo official MCP | |
|---|---|---|
| Auth | Maton OAuth gateway | Klaviyo OAuth (remote) |
| Setup | ctrl.maton.ai + browser | Claude Desktop config |
| Status | Stable | Beta (as of mid-2025) |
| Multi-account | Connection IDs | Per-account config |
| OpenClaw native | ✅ | ⚠️ MCP separate config |
| Supported ops | Full REST API | Profiles, campaigns, flows, segments |
For teams already using OpenClaw + Maton, the skill is the simpler path. For teams that want to use Klaviyo directly in Claude Desktop without OpenClaw, the official MCP server is the right choice.
Considerations
- API versioning required: Every request needs
revision: 2024-10-15. Omitting this header causes API errors. - Rate limits: Klaviyo enforces per-account rate limits. Bulk profile operations and metric aggregates have lower limits — paginate carefully.
- Klaviyo's own K:AI suite: Klaviyo has native AI for email copy, subject lines, flow building, and send time optimization. The OpenClaw skill complements this — handling the data access and orchestration layer — rather than competing with it.
- Data residency: Profile data passes through Maton's gateway. For eCommerce brands with strict data handling requirements, verify Maton's data processing policies.
- Revision pinning: When Klaviyo releases new API versions, the
revisionheader will need updating. Monitor Klaviyo's API changelog.
The Bigger Picture
Klaviyo's own stat: marketers using AI are 46% more likely to exceed their goals (2025). They built K:AI and an official MCP server because they believe AI-driven email marketing is the direction.
The klaviyo OpenClaw skill fits into that picture: an AI agent that can query your Klaviyo data, trigger events from other systems, and orchestrate campaigns as part of broader workflows — all without manual dashboard interaction.
View the skill on ClawHub: klaviyo