Skip to content

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.txtPROBE 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.ioInstall 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.ioInstall 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.jsonPROBE 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.ioInstall the CLI and the skills that teach your AI assistant to use it
  • [claimed-docs] https://docs.customer.ioYour 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.jsonPROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key
  • [probe] https://docs.customer.io/llms.txtPROBE 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.ioInstall 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.jsonPROBE openapi: HTTP 200 at https://docs.customer.io/openapi.json — contains "openapi" key
  • [community] https://news.ycombinator.com/item?id=42130655Developer 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.jsonPROBE 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.jsonPROBE 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=49455036After 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.jsonPROBE 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.ioYour 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=42130655Developer 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.ioYour 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.ioUse Customer.io AI in Slack
  • [claimed-docs] https://customer.io/pricingAI-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.ioChain 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.ioYour 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.ioUse Customer.io AI in Slack
  • [claimed-docs] https://customer.io/pricingAI-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.ioInstall 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.ioYour 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.ioInstall 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.ioUse 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.ioChain 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.ioYour 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.ioChain 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