Skip to main content

Stitch Data: Cloud ETL Service Setup & Integration Guide

Stitch Data is a simple, affordable managed cloud ELT service built on the open Singer protocol. Connect 130+ sources to your data warehouse in minutes — no code required — with flexible replication methods including log-based CDC.

✓ Singer open standard ✓ Log-based CDC (binlog/WAL) ✓ Snowflake, BigQuery, Redshift ✓ Row-based pricing

What is Stitch Data?

Stitch Data (acquired by Talend in 2018, now part of the Qlik portfolio) is a cloud-hosted ELT service that extracts data from databases and SaaS applications and loads it into your data warehouse. It is designed for simplicity — a data analyst without engineering experience can configure a new integration in under ten minutes. Stitch supports 130+ sources including MySQL, Postgres, MongoDB, Salesforce, HubSpot, Stripe, Zendesk, Facebook Ads, and Google Analytics.

Stitch is built on the open Singer protocol — an open-source standard for data extraction scripts (taps) and loading scripts (targets). This means you can run any community Singer tap locally, inspect exactly what data is being extracted, and contribute new taps to the ecosystem. Stitch adds a managed layer on top: hosting, scheduling, monitoring, and a UI. Pricing is row-based, making it more affordable than Fivetran for moderate data volumes.

Managing Sources via Stitch Connect API

# Stitch Connect API — manage sources and destinations
# pip install requests

import requests

STITCH_TOKEN = "your_stitch_api_token"
BASE_URL = "https://api.stitchdata.com/v4"
HEADERS = {
    "Authorization": f"Bearer {STITCH_TOKEN}",
    "Content-Type": "application/json",
}

# 1. List all sources (integrations)
sources = requests.get(f"{BASE_URL}/sources", headers=HEADERS).json()
for s in sources:
    print(f"Source: {s['display_name']} | Status: {s['current_step_type']}")

# 2. Create a new MySQL source
new_source = requests.post(
    f"{BASE_URL}/sources",
    headers=HEADERS,
    json={
        "type": "platform.mysql",
        "display_name": "Production MySQL",
        "properties": {
            "host": "db.example.com",
            "port": "3306",
            "database": "production",
            "username": "stitch_reader",
            "password": "secure_password",
            "ssl": "true",
        },
    },
).json()
source_id = new_source["id"]
print(f"Created source ID: {source_id}")

# 3. Trigger a manual extraction run
requests.post(
    f"{BASE_URL}/sources/{source_id}/sync",
    headers=HEADERS,
)
print("Manual sync triggered")

Singer Protocol — Taps & Targets

# Singer Protocol — tap (source) + target (destination)
# pip install singer-tools tap-mysql target-snowflake

# 1. Configure the tap (source)
# tap_config.json
{
  "host": "db.example.com",
  "port": 3306,
  "user": "stitch",
  "password": "secret",
  "database": "production"
}

# 2. Discover schema (generates catalog.json)
# tap-mysql --config tap_config.json --discover > catalog.json

# 3. Select streams to sync in catalog.json:
# Set "selected": true on each stream you want

# 4. Run the tap and pipe to the target
# tap-mysql --config tap_config.json --catalog catalog.json \
#   | target-snowflake --config target_config.json

# target_config.json
{
  "account": "myaccount.us-east-1",
  "username": "stitch_loader",
  "password": "secret",
  "database": "ANALYTICS",
  "warehouse": "LOADING_WH",
  "schema": "stitch_mysql"
}

# Singer message format (NDJSON):
# {"type": "SCHEMA", "stream": "orders", "schema": {...}, "key_properties": ["id"]}
# {"type": "RECORD", "stream": "orders", "record": {"id": 1, "amount": 99.99}}
# {"type": "STATE",  "value": {"bookmarks": {"orders": {"id": 1000}}}}

Replication Methods Explained

# Replication methods — how Stitch detects changed rows

# 1. FULL TABLE — re-sync entire table every run
# Use when: small tables, no updated_at column, source doesn't support CDC
# Pros: simple, always accurate
# Cons: expensive for large tables, slow

# 2. KEY-BASED INCREMENTAL — query rows WHERE updated_at > last_bookmark
# Use when: table has a reliable updated_at or auto-increment id column
# Pros: efficient, low source load
# Cons: misses hard deletes; requires monotonically updating replication key

# Configure in Stitch UI per-table:
# Table Settings > Replication Method > Key-based Incremental
# Replication Key: updated_at

# 3. LOG-BASED (CDC) — read database transaction log
# Supported sources: MySQL (binlog), Postgres (WAL), MongoDB (oplog), SQL Server
# Use when: you need near-real-time sync and want to capture DELETEs
# Setup for Postgres:
# wal_level = logical
# max_replication_slots = 5
# max_wal_senders = 5
# CREATE PUBLICATION stitch_pub FOR ALL TABLES;

# Comparison summary:
# Method          | Captures deletes | Source load | Complexity
# Full Table      | Yes (via full re-sync) | High | Low
# Key-based       | No               | Low         | Low
# Log-based (CDC) | Yes              | Very Low    | Medium

Stitch vs Fivetran vs Airbyte

Feature Stitch Data Fivetran Airbyte
Hosting Fully managed SaaS Fully managed SaaS Open-source / Cloud
Connectors ~130 500+ 350+ (community)
Pricing Row-based (affordable) MAR-based (premium) Free (self-hosted)
Open standard Singer (open) Proprietary Airbyte CDK (open)
CDC support Yes (Advanced plan) Yes (all plans) Yes (Debezium)
Best for Budget-conscious teams Enterprise / reliability Cost-sensitive / flexibility

Frequently Asked Questions

What is Stitch Data and what does it do?▼

Stitch Data (now part of Talend) is a fully managed cloud ETL/ELT service that extracts data from sources like databases, SaaS APIs, and files, and loads it into data warehouse destinations like Snowflake, BigQuery, Redshift, and Azure Synapse. You configure integrations in minutes through the Stitch UI — no code required for supported sources. Stitch handles scheduling, incremental sync, schema management, and error retry automatically. It is built on the open Singer specification, so you can also run taps and targets locally or extend them with custom Singer taps.

What is the Singer protocol that Stitch is built on?▼

Singer is an open-source specification for writing data extraction scripts (taps) and loading scripts (targets) that communicate via JSON messages over stdout/stdin. A tap connects to a source, discovers its schema, and emits SCHEMA, RECORD, and STATE messages as newline-delimited JSON. A target receives these messages and loads them into a destination. Because Singer is a standard protocol, any tap can be piped into any target. Stitch is a managed hosted service that runs Singer taps and targets on your behalf — but you can run any Singer tap locally without Stitch.

What are the three replication methods in Stitch?▼

Full Table replication re-syncs the entire table every run — simple and accurate, but expensive for large tables. Key-based Incremental replication queries rows where an updated_at or id column is greater than the last synced value — efficient and low-load, but misses hard DELETEs and requires a reliable replication key. Log-based Incremental (CDC) reads the database transaction log (MySQL binlog, Postgres WAL, MongoDB oplog) — captures INSERTs, UPDATEs, and DELETEs with minimal source load, but requires database configuration changes and is not available for all sources. Choose log-based CDC whenever the source supports it.

Which destinations does Stitch support?▼

Stitch supports all major cloud data warehouses: Snowflake, Google BigQuery, Amazon Redshift, Amazon S3 (data lake), Microsoft Azure Synapse Analytics, PostgreSQL, and Databricks Delta Lake. The choice of destination affects features: Snowflake and BigQuery support the widest set of data types and have the best column-level update granularity. S3 is useful for raw data lake storage at very low cost. When choosing a destination, consider query performance, cost per TB, and whether your BI tool or transformation layer (dbt) supports it natively.

How does Stitch handle schema changes?▼

When Stitch detects a new column in the source, it adds that column to the destination table on the next sync. If a column's data type changes, Stitch creates a new column with a suffix (_sdc_typed or similar) to avoid data corruption in the existing column. Dropped source columns are not removed from the destination — they remain with NULL going forward. Stitch logs all schema changes in metadata tables. You can configure notifications for schema changes in the Stitch UI. Unlike Fivetran's fully automatic schema management, Stitch may require occasional manual cleanup after significant schema changes.

What are Stitch's pricing tiers and how does billing work?▼

Stitch pricing is row-based — you pay per million rows replicated per month, with different tiers by row volume and features. The Standard plan covers most use cases with a moderate number of sources. The Advanced and Premium tiers unlock log-based replication (CDC), advanced scheduling, priority support, and a higher source limit. Row counting can be surprising with full table replication of large tables — a 10M-row table re-synced daily generates 300M rows per month. Budget carefully and prefer incremental replication to control costs. Stitch offers a 14-day free trial without a credit card.

Share this tool: X / Twitter LinkedIn
✓ 60,000+ developers use DevPlaybook ★★★★★ 4.8 / 5 on Gumroad ✓ MIT licensed · Instant download ✓ No login required

Related Products

on Gumroad

You Might Also Need

More Free Tools

Enjoying this tool? Get more like it.

Weekly developer tool guides, productivity playbooks & AI tricks. Free. No spam.

DevPlaybook Pro 7 days free

Unlock AI-Powered Dev Tools

  • ⚡ AI Code Review, Doc Generator & SQL Builder
  • ⚡ All premium templates & early access
  • ⚡ Member discounts on Gumroad products
Start Free Trial →

$9/mo after trial · Cancel anytime

Want the full toolkit?

Get DevPlaybook Pro

Every template, guide, boilerplate, and automation script in one bundle. 13 premium products — grab them all at once and save big.

$79
$241 separately Save $162 (67% off)
Get DevPlaybook Pro — $79 →

MIT licensed · Instant download · No subscription

See what's included → Browse all deals →