Skip to Content
DestinationsCloud StorageAmazon S3

Amazon S3

Write files to an Amazon S3 bucket in CSV or JSONL format. Use Zeotap to export model results, audience lists, or enriched data as files in S3 for downstream consumption.

Prerequisites

  • An Amazon S3 bucket
  • An IAM user or role with s3:PutObject and s3:GetBucketLocation permissions on the target bucket
  • AWS access key ID and secret access key for authentication

Authentication

S3 uses AWS Access Keys authentication.

  1. In the AWS IAM Console, create an access key for a user with S3 write permissions
  2. Enter the Access Key ID and Secret Access Key in Zeotap

Required IAM Permissions

The IAM user needs the following permissions on the target bucket:

{ "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ] }

Configuration

FieldTypeRequiredDescription
Bucket NameTextYesThe S3 bucket to write files to (e.g., my-data-bucket)
AWS RegionSelectYesThe AWS region where the bucket is located. Default: us-east-1. Options include US East (N. Virginia, Ohio), US West (N. California, Oregon), EU (Ireland, London, Frankfurt), Asia Pacific (Tokyo, Singapore, Sydney), Canada (Central), and South America (Sao Paulo)
Path PrefixTextNoOptional prefix for all object keys within the bucket. Default: zeotap/

Target Settings

FieldTypeRequiredDescription
File FormatSelectYesOutput file format: CSV or JSONL (Newline Delimited JSON). Default: CSV
Enable Gzip CompressionToggleNoCompress files with gzip before uploading. Default: On

Supported Operations

Sync Modes: Insert, Mirror, Snapshot

Audience Sync Modes: Add, Mirror, Snapshot

Features

  • Field Mapping: No — S3 writes all mapped fields as file columns
  • Schema Introspection: No — S3 is a file-based destination without schema discovery

How It Works

Zeotap writes data as files to the configured S3 bucket:

  1. Data is serialized into the selected format (CSV or JSONL)
  2. If gzip compression is enabled, the file is compressed before upload
  3. Files are uploaded to s3://{bucket}/{path_prefix}/{YYYY-MM-DD}/{batch_id}.{ext}[.gz]
  4. Each sync run produces a new set of date-partitioned files

Sync mode semantics

  • Insert writes the full current dataset as new files on every run.
  • Mirror writes the full dataset on the first run, then only the rows that changed on later runs. Every row in a mirror-mode file carries an _operation column — added, changed, or removed — so downstream consumers can apply updates and deletions. On the first run all rows are marked added. In CSV files _operation is always the last column; treat the name as reserved in mirror mode.
  • Add (audience syncs) writes only new and updated audience members. Members who left the audience since the previous run are excluded from the files.
  • Snapshot writes the complete current dataset as new files on every run and never diffs. There is no _operation column (the files are the whole dataset) and unchanged rows are included every time. Records that left are simply absent from the next drop rather than delivered tagged removed, so treat each run’s output as authoritative and replace your prior copy rather than merging into it. Unlike Insert, snapshot is guaranteed to read the full model output on every warehouse: it never adopts native change tracking (Snowflake streams, Databricks CDF), which can only surface deltas.

Troubleshooting

Access denied

Verify the IAM user has s3:PutObject permission on the bucket and path prefix. Check the bucket policy does not explicitly deny access.

Bucket not found

Ensure the bucket name is correct and the selected AWS region matches the bucket’s actual region. S3 bucket names are globally unique.

Region mismatch

The AWS region must match the bucket’s region. A mismatch causes a redirect error. Check the bucket’s region in the S3 console under Properties.

Large file uploads failing

For very large syncs, Zeotap uses multipart uploads. Ensure the IAM user has s3:PutObject and s3:AbortMultipartUpload permissions.

Last updated on