# Ingest from object storage

Use a bucket synchronizer when files land in Amazon S3, Cloudflare R2, Google Cloud Storage, or another S3-compatible bucket and you want Altertable to load them into a catalog.

A bucket synchronizer runs on a schedule. Each run imports new files from the configured bucket paths into destination tables, and skips files that were already loaded.

## When to use a bucket synchronizer

Use this path for:

- Parquet, CSV, or JSON files written to stable bucket paths.
- File drops produced by ELT jobs, reverse ETL jobs, or application exports.
- Append-style datasets where new files arrive over time.
- Data that should be copied into Altertable-managed tables for SQL, dashboards, and AI workflows.

If you only need to query files in place without copying them, use [Bucket Tables](/docs/lakehouse/external-catalogs/bucket-tables.md), [Iceberg Tables](/docs/lakehouse/external-catalogs/iceberg-tables.md), or [S3 Tables](/docs/lakehouse/external-catalogs/s3-tables.md).

## Set up a bucket synchronizer

1. Connect the [bucket](/docs/lakehouse/buckets.md) that contains the files.
2. Open the destination catalog in the Altertable app.
3. In **Synchronizers**, click **Add synchronizer**.
4. Choose **Bucket** as the source type.
5. Select the bucket and file format.
6. Choose the target schema.
7. Map each bucket path to the table Altertable should load.
8. Save the synchronizer and configure its schedule.

The file format applies to every path in the synchronizer. Use separate synchronizers when different paths use different formats.

## Query synced tables

After the synchronizer runs, query the destination tables with fully qualified names such as `analytics.main.events` from the SQL explorer, HTTP query API, DuckDB extension, BI adapters, MCP tools, and AI workflows.

## Keep paths stable

Bucket synchronizers work best when upstream jobs write new files to predictable paths. Keep partitioning consistent, avoid rewriting files after they have been loaded, and grant Altertable least-privilege access to the bucket paths it needs.

To send records or ad hoc files directly to Altertable, use [ingest with HTTP API](/docs/ingest-data/http-api.md) or [ingest with DuckDB](/docs/ingest-data/duckdb.md).