How Customer.io’s scores are calculated
The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.
verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10
PA Score37/100
Agent-ready 45.4 × 0.30 = 13.62
API quality 34.3 × 0.20 = 6.86
Openness 4.8 × 0.20 = 0.96
Built-in AI 54.2 × 0.15 = 8.13
Automation 46.5 × 0.15 = 6.97
(13.62 + 6.86 + 0.96 + 8.13 + 6.97) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 36.55 ÷ 1.00 = 36.5
Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.
Agent-ready45.4/100×0.30 of the PA blend
Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.
Point an agent at llms.txt or agent-oriented docsweight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [probe] https://docs.customer.io/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.customer.io/llms.txt # Customer.io Documentation > Customer.io is a messaging automation platform for sending targeted email, push notificat”
- [claimed-docs] https://docs.customer.io“Install the CLI and the skills that teach your AI assistant to use it”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Run the product headlessly / in CI for automationweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://docs.customer.io“Install the CLI and the skills that teach your AI assistant to use it”
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“To get data into Customer.io, use an SDK or the Pipelines API. This is the API that most of our integrations are based on and likely the API you'll use the most.”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“Our Track API provides ways to send real-time customer data to your Customer.io workspace including customer identification and event tracking.”
- [probe] https://docs.customer.io/openapi.json“PROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“We've generated a Postman collection to help you get started with our APIs.”
Plug MCP servers into this product so it can use their toolsweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Connect an agent via an official MCP serverweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Reads are separated from writes and deletes... so you can approve each category independently.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Draft a welcome email in Design Studio.”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Use an official CLIweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.customer.io“Install the CLI and the skills that teach your AI assistant to use it”
- [claimed-docs] https://docs.customer.io“Your AI can do anything you'd do by clicking or typing in Customer.io. That means you can have it build automations, draft messages, analyze performance, and so on.”
Drive the product through a documented public APIweight 3
3 (weight) × 9 (quality) × 1.0 (full) = 27.0 of 30 max
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“To get data into Customer.io, use an SDK or the Pipelines API. This is the API that most of our integrations are based on and likely the API you'll use the most.”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“Our Track API provides ways to send real-time customer data to your Customer.io workspace including customer identification and event tracking.”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“We've generated a Postman collection to help you get started with our APIs.”
- [probe] https://docs.customer.io/openapi.json“PROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key”
- [probe] https://docs.customer.io/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.customer.io/llms.txt # Customer.io Documentation > Customer.io is a messaging automation platform for sending targeted email, push notificat”
- [claimed-docs] https://docs.customer.io“Install the CLI and the skills that teach your AI assistant to use it”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Issue scoped/least-privilege API credentials for an agentweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Reads are separated from writes and deletes... so you can approve each category independently.”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
Build against official SDKsweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“To get data into Customer.io, use an SDK or the Pipelines API. This is the API that most of our integrations are based on and likely the API you'll use the most.”
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“The Pipelines API natively supports objects and relationships through the /group endpoint.”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“Our Track API provides ways to send real-time customer data to your Customer.io workspace including customer identification and event tracking.”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“We've generated a Postman collection to help you get started with our APIs.”
- [probe] https://docs.customer.io/openapi.json“PROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key”
- [community] https://news.ycombinator.com/item?id=42130655“Developer built an open-source alternative 'after getting frustrated with Customer.io's limitations,' citing lack of code-based flexibility for defining segments and email flows.”
Subscribe to events via webhooksweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Agent-ready = 95.4 ÷ 210 × 100 = 45.4
API quality34.3/100×0.20 of the PA blend
The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.
Explore an interactive API reference with runnable examplesweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.customer.io/integrations/api/track/“We've generated a Postman collection to help you get started with our APIs.”
- [probe] https://docs.customer.io/openapi.json“PROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key”
Download a machine-readable API spec (OpenAPI or equivalent)weight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [probe] https://docs.customer.io/openapi.json“PROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“We've generated a Postman collection to help you get started with our APIs.”
Test against a sandbox environment without touching production dataweight 1
1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max
- [community] https://news.ycombinator.com/item?id=49455036“After Series A/leadership change: price hikes based on contact count (not usage), AE outreach began, forced onto annual commitment plans, self-serve sign-in/testing disappeared, and annual AE calls involved 'fake promises' to get signatures. 'We're leaving. I'm done.'”
Rely on versioned APIs with a documented deprecation policyweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“To get data into Customer.io, use an SDK or the Pipelines API. This is the API that most of our integrations are based on and likely the API you'll use the most.”
- [claimed-docs] https://docs.customer.io/integrations/api/track/“Our Track API provides ways to send real-time customer data to your Customer.io workspace including customer identification and event tracking.”
- [probe] https://docs.customer.io/openapi.json“PROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key”
API quality = 24.0 ÷ 70 × 100 = 34.3
Openness4.8/100×0.20 of the PA blend
Can you leave, inspect, or self-host — data export, open source, portability.
Do everything through the API that I can do in the UIweight 2
2 (weight) × 4 (quality) × 0.3 (disputed) = 2.4 of 20 max
- [claimed-docs] https://docs.customer.io“Your AI can do anything you'd do by clicking or typing in Customer.io. That means you can have it build automations, draft messages, analyze performance, and so on.”
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“Trigger broadcasts: you'll set up a broadcast in our UI and then trigger it with a single call.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“If you go to the Segments page, you'll see segments like "Paying Customers", "Have not logged in recently" and "Unsubscribed".”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“You can trigger automations when profiles perform events, when they join Segments (e.g. they meet attribute conditions), and so on.”
- [community] https://news.ycombinator.com/item?id=42130655“Developer built an open-source alternative 'after getting frustrated with Customer.io's limitations,' citing lack of code-based flexibility for defining segments and email flows.”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Export all of my data in open formats and leaveweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Read the product's source under an open licenseweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Self-host the core productweight 3
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Openness = 2.4 ÷ 50 × 100 = 4.8
Built-in AI54.2/100×0.15 of the PA blend
Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.
Get AI-generated insights and suggestions from my data inside the productweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.customer.io“Your AI can do anything you'd do by clicking or typing in Customer.io. That means you can have it build automations, draft messages, analyze performance, and so on.”
- [claimed-docs] https://docs.customer.io“Use Customer.io AI in Slack”
- [claimed-docs] https://customer.io/pricing“AI-generated global styles”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Draft a welcome email in Design Studio.”
Set up automations that run autonomously in the backgroundweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“You can trigger automations when profiles perform events, when they join Segments (e.g. they meet attribute conditions), and so on.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“Broadcasts send a message to a list of recipients. Broadcast messages are queued to send to all the defined recipients at a time you specify.”
- [claimed-docs] https://docs.customer.io“Chain multiple delays together in a single _Wait Until_ block”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“If you go to the Segments page, you'll see segments like "Paying Customers", "Have not logged in recently" and "Unsubscribed".”
Delegate tasks to a built-in AI assistant inside the productweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://docs.customer.io“Your AI can do anything you'd do by clicking or typing in Customer.io. That means you can have it build automations, draft messages, analyze performance, and so on.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Draft a welcome email in Design Studio.”
- [claimed-docs] https://docs.customer.io“Use Customer.io AI in Slack”
- [claimed-docs] https://customer.io/pricing“AI-generated global styles”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [claimed-docs] https://docs.customer.io“Install the CLI and the skills that teach your AI assistant to use it”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Operate the product with natural-language commandsweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://docs.customer.io“Your AI can do anything you'd do by clicking or typing in Customer.io. That means you can have it build automations, draft messages, analyze performance, and so on.”
- [claimed-docs] https://docs.customer.io“Install the CLI and the skills that teach your AI assistant to use it”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Reads are separated from writes and deletes... so you can approve each category independently.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Draft a welcome email in Design Studio.”
- [claimed-docs] https://docs.customer.io“Use Customer.io AI in Slack”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Built-in AI = 48.8 ÷ 90 × 100 = 54.2
Automation46.5/100×0.15 of the PA blend
Depth of automation primitives — rules, scheduling, bulk operations, webhooks.
Perform bulk operations across many items at onceweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“Trigger broadcasts: you'll set up a broadcast in our UI and then trigger it with a single call.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“Broadcasts send a message to a list of recipients. Broadcast messages are queued to send to all the defined recipients at a time you specify.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“You can trigger automations when profiles perform events, when they join Segments (e.g. they meet attribute conditions), and so on.”
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“if you wanted to delete a profile, you'd send a track event with a name parameter called Delete Person. If you want to suppress a profile, you'd send an event called Suppress Person.”
- [claimed-docs] https://docs.customer.io/integrations/api/customerio-apis/“The Pipelines API natively supports objects and relationships through the /group endpoint.”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“You can trigger automations when profiles perform events, when they join Segments (e.g. they meet attribute conditions), and so on.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“If you go to the Segments page, you'll see segments like "Paying Customers", "Have not logged in recently" and "Unsubscribed".”
- [claimed-docs] https://docs.customer.io“Chain multiple delays together in a single _Wait Until_ block”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“Broadcasts send a message to a list of recipients. Broadcast messages are queued to send to all the defined recipients at a time you specify.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“Transactional messages are ideal for: Purchase receipts, Registration confirmations, Password resets, Event reminders, Shipping updates”
Schedule recurring jobs or workflowsweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://docs.customer.io“Your AI can do anything you'd do by clicking or typing in Customer.io. That means you can have it build automations, draft messages, analyze performance, and so on.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Reads are separated from writes and deletes... so you can approve each category independently.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“You can trigger automations when profiles perform events, when they join Segments (e.g. they meet attribute conditions), and so on.”
- [claimed-docs] https://docs.customer.io/messaging/journeys-overview/“Broadcasts send a message to a list of recipients. Broadcast messages are queued to send to all the defined recipients at a time you specify.”
- [claimed-docs] https://docs.customer.io“Chain multiple delays together in a single _Wait Until_ block”
- [probe] https://docs.customer.io/ai/mcp/get-started/“official MCP server documented at https://docs.customer.io/ai/mcp/get-started/”
Version, review, and roll back my automationsweight 1
1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“List all active automations in my workspace.”
- [claimed-docs] https://docs.customer.io/ai/mcp/get-started/“Reads are separated from writes and deletes... so you can approve each category independently.”
Automation = 37.2 ÷ 80 × 100 = 46.5