Skip to main content

Airbyte: Open-Source Data Integration Platform Guide

Airbyte is the leading open-source ELT platform with 350+ connectors that you can self-host for free. Move data from any source to any destination — databases, SaaS tools, APIs, and files — with full control over your infrastructure and connector code.

✓ Open-source (free self-hosted) ✓ 350+ connectors ✓ CDC via Debezium ✓ Python CDK for custom connectors

What is Airbyte?

Airbyte is an open-source ELT (Extract, Load, Transform) data integration platform founded in 2020. It provides a catalog of 350+ pre-built connectors — covering databases (Postgres, MySQL, MongoDB, SQL Server), SaaS applications (Salesforce, HubSpot, Stripe, Google Ads, Zendesk), cloud storage (S3, GCS), and data warehouses. The open-source version is free to self-host on Docker Compose or Kubernetes, making it an attractive alternative to Fivetran and Stitch for cost-conscious teams.

Airbyte's architecture separates the platform (UI, scheduler, metadata DB) from the connector runtime (Docker containers for each connector). Each sync runs a source connector and a destination connector in Docker, extracting and loading data in Airbyte's internal JSON format. The platform handles scheduling, state management (incremental cursors), and error retry. Airbyte Cloud is the managed offering; for most teams scaling beyond a single developer, Kubernetes deployment with the Helm chart is the recommended production path.

Self-Hosted Deployment

# Deploy Airbyte self-hosted with Docker Compose
# Requirements: Docker, Docker Compose, 4GB+ RAM

git clone https://github.com/airbytehq/airbyte.git
cd airbyte
./run-ab-platform.sh

# Airbyte UI available at: http://localhost:8000
# Default credentials: airbyte / password
#
# For production, use Airbyte on Kubernetes:
helm repo add airbyte https://airbytehq.github.io/helm-charts
helm install airbyte airbyte/airbyte \
  --namespace airbyte \
  --set global.edition=community \
  --set webapp.service.type=LoadBalancer

# Environment variables for custom config:
# .env
AIRBYTE_VERSION=0.63.0
DATABASE_PASSWORD=your_secure_password
SECRET_PERSISTENCE=GOOGLE_SECRET_MANAGER  # or AWS_SECRET_MANAGER
LOG_LEVEL=INFO

Managing Connections via Airbyte API v2

# Airbyte API v2 — manage connections programmatically
# pip install requests

import requests

BASE_URL = "https://api.airbyte.com/v1"
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"

# 1. Get access token
token_resp = requests.post(
    "https://api.airbyte.com/v1/applications/token",
    json={"client_id": CLIENT_ID, "client_secret": CLIENT_SECRET},
)
token = token_resp.json()["access_token"]
HEADERS = {"Authorization": f"Bearer {token}"}

# 2. List available source definitions
sources = requests.get(
    f"{BASE_URL}/sources",
    headers=HEADERS,
).json()

# 3. Create a Postgres source
new_source = requests.post(
    f"{BASE_URL}/sources",
    headers=HEADERS,
    json={
        "name": "Production Postgres",
        "workspaceId": "your_workspace_id",
        "definitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750",  # Postgres
        "configuration": {
            "sourceType": "postgres",
            "host": "db.example.com",
            "port": 5432,
            "database": "production",
            "username": "airbyte",
            "password": "secret",
            "ssl_mode": {"mode": "require"},
            "replication_method": {
                "method": "CDC",
                "publication": "airbyte_pub",
                "replication_slot": "airbyte_slot",
            },
        },
    },
).json()
source_id = new_source["sourceId"]
print(f"Source created: {source_id}")

Building a Custom Connector with CDK

# Airbyte CDK — build a custom connector in Python
# pip install airbyte-cdk

from airbyte_cdk.sources import AbstractSource
from airbyte_cdk.sources.streams.http import HttpStream
from airbyte_cdk.models import SyncMode
from typing import Any, Iterable, List, Mapping, Optional, Tuple
import requests

class OrdersStream(HttpStream):
    url_base = "https://api.example.com/"
    primary_key = "order_id"

    def path(self, **kwargs) -> str:
        return "orders"

    def next_page_token(self, response: requests.Response) -> Optional[Mapping]:
        data = response.json()
        if data.get("next_cursor"):
            return {"cursor": data["next_cursor"]}
        return None

    def request_params(self, next_page_token=None, **kwargs) -> Mapping:
        params = {"limit": 100}
        if next_page_token:
            params["cursor"] = next_page_token["cursor"]
        return params

    def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]:
        yield from response.json().get("orders", [])

class MyApiSource(AbstractSource):
    def check_connection(self, logger, config) -> Tuple[bool, Any]:
        try:
            resp = requests.get(
                "https://api.example.com/health",
                headers={"Authorization": f"Bearer {config['api_key']}"},
            )
            return resp.status_code == 200, None
        except Exception as e:
            return False, str(e)

    def streams(self, config: Mapping) -> List:
        auth = {"Authorization": f"Bearer {config['api_key']}"}
        return [OrdersStream(authenticator=auth)]

Airbyte vs Fivetran vs Stitch

Feature Airbyte Fivetran Stitch
License Open-source (MIT/EL) Proprietary Proprietary (Singer open)
Self-hosted cost Free (infra costs only) Not available Not available
Connectors 350+ (community) 500+ (enterprise-grade) ~130
Custom connectors Python CDK (excellent) Connector SDK Singer taps (open)
CDC support Yes (Debezium) Yes (all plans) Yes (Advanced plan)
dbt integration Built-in normalization Native dbt Core Webhook + dbt Cloud
Best for Cost-sensitive, flexibility Enterprise reliability Simple, affordable SaaS

Production Best Practices

Frequently Asked Questions

What is Airbyte and how does it differ from Fivetran and Stitch?▼

Airbyte is an open-source ELT data integration platform. Unlike Fivetran and Stitch which are proprietary managed SaaS services, Airbyte's core is open-source under the MIT/Elastic license — you can self-host it for free on Docker Compose or Kubernetes. Airbyte Cloud is the managed offering with per-credit pricing. The key advantages over Fivetran and Stitch are cost (free self-hosted), flexibility (modify or build connectors), and a rapidly growing connector catalog (350+). The trade-off is that self-hosting requires infrastructure management and monitoring that Fivetran/Stitch handle for you.

What is Airbyte CDK and when should I build a custom connector?▼

The Airbyte Connector Development Kit (CDK) is a Python framework for building custom source connectors. Build a custom connector when your data source is not in the official catalog, when an existing community connector is missing features you need, or when you are integrating a proprietary internal API. The CDK handles pagination, authentication (OAuth, API Key, Basic), incremental sync with cursor fields, schema declaration, and error handling. Once built, custom connectors can be published to the Airbyte connector catalog or kept private in your workspace. The process typically takes a few hours for simple REST APIs.

What is the difference between Full Refresh and Incremental sync in Airbyte?▼

Full Refresh sync re-fetches all records from the source every run and either overwrites (Overwrite mode) or appends (Append mode) the destination table. This is simple but expensive for large datasets. Incremental Append sync fetches only records added since the last sync using a cursor field (typically updated_at or an auto-increment ID), appending new rows to the destination. Incremental Deduped History also fetches incrementally but deduplicates rows by primary key in the destination — each row is stored once, updated in-place, with Airbyte maintaining the deduplication logic. Prefer Incremental Deduped for most production use cases.

How does Airbyte handle schema evolution and data type changes?▼

When Airbyte detects new columns in the source, it adds them to the destination table on the next sync. For breaking changes (column type change, column removal), Airbyte's behavior depends on the destination and sync mode — in most cases it preserves historical data by keeping the old column and adding a new one. Airbyte normalizes data through its internal normalization step (using dbt under the hood), which can handle type coercion. You can disable normalization and use raw tables with Airbyte's JSON columns, then apply your own transformations with dbt. The Raw Tables feature stores data in JSON format, maximally preserving schema flexibility.

What are Airbyte's deployment options and their trade-offs?▼

Docker Compose is the simplest deployment — one command starts the full Airbyte platform locally or on a VM. Good for development and small teams. Kubernetes via Helm charts enables horizontal scaling, high availability, and production-grade deployments. Airbyte Cloud is the fully managed option — zero infrastructure management, per-credit pricing, and SLA. For large data volumes with cost sensitivity, Kubernetes self-hosted is the sweet spot: scale workers independently and avoid Airbyte Cloud's per-credit fees. Airbyte Enterprise adds single-tenant cloud hosting with a dedicated environment and enterprise support for teams that want SaaS convenience without the multi-tenancy concerns.

How does Airbyte integrate with dbt for transformations?▼

Airbyte handles the EL (Extract + Load) part of the pipeline — it loads raw data into your warehouse in a schema like airbyte_internal or _airbyte_raw. dbt handles the T (Transform) — it reads from the raw tables and creates clean, tested, documented models in the analytics schema. The standard pattern is: Airbyte sync completes → trigger dbt run (via dbt Cloud webhook, Airflow/Prefect operator, or the Airbyte dbt integration). Airbyte's normalization feature runs a built-in dbt project on raw data to create typed tables automatically — useful for getting started, but most teams replace this with a custom dbt project for full control.

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 →