AWS S3
AWS S3 allows publishers to securely store and manage large volumes of advertising and audience data in the cloud.
Setup
Troubleshooting
Overview
The AWS S3 integration enables publishers to leverage Permutive’s bi-directional data capabilities with their S3 storage. This integration operates in two modes: Routing (Destination): Export first-party event data from Permutive to S3 buckets. Permutive offers two distinct routing modes:- S3 Streaming: Near real-time streaming, ideal for low-latency data pipelines and analytics
- S3 Batch: Daily scheduled exports, suitable for data warehouse ingestion and batch processing workflows
Environment Compatibility
Prerequisites
For Routing (exporting data to S3):- AWS account with permissions to create S3 buckets
- S3 bucket created in the appropriate AWS region
- Ability to configure S3 bucket policies with specific permissions
Setup
- Routing Streaming Setup
- Routing Batch Setup
- Connectivity Setup
Prerequisites
- AWS account with permissions to create S3 buckets
- An S3 bucket in a region-specific location (e.g.,
us-east-1,eu-west-1) with public access blocked and ACLs disabled - A bucket policy granting
arn:aws:iam::941252478151:role/permutive-s3-routingthes3:PutObject,s3:GetObjectands3:DeleteObjectactions on the target path, pluss3:ListBucketon the bucket
What Happens After Setup
Once routing is active:- Files stream to S3 in near real-time with approximately 5-minute latency
- Hive-style partitions are created automatically by hour
- Event data is written as GZIP-compressed JSONL files
- File naming follows the pattern
{timestamp}-{hash}-{worker_id}.jsonl.gz
Data Types
Streaming Schema
Event Data (events)
Event Data (events)
Pageview, slotclicked)Example Event
Identity Sync Data (sync_aliases)
Identity Sync Data (sync_aliases)
id: The alias identifier valuetag: The alias type (e.g.,email_sha256,device_id)
Example Sync Alias
Segment Metadata (segment)
Segment Metadata (segment)
Example Segment
Batch Schema
Event Tables (e.g., pageview_events)
Event Tables (e.g., pageview_events)
pageview_events, videoview_events). All event tables share a common structure:Example Pageview Event
Aliases Table (aliases)
Aliases Table (aliases)
email_sha256, device_id)Example Alias
Domains Table (domains)
Domains Table (domains)
Segment Metadata Table (segment_metadata)
Segment Metadata Table (segment_metadata)
Example Segment Metadata
File Formats and Compression
Streaming Format
Streaming Format
- Format: Newline-delimited JSON (
.jsonl) - Compression: GZIP (
.gz) - File Extension:
.jsonl.gz - Character Encoding: UTF-8
Batch Formats
Batch Formats
JSON Format
- Format: Newline-delimited JSON
- Compression: GZIP
- File Extension:
.json.gz - Character Encoding: UTF-8
Parquet Format
- Format: Apache Parquet columnar format
- Compression: Snappy
- File Extension:
.snappy.parquet - Schema: Derived from BigQuery table structure
Troubleshooting
Permission Denied Errors
Permission Denied Errors
-
Verify the bucket policy grants
arn:aws:iam::941252478151:role/permutive-s3-routingall required permissions:s3:PutObjects3:GetObjects3:DeleteObjects3:ListBucket
-
Check that the bucket policy includes the correct bucket ARN:
-
If the policy is scoped to a prefix, confirm the
Resourceends with/*after the prefix (.../permutive/*, not.../permutive*) — a wildcard does not match across/ - Confirm the policy is attached to the bucket, not to an IAM user or role in your own account
- If your bucket’s default encryption uses a customer-managed KMS key, confirm the Permutive role also has permissions on that key (see KMS Encryption Issues below)
Data Not Appearing in S3 (Streaming)
Data Not Appearing in S3 (Streaming)
- Verify the Permutive SDK is properly deployed and events are being collected (check Event Inspector in the Dashboard)
- Low-traffic sites may see longer delays between files due to batch size thresholds
-
Verify the bucket region matches the configured region:
- Region must be specific (e.g.,
eu-central-1, not justEU)
- Region must be specific (e.g.,
-
Verify bucket path structure is correct:
- If issues persist, contact Permutive support at technical-services@permutive.com with your integration details
Data Not Appearing in S3 (Batch)
Data Not Appearing in S3 (Batch)
- Batch exports run on 24-hour cycles. Check if sufficient time has passed since the last export window.
- Verify the Permutive SDK is properly deployed and events are being collected
- Contact Permutive support at technical-services@permutive.com to check batch export job logs and status
Incorrect Bucket Path Structure
Incorrect Bucket Path Structure
-
Verify the
bucketPrefixconfiguration:- Should NOT include leading
/unless intentional - Should NOT include bucket name
- Example:
permutive/not/permutive/ors3://bucket/permutive/
- Should NOT include leading
-
For Streaming, data uses Hive-style partitioning:
type=events/year=2026/month=01/day=15/hour=14/- This is expected behavior and cannot be customized
-
For Batch, data is organized by table name:
data/{table_name}/year=2026/month=1/day=15/- This is expected behavior and cannot be customized
Bucket Policy Validation Errors
Bucket Policy Validation Errors
-
Ensure the bucket policy JSON is valid:
- Check for missing commas, brackets, or quotes
- Use AWS Policy Generator or an online JSON validator
-
Verify ARN format is correct:
- Bucket ARN:
arn:aws:s3:::BUCKET_NAME - Object ARN:
arn:aws:s3:::BUCKET_NAME/* - Note the three colons
:::before bucket name
- Bucket ARN:
-
Confirm the
StringEqualscondition is correctly formatted:
Missing Event Types or Fields
Missing Event Types or Fields
-
Verify events are being collected in Permutive:
- Check Event Inspector in the Dashboard to confirm events are tracked
- Use browser developer console to verify SDK is firing events
-
Check event schema matches expected structure:
- Events must include required fields:
event_id,user_id,event_name, etc. - Custom properties are in the
propertiesobject
- Events must include required fields:
-
Schema changes may require integration reconfiguration:
- Contact Permutive support if you’ve made significant schema changes
KMS Encryption Issues
KMS Encryption Issues
-
If using customer-managed KMS keys, verify the Permutive role (
arn:aws:iam::941252478151:role/permutive-s3-routing) has KMS permissions: - Confirm the KMS key policy allows the Permutive role to use the key
- Verify the S3 bucket’s default encryption settings are compatible
AES256) works with no additional configuration. Customer-managed KMS keys require permissions on both sides — contact Permutive support. Note that an AWS-managed KMS key (aws/s3) cannot be used, as AWS does not permit resources encrypted under an AWS managed key to be shared with other accounts.