2 products minimum.
MAR billing + warehouse credits.
1 product, flat pricing.
Queryable on arrival.
TL;DR
- Pick rawquery if you want one managed product for the whole pipeline, flat pricing, EU jurisdiction, and you can write a JSON spec for the API we don't ship a connector for.
- Pick Fivetran if you already run a cloud warehouse, need 500+ pre-built connectors with commercial SLAs, rely on log-based CDC for enterprise databases, or cannot tolerate the risk of maintaining a custom connector yourself.
Feature-by-feature
| Dimension | rawquery | Fivetran |
|---|---|---|
| Scope | Ingest + store + compute + transform + serve | Ingest only |
| Pricing | Flat monthly | Monthly Active Rows (MAR) |
| Built-in connectors | 8 + HTTP / GraphQL spec | 500+ |
| Custom API | JSON spec file | Functions on Lambda / GCP / Azure |
| Database CDC | PK + updated_at cursor | Log-based (WAL, binlog, redo) |
| Destination | Iceberg on S3 (included) | Your warehouse (you pay separately) |
| Jurisdiction | EU-hosted (Frankfurt) | US (Fivetran Inc.) |
| Self-serve | Sign up, connect, sync | Free < 500k MAR; sales above |
Different products, different scope
Fivetran's product ends where your warehouse begins. The data lands, and from there you still need a warehouse to store it, a transformation layer (dbt) to model it, and a BI tool to query it. Three vendors, three bills, three sets of credentials.
rawquery consolidates those four layers into one product. Ingestion lands in Apache Iceberg on S3. DuckDB queries the same tables in-process. Transforms run as SQL with dependency resolution. Charts publish to a URL. One bill, one login, one place to look when something breaks.
The MAR problem
Fivetran prices by Monthly Active Rows: the number of distinct rows inserted, updated, or deleted in your destination within a calendar month. A chatty source (Salesforce activity history, event logs, frequently updated CRM records) can push MAR 10x above the underlying row count you care about. The bill follows.
rawquery's plans bill storage (rows at rest) and compute (queries you run). Sync volume is included within plan caps, visible in a usage dashboard, and does not move the price line unless you explicitly upgrade.
The 501st connector
Fivetran ships 500+ pre-built connectors. The one you need is usually number 501. Their answer is Fivetran Functions: a serverless function you build, own, and operate in AWS Lambda / GCP Functions / Azure Functions. That works, but you are writing and maintaining code, just in a different runtime.
rawquery ships 8 built-in connectors and one escape hatch: a JSON spec format that describes any REST or GraphQL API: base URL, auth mode, pagination strategy, streams, field mapping, rate limits. No Python, no Lambda, no container.
# Describe your API oncecat > spec.json <<'EOF'{ "version": "1", "base_url": "https://your-api.com/v1", "auth": { "type": "bearer" }, "streams": [ { "name": "users", "endpoint": "/users", "data_path": "data", "primary_key": ["id"] } ]}EOF
# Connect and schedulerq connect my-api --spec spec.json --auth-token $TOKEN --schedule daily# Describe your API oncecat > spec.json <<'EOF'{ "version": "1", "base_url": "https://your-api.com/v1", "auth": { "type": "bearer" }, "streams": [ { "name": "users", "endpoint": "/users", "data_path": "data", "primary_key": ["id"] } ]}EOF
# Connect and schedulerq connect my-api --spec spec.json --auth-token $TOKEN --schedule dailyWhere Fivetran still wins
- Connector breadth. 500+ sources, including NetSuite, Workday, Jira, SAP, Marketo, Braze, Mixpanel, Zendesk, and long-tail enterprise apps we don't ship and won't ship soon.
- Log-based CDC. Their database CDC uses WAL / binlog / redo-log readers with well-understood failure modes and replication slot management. Our incremental sync uses primary-key cursors. Fine for most workloads, different mechanism.
- Connector SLAs. When Stripe ships a breaking API change, Fivetran's team fixes it for you. With a custom JSON spec, that job is yours.
- Existing warehouse. If you already own Snowflake / BigQuery / Databricks, Fivetran is the right shape. rawquery is not a landing layer for someone else's warehouse.
- Enterprise posture.SOC 2 Type II, HIPAA, column-level PII hashing in transit, private-link connectivity to major clouds.
Try rawquery
# Install the CLIcurl -sSL rawquery.dev/install.sh | sh
# Connect your SaaS sourcerq connections create my-stripe --type stripe -p api_key=sk_live_xxxrq connections sync my-stripe
# Query it. No warehouse to buy separatelyrq query "SELECT status, count(*) FROM my_stripe.subscriptions GROUP BY 1"# Install the CLIcurl -sSL rawquery.dev/install.sh | sh
# Connect your SaaS sourcerq connections create my-stripe --type stripe -p api_key=sk_live_xxxrq connections sync my-stripe
# Query it. No warehouse to buy separatelyrq query "SELECT status, count(*) FROM my_stripe.subscriptions GROUP BY 1"