Etlworks alternative — Etlworks vs Skippr
Etlworks Integrator is hybrid ETL and an ESB. You draw flows, expose APIs, and land databases, files, or warehouses. Cloud and on-prem. No per-row MAR. Starter is 300 USD a month billed yearly (330 month-to-month) on a shared instance: 3 million records a month, five schedules. Business is 600 USD yearly for 30 million records and 20 schedules. Business does not include CDC. Enterprise starts at 1,000 USD a year-billed month for a dedicated instance, real-time CDC, and unlimited records. You pick RAM and CPU: Large is 8 GB / 2 cores, 8xLarge is 128 GB / 32 cores at 36,000 USD a year. On-prem uses the same size table. Offline air-gap licenses cost 50% more. Premium connectors are 2,000 to 4,500 USD a year each.
Skippr is an open Streamhouse you run as one Rust binary. Write skippr.yml (or the same thing in Python), discover, sync. You query live state over Iceberg ∪ WAL, and the history is ordinary Iceberg in your bucket. No instance SKU. ELT into a warehouse is one path, not the product.
| Feature | Skippr | Etlworks |
|---|---|---|
| Deploy | Single Rust binary, your VPC or on-prem | Shared or dedicated cloud, or on-prem Linux/Windows. Offline licence available |
| Schema | In-stream evolution, sibling columns | Flow-defined mappings. Premium connectors priced separately |
| Storage | Open Iceberg on Parquet you own | Databases, warehouses, files, APIs you configure in the flow |
| CDC | Log-based; fails closed if the dest cannot honour | Real-time CDC on Enterprise and on-prem. Not on Business |
| Query | skipprd query on Iceberg ∪ WAL; history in any Iceberg engine | Destination after the flow. ESB APIs if you build them |
| Pricing | Free self-hosted engine | 300 / 600 / from 1,000 USD by plan and instance size. See their pricing. |
What Etlworks is good at
A monthly number instead of MAR. Unlimited users, flows, and non-premium connectors on every plan. You can run it yourself, including air-gapped. CDC and second-level schedules exist once you buy a dedicated instance. The ESB side is useful if you also need to publish APIs around the same flows. For a mid-market team that wants a visual integrator and will stay inside the record cap, that is a real product.
Where the job is wider
Starter and Business cap records and schedules. Cross the cap and you buy a bigger box. CDC is the thing you want for a live database, and it sits on Enterprise. Each environment and each HA node is another licence. SSO is 5 USD per user per month per environment. Premium connectors are a second invoice.
Etlworks is an integrator. It is not a Streamhouse. There is no Iceberg ∪ WAL query in the engine. Live state waits for the next schedule, unless you paid for CDC and still query the destination. On-prem is their Java stack on a sized VM, not one Rust binary.
Skippr will not give you Etlworks' ESB, white-label, or their flow designer. If the job is "visual integrator we can air-gap," Etlworks is the narrower tool. If the job is live SQL on Iceberg you run, Etlworks was never that.
Getting started
Install skipprd from the install guide, or pip install skippr. The three tabs write the same skippr.yml. Then discover, sync, and query.
skippr:
workspace: analytics
skipprd_el_storage_mode: local
pipelines:
orders:
data_source: data_sources.app_db
data_sink: data_sinks.lake
data_sources:
app_db:
Postgres:
host: db.internal
user: skippr_reader
password: ${APP_DB_PASSWORD}
database: app
tables: [orders, customers]
cdc_mode: snapshot_then_cdc
data_sinks:
lake:
AthenaIceberg:
warehouse: s3://my-iceberg-warehouse/
glue_database_name: analytics
athena_workgroup_name: primary
athena_results_s3_bucket: my-athena-results
region: us-east-1
schema_sink: schema_sinks.lake_schema
schema_sinks:
lake_schema:
AthenaIceberg:
warehouse: s3://my-iceberg-warehouse/
glue_database_name: analytics
athena_workgroup_name: primary
athena_results_s3_bucket: my-athena-results
region: us-east-1skipprd --workspace analytics --storage-mode local connect data-source postgres \
--pipeline orders \
--name app_db \
--host db.internal \
--user skippr_reader \
--password '${APP_DB_PASSWORD}' \
--database app \
--tables orders \
--tables customers \
--cdc-mode snapshot_then_cdc
skipprd connect data-sink athenaiceberg \
--pipeline orders \
--name lake \
--warehouse s3://my-iceberg-warehouse/ \
--glue-database-name analytics \
--athena-workgroup-name primary \
--athena-results-s3-bucket my-athena-results \
--region us-east-1
skipprd connect schema-sink athenaiceberg \
--pipeline orders \
--name lake_schemafrom skippr import (
Config,
DataSinkAthenaIceberg,
DataSourcePostgres,
DataSourcePostgresSourceCdcMode,
EnvRef,
LocalStorage,
Pipeline,
)
cfg = Config().workspace("analytics").storage(LocalStorage())
app_db = cfg.data_source(
"app_db",
DataSourcePostgres(
host="db.internal",
user="skippr_reader",
password=EnvRef("APP_DB_PASSWORD"),
database="app",
tables=["orders", "customers"],
cdc_mode=DataSourcePostgresSourceCdcMode.SNAPSHOTTHENCDC,
),
)
lake = cfg.data_sink(
"lake",
DataSinkAthenaIceberg(
warehouse="s3://my-iceberg-warehouse/",
glue_database_name="analytics",
athena_workgroup_name="primary",
athena_results_s3_bucket="my-athena-results",
region="us-east-1",
),
schema_sink="lake_schema",
)
cfg.pipeline("orders", Pipeline(data_source=app_db, data_sink=lake))
cfg.save("skippr.yml")export APP_DB_PASSWORD='your-postgres-password'
skipprd discover --pipeline orders
skipprd sync --pipeline orders --once
skipprd query "SELECT count(*) FROM analytics.orders"Which to choose
Choose Etlworks if you want a visual integrator you can cloud-host or air-gap, and a monthly instance fee is easier than MAR.
Choose Skippr if you want one binary, no record cap or instance SKU, live SQL, and Iceberg files that stay yours.
Install from Install. Connector and query reference live in Developer Docs. For optional onboarding in your VPC, Enterprise Jumpstart or Contact.
