Data Pipelines & ELT arenaData Pipelines & ELT
Data pipeline and ELT platforms — the connectors, sync engines, and orchestration that move data from SaaS APIs, databases, and files into warehouses and lakes — judged on connector catalog breadth, custom-connector building, incremental sync and log-based CDC, backfills, schema-evolution handling, orchestration and scheduling, pipeline observability and alerting, dbt integration, code-first portability, reverse ETL, pricing-model clarity, and the AI-era axes: AI connector builders, MCP servers over pipelines, and whether an agent can build and operate a pipeline end to end through APIs and CLIs. Boundary note: this arena is DATA pipelines — moving and transforming datasets between systems; business-workflow automation (Zapier, Make, n8n) lives in the workflow-automation arena, and Dagster is judged here as the data-asset orchestrator anchor while a broader data-orchestration arena (Airflow, Prefect) remains on the roadmap. Meltano was verified actively maintained (repository pushed the same day as bring-up) despite its hosted Meltano Cloud being discontinued, and anchors the Singer open-standard corner.
53 user stories · 265 judged cells · updated 2026-09-08 · Evidence as of 2026-09-11
Leaderboard — every product ranked by evidenceLeaderboard
| 1 | free-tier vs Airbyte ↗ | 66/100 | 25/100 | 10/100 | 78/100 | 38/100 | ★ 5.8k▲ 1.3k/yrpypi 1.1M/wk | 23/43 verified | 62/100 integrity | ||
| 2 | free-tier vs dlt ↗ | 57/100 | 35/100 | 11/100 | 43/100 | 39/100 | ★ 22k▲ 3.6k/yrpypi 98.1k/wk | 25/41 verified · 1 disputed | 56/100 integrity | ||
| 3 | free-tier vs dlt ↗ | 48/100 | 26/100 | 5/100 | 40/100 | 61/100 | ★ 16.1k▲ 1.9k/yrpypi 1.7M/wk | 23/33 verified | 63/100 integrity | ||
| 4 | 40/100 | 15/100 | 5/100 | 50/100 | 20/100 | ★ 2.6k▲ 502/yrpypi 43.3k/wk | 21/31 verified | 71/100 integrity | |||
| 5 | free-tier vs dlt ↗ | 53/100 | 24/100 | 0/100 | 20/100 | 30/100 | pypi 26.9k/wk | 16/31 verified · 1 disputed | 0/100 integrity |
Best by user type — persona-weighted winnersBest by user type
Per persona, the product with the highest persona-weighted coverage over just that persona's stories — not the same ranking as the overall PA Score leaderboard above.
Story matrix — every product × every judged storyStory matrix
Agenticness — how well agents can access and operate the productAgenticness
Agent access
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productPoint an agent at llms.txt or agent-oriented docs | ai-native | fullT 9/10 | fullT 8/10 | fullT 9/10 | fullT 9/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productRun the product headlessly / in CI for automation | ai-native | fullT⚿ 8/10 | fullT⚿ 7/10 | fullT 8/10 | fullT 8/10 | fullT 8/10 |
| Agenticness — how well agents can access and operate the productPlug MCP servers into this product so it can use their tools | ai-native | none 0/10 | n/a | none 0/10 | n/a | n/a |
| Agenticness — how well agents can access and operate the productConnect an agent via an official MCP server | ai-native | fullT 9/10 | fullC 7/10 | fullT 7/10 | fullT 9/10 | n/a |
| Agenticness — how well agents can access and operate the productUse an official CLI | ai-native | partialT 4/10 | none 0/10 | fullT 9/10 | fullT 9/10 | fullT 8/10 |
| Agenticness — how well agents can access and operate the productDrive the product through a documented public API | ai-native | fullT⚿ 9/10 | fullT⚿ 8/10 | partialT 6/10 | fullT 8/10 | partialT 3/10 |
| Agenticness — how well agents can access and operate the productIssue scoped/least-privilege API credentials for an agent | ai-native | partialT⚿ 4/10 | partialT⚿ 5/10 | none 0/10 | none 0/10 | n/a |
| Agenticness — how well agents can access and operate the productBuild against official SDKs | ai-native | fullT⚿ 8/10 | fullT⚿ 7/10 | fullT 8/10 | fullT 8/10 | partialX 5/10 |
| Agenticness — how well agents can access and operate the productSubscribe to events via webhooks | ai-native | partialC 5/10 | none 0/10 | none 0/10 | none 0/10 | n/a |
Agentic features
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productGet AI-generated insights and suggestions from my data inside the product | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | n/a |
| Agenticness — how well agents can access and operate the productSet up automations that run autonomously in the background | ai-native | fullX 7/10 | fullX 7/10 | fullT 8/10 | fullC 7/10 | partialT 5/10 |
| Agenticness — how well agents can access and operate the productDelegate tasks to a built-in AI assistant inside the product | ai-native | partialC 5/10 | none 0/10 | none 0/10 | none 0/10 | n/a |
| Agenticness — how well agents can access and operate the productOperate the product with natural-language commands | ai-native | partialT 7/10 | partialC 6/10 | partialT 6/10 | partialT 7/10 | none 0/10 |
Api quality
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productExplore an interactive API reference with runnable examples | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productDownload a machine-readable API spec (OpenAPI or equivalent) | ai-native | partialT⚿ 4/10 | none 0/10 | none 0/10 | partialT 3/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productTest against a sandbox environment without touching production data | ai-native | partialT 5/10 | none 0/10 | partialT 6/10 | partialT 6/10 | partialT 6/10 |
| Agenticness — how well agents can access and operate the productRely on versioned APIs with a documented deprecation policy | ai-native | none⚿ 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Ai pipelines — stories about ai pipelines in this arenaAi pipelines
Ai build
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Ai pipelines — stories about ai pipelines in this arenaA coding agent can scaffold, configure, and run a complete pipeline headlessly through the CLI or API | ai-native | fullT⚿ 8/10 | partialT⚿ 7/10 | fullT 8/10 | fullT 9/10 | partialT 7/10 |
| Ai pipelines — stories about ai pipelines in this arenaAI drafts a working connector from API documentation — auth, pagination, streams — that I review and ship | ai-native | partialC 5/10 | none 0/10 | none 0/10 | fullT 7/10 | none 0/10 |
Ai destinations
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Ai pipelines — stories about ai pipelines in this arenaPipelines load into vector stores and LLM-ready formats so my agents can retrieve what was synced | ai-native | partialT 5/10 | none 0/10 | none 0/10 | partialC 6/10 | none 0/10 |
Ai operate
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Ai pipelines — stories about ai pipelines in this arenaAn agent can check sync status, diagnose a failed run, and re-trigger it through an API or MCP server | ai-native | partialT⚿ 5/10 | partialC 6/10 | partialT 6/10 | partialT 6/10 | none 0/10 |
Automation depth — how much of the product can run unattendedAutomation depth
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Automation depth — how much of the product can run unattendedPerform bulk operations across many items at once | ai-native | partialT⚿ 5/10 | partialC 4/10 | partialT 5/10 | fullT 7/10 | partialT 4/10 |
| Automation depth — how much of the product can run unattendedDefine rules that trigger actions automatically on events | ai-native | partialC 4/10 | partialC 3/10 | fullT 8/10 | partialC 4/10 | none 0/10 |
| Automation depth — how much of the product can run unattendedSchedule recurring jobs or workflows | ai-native | fullT⚿ 7/10 | fullX 7/10 | fullT 8/10 | partialC 6/10 | partialT 6/10 |
| Automation depth — how much of the product can run unattendedVersion, review, and roll back my automations | ai-native | partialC 6/10 | none 0/10 | partialX 4/10 | partialC 3/10 | partialT 6/10 |
Code first portability — stories about code first portability in this arenaCode first portability
Code first
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Code first portability — stories about code first portability in this arenaMy pipelines are plain code and config in my own repository — versioned, reviewed, and portable like any software | data-engineer | partialT⚿ 6/10 | partialC 4/10 | fullT 8/10 | fullT 9/10 | fullT 9/10 |
Destinations
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Code first portability — stories about code first portability in this arenaI load to the major warehouses and lakes — Snowflake, BigQuery, Databricks, Postgres, object storage — without changing pipelines | data-engineer | fullC 7/10 | fullX 8/10 | partialC 4/10 | fullT 7/10 | partialT 5/10 |
Connectors catalog — stories about connectors catalog in this arenaConnectors catalog
Catalog
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Connectors catalog — stories about connectors catalog in this arenaI pick from a broad catalog of maintained connectors for the SaaS APIs, databases, and files my company actually uses | data-engineer | fullX 9/10 | fullX 8/10 | partialX 6/10 | fullT 8/10 | fullT 8/10 |
| Connectors catalog — stories about connectors catalog in this arenaThe catalog tells me each connector's maturity, support level, and maintainer before I depend on it | data-engineer | none 0/10 | none 0/10 | none 0/10 | partialC 3/10 | none 0/10 |
Custom connectors
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Connectors catalog — stories about connectors catalog in this arenaI build a custom connector for a long-tail API with a supported framework or low-code builder, not a fork | data-engineer | fullC 8/10 | fullC 7/10 | partialC 6/10 | fullT 8/10 | fullX 7/10 |
Observability reliability — stories about observability reliability in this arenaObservability reliability
Freshness
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Observability reliability — stories about observability reliability in this arenaTell how fresh each destination table is and get warned when a pipeline misses its expected cadence | analytics-engineer | partialC 5/10 | partialX 6/10 | partialC 6/10 | partialC 4/10 | partialC 2/10 |
Monitoring
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Observability reliability — stories about observability reliability in this arenaI see run status, logs, and row counts per sync, and failures alert me in Slack, email, or a webhook | data-engineer | partialC 6/10 | partialX 5/10 | partialC 4/10 | partialC 3/10 | partialC 2/10 |
Recovery
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Observability reliability — stories about observability reliability in this arenaTransient failures retry automatically and interrupted syncs resume from checkpoints instead of restarting | data-engineer | none 0/10 | none 0/10 | none 0/10 | partialC 4/10 | partialC 4/10 |
Openness — open source, data portability, and self-hosting storiesOpenness
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Openness — open source, data portability, and self-hosting storiesDo everything through the API that I can do in the UI | ai-native | partialT⚿ 6/10 | partialT⚿ 6/10 | partialT 5/10 | fullT 7/10 | none 0/10 |
| Openness — open source, data portability, and self-hosting storiesExport all of my data in open formats and leave | ai-native | partialX 5/10 | partialC 5/10 | partialC 4/10 | fullC 7/10 | partialX 6/10 |
| Openness — open source, data portability, and self-hosting storiesRead the product's source under an open license | ai-native | disputedD 5/10 | n/a | none 0/10 | fullT 8/10 | fullX 6/10 |
| Openness — open source, data portability, and self-hosting storiesSelf-host the core product | ai-native | fullX 8/10 | none 0/10 | fullT 9/10 | fullT 9/10 | fullT 9/10 |
Orchestration scheduling — stories about orchestration scheduling in this arenaOrchestration scheduling
Dev loop
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Orchestration scheduling — stories about orchestration scheduling in this arenaI run and test a pipeline locally against a lightweight destination before it touches production | data-engineer | partialT 6/10 | none 0/10 | fullT 7/10 | fullT 9/10 | fullT 7/10 |
Lineage
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Orchestration scheduling — stories about orchestration scheduling in this arenaI see end-to-end lineage of my datasets — which sources, steps, and transformations produced each table | data-engineer | none 0/10 | none 0/10 | partialC 6/10 | partialC 4/10 | none 0/10 |
Orchestration
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Orchestration scheduling — stories about orchestration scheduling in this arenaI define dependencies between pipeline steps and datasets, and the platform orchestrates runs in the right order | data-engineer | partialC 4/10 | partialC 4/10 | fullT 9/10 | partialC 4/10 | partialC 5/10 |
Pricing cost — stories about pricing cost in this arenaPricing cost
Pricing
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Pricing cost — stories about pricing cost in this arenaThe pricing model is published and predictable — I can estimate what a new source costs before connecting it | data-platform-lead | none 0/10 | disputedD 4/10 | none 0/10 | partialC 3/10 | partialC 4/10 |
Privacy posture — data-handling and privacy storiesPrivacy posture
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Privacy posture — data-handling and privacy storiesChoose where my data is stored (region/residency) | ai-native | partialC 4/10 | none 0/10 | n/a | partialC 5/10 | partialC 4/10 |
| Privacy posture — data-handling and privacy storiesPrevent my data from being used to train AI models | ai-native | none 0/10 | none 0/10 | n/a | none 0/10 | n/a |
| Privacy posture — data-handling and privacy storiesControl data retention and deletion | ai-native | none 0/10 | partialC 5/10 | partialC 3/10 | partialC 3/10 | partialC 4/10 |
| Privacy posture — data-handling and privacy storiesOpt out of telemetry and usage tracking | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Reverse etl activation — stories about reverse etl activation in this arenaReverse etl activation
Reverse etl
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Reverse etl activation — stories about reverse etl activation in this arenaI sync modeled warehouse data back into SaaS tools (CRM, ads, support) to activate it where teams work | analytics-engineer | none 0/10 | none 0/10 | none 0/10 | partialC 3/10 | partialC 3/10 |
Schema evolution — stories about schema evolution in this arenaSchema evolution
Evolution
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Schema evolution — stories about schema evolution in this arenaUpstream schema changes are detected and propagated by a policy I choose, instead of silently breaking loads | data-engineer | fullC 7/10 | partialC 5/10 | partialC 5/10 | fullX 7/10 | none 0/10 |
Normalization
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Schema evolution — stories about schema evolution in this arenaLoaded data lands as typed, deduplicated destination tables ready to query, not raw JSON blobs | analytics-engineer | fullC 8/10 | fullX 7/10 | partialC 5/10 | fullT 9/10 | partialC 5/10 |
Sync replication — stories about sync replication in this arenaSync replication
Backfill
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Sync replication — stories about sync replication in this arenaBackfill history or resync a single table without rebuilding the whole pipeline | data-engineer | partialX 6/10 | partialX 4/10 | partialC 6/10 | fullC 7/10 | partialC 6/10 |
Cdc
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Sync replication — stories about sync replication in this arenaI replicate databases with log-based CDC (binlog/WAL) so I capture updates and deletes without hammering the source | data-engineer | fullX 8/10 | partialC 4/10 | none 0/10 | none 0/10 | none 0/10 |
Incremental
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Sync replication — stories about sync replication in this arenaSyncs move only new and changed records — cursor and state management handled for me, not full reloads | data-engineer | partialX 7/10 | partialX 7/10 | none 0/10 | fullC 9/10 | fullT 8/10 |
Scheduling
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Sync replication — stories about sync replication in this arenaI control sync frequency per pipeline — from sub-hour schedules to cron expressions and manual triggers | data-engineer | fullC 8/10 | partialC 4/10 | fullT 8/10 | partialC 3/10 | partialT 5/10 |
Transformations dbt — stories about transformations dbt in this arenaTransformations dbt
Dbt
| Story | Persona | |||||
|---|---|---|---|---|---|---|
| Transformations dbt — stories about transformations dbt in this arenaDbt transformations run against freshly loaded data as part of the pipeline, not on a blind timer | analytics-engineer | fullC 7/10 | partialC 6/10 | fullX 8/10 | fullC 7/10 | partialT 6/10 |
Adjacent arenas — categories often shopped togetherAdjacent arenas
Shopping this category often means shopping these too.