Data Feeds User Guide
Data Feeds allows you to automatically export Kangarootime data to your preferred cloud storage destination for use in third-party business intelligence (BI) platforms such as Tableau, Power BI, Looker, or custom data warehouses.
Overview
Data Feeds exports your data daily to a cloud storage bucket you configure.
Your BI platform can then ingest the exported files for reporting and analysis.
Table Documentation
For a complete list of available tables and their schemas, visit: https://data-feed.kangarootime.com
Getting Started
Navigate to **Settings > Integrations > Data Feeds** to create and manage your data feed configurations.
Creating a Data Feed
- Click **Add Data Feed**
- Configure the basic settings, destination, and output format
- Click **Create**
- Use **Test Connection** to verify your configuration
---
Path Configuration
The **Path** field is optional for all destination types.
If left blank, files are placed in the root of the bucket/container and are overwritten each day.
Path Placeholders
All destination types support dynamic path placeholders that are replaced at export time.
This allows you to organize exports by date.
| Placeholder | Description | Example Value |
|---|---|---|
| `{year}` | 4-digit year | `2026` |
| `{month}` | Month (1-12) | `1` |
| `{day}` | Day of month (1-31) | `14` |
| `{hour}` | Hour (0-23) | `15` |
| `{minute}` | Minute (0-59) | `30` |
| `{second}` | Second (0-59) | `45` |
| `{date}` | Full date and time | `2026-01-14 15:30:45.000000` |
Format Specifications
Placeholders support Python-style format specifications to control their output. This is useful for zero-padding numbers to ensure consistent path lengths and proper sorting, and for having full control of the date format.
The syntax is `{placeholder: format}`, where `format` follows Python's format specification:
| Format | Description | Example |
|---|---|---|
| `:02d` | Zero-pad to 2 digits | `{month:02d}` → `01` |
| `:03d` | Zero-pad to 3 digits | `{day:03d}` → `014` |
| `:04d` | Zero-pad to 4 digits | `{hour:04d}` → `0015` |
| `:%Y-%m-%d` | ISO date | `{date:%Y-%m-%d}` → `2026-01-14` |
| `:%Y/%m/%d` | Date with slashes | `{date:%Y/%m/%d}` → `2026/01/14` |
| `:%Y%m%d` | Compact date | `{date:%Y%m%d}` → `20260114` |
| `:%H%M%S` | Compact time | `{date:%H%M%S}` → `153045` |
| `:%Y-%m-%dT%H:%M:%S` | ISO datetime | `{date:%Y-%m-%dT%H:%M:%S}` → `2026-01-14T15:30:45` |
Examples:
| Path Template | Result (Jan 14, 2026 at 3:30 PM) |
|---|---|
| _(blank)_ | Files placed in bucket root |
| `feeds/{year}-{month}-{day}` | `feeds/2026-1-14` |
| `feeds/{year}-{month:02d}-{day:02d}` | `feeds/2026-01-14` |
| `exports/{year}/{month}` | `exports/2026/1` |
| `exports/{year}/{month:02d}` | `exports/2026/01` |
| `data/{date:%Y/%m/%d/%H}` | `data/2026/01/14/15` |
| `data/{date:%Y%m%d}` | `data/20260114` |
| `hourly/{year}-{month:02d}-{day:02d}/{hour:02d}` | `hourly/2026-01-14/15` |
Destination Configuration
AWS S3
Exports data to an Amazon S3 bucket.
| Field | Required | Description | Example |
|---|---|---|---|
| Bucket Name | Yes | The name of your S3 bucket | `my-analytics-bucket` |
| Region | Yes | AWS region where the bucket is located | `us-east-1` |
| Path | No | Folder path within the bucket (supports placeholders) | `data/{year}/{month}` |
| Access Key ID | Yes | IAM user access key ID | `AKIAIOSFODNN7EXAMPLE` |
| Secret Access Key | Yes | IAM user secret access key | (hidden) |
IAM Policy Requirements:
Your IAM user needs `s3:PutObject` permissions on objects in the bucket.
Example policy:
Documentation:
Azure Storage
Exports data to an Azure Blob Storage container.
| Field | Required | Description | Example |
|---|---|---|---|
| Container Name | Yes | The name of your storage container | `analytics-data` |
| Account Name | No\* | Storage account name (\*required for Service Principals) | `mystorageaccount` |
| Path | No | Folder path within the container (supports placeholders) | `exports/{date}` |
| Protocol | Yes | Connection protocol | `az`, `azure`, or `abfss` |
Authentication Methods:
Option 1: Connection String (Recommended for simplicity)
Provide the full connection string from your storage account.
| Field | Required | Description |
|---|---|---|
| Connection String | Yes | Full storage account connection string |
To find your connection string:
- Go to Azure Portal > Storage Accounts > [Your Account]
- Navigate to **Security + networking > Access keys**
- Copy the **Connection string** value
Option 2: Service Principal (Recommended for production)
Use Azure Active Directory authentication with a service principal.
| Field | Required | Description | Example |
|---|---|---|---|
| Account Name | Yes | Storage account name | `mystorageaccount` |
| Client ID | Yes | Application (client) ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
| Client Secret | Yes | Application secret value | (hidden) |
| Tenant ID | Yes | Directory (tenant) ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
Protocol Options:
| Protocol | Description | Use Case |
|---|---|---|
| `az` | Standard Azure protocol | Most common choice |
| `azure` | Legacy Azure protocol | Compatibility with older systems |
| `abfss` | Azure Blob File System Secure | Azure Data Lake Storage Gen2 |
Documentation:
---
Google Cloud Storage (GCS)
Exports data to a Google Cloud Storage bucket.
| Field | Required | Description | Example |
|---|---|---|---|
| Bucket Name | Yes | The name of your GCS bucket | `my-analytics-bucket` |
| Path | No | Folder path within the bucket (supports placeholders) | `kangarootime/{year}-{month}-{day}` |
Authentication Methods:
Option 1: Service Account Key (Recommended)
Use a service account JSON key file.
| Field | Required | Description |
|---|---|---|
| Service Account Key (JSON) | Yes | Full JSON key file contents |
To create a service account key:
- Go to Google Cloud Console > IAM & Admin > Service Accounts
- Create a new service account or select an existing one
- Click **Keys > Add Key > Create new key**
- Select **JSON** format and download
- Open the JSON file in a text editor
- Copy the entire JSON content into the field
Example JSON format:
```json { "type": "service_account", "project_id": "my-project", "private_key_id": "...", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n", "client_email": "my-service-account@my-project.iam.gserviceaccount.com", "client_id": "...", ... } ```**Required Role:** Grant the service account the `Storage Object User` role.
Option 2: HMAC Credentials
Use S3-compatible HMAC authentication.
| Field | Required | Description |
|---|---|---|
| HMAC Access Key | Yes | HMAC access key ID |
| HMAC Secret | Yes | HMAC secret |
To create HMAC credentials:
- Go to Cloud Console > Cloud Storage > Settings
- Navigate to **Interoperability**
- Create a key under **Service account HMAC** or **User account HMAC**
Documentation:
Output Format Configuration
CSV
Standard comma-separated values format.
| Option | Default | Description |
|---|---|---|
| Include Header Row | Yes | Include column names as the first row |
| Delimiter | `,` | Character separating values |
| Quote Character | `"` | Character used to quote values containing special characters |
| Escape Character | `\` | Character used to escape special characters |
| Compression | None | `None`, `Gzip`, or `Zstd` |
Examples:
Standard CSV:
| child id | first name | last name | enrolled date |
|---|---|---|---|
| abc123 | Emma | Johnson | 2024-01-15 |
| def456 | Liam | Smith | 2024-02-20 |
Tab-delimited (Delimiter: `\t`):
| child id | first name | last name | enrolled date |
|---|---|---|---|
| abc123 | Emma | Johnson | 2024-01-15 |
JSON
JSON format, optionally as an array of records.
| Option | Default | Description |
|---|---|---|
| Output as Array | No | When enabled, outputs records as a JSON array |
| Compression | None | `None`, `Gzip`, or `Zstd` |
Examples:
Array format disabled (newline-delimited JSON / NDJSON):
```json {"child_id": "abc123", "first_name": "Emma", "last_name": "Johnson"} {"child_id": "def456", "first_name": "Liam", "last_name": "Smith"} ```
Array format enabled:
```json [ { "child_id": "abc123", "first_name": "Emma", "last_name": "Johnson" }, { "child_id": "def456", "first_name": "Liam", "last_name": "Smith" } ]
Parquet
Apache Parquet columnar format, optimized for analytics workloads.
| Option | Default | Description |
|---|---|---|
| Compression | None | `Snappy`, `Gzip`, `LZ4`, `Zstd`, `Brotli`, or `None` |
| Compression Level | 3 | 1-22 (only applicable when using Zstd; higher = better compression but slower analysis speed) |
| Parquet Version | Default | `V1` or `V2` |
Compression Recommendations:
| Compression | Speed | Ratio | Best For |
|---|---|---|---|
| Snappy | Fast | Moderate | General purpose, good balance |
| LZ4 | Fastest | Lower | Speed-critical pipelines |
| Zstd | Moderate | High | Storage optimization |
| Gzip | Slower | High | Maximum compatibility |
| Brotli | Slowest | Highest | Long-term archival |
| Compression | Speed | Ratio | Best For |
|---|---|---|---|
| Snappy | Fast | Moderate | General purpose, good balance |
| LZ4 | Fastest | Lower | Speed-critical pipelines |
| Zstd | Moderate | High | Storage optimization |
| Gzip | Slower | High | Maximum compatibility |
| Brotli | Slowest | Highest | Long-term archival |
Excel (XLSX)
Microsoft Excel workbook format.
No additional configuration options. Data is exported as a standard `.xlsx` file.
**Note:** XLSX format has row limitations for large datasets.
Consider CSV or Parquet instead.
Managing Data Feeds
Test Connection
After creating or updating a data feed, use the **Test Connection** button to verify your configuration.
This will attempt to write a test file to your destination and confirm permissions are correctly configured.
**Note:** You must save any pending changes before testing the connection.
Enable/Disable
Toggle the **Enabled** switch to temporarily pause a data feed without deleting its configuration.
Error Logs
The **Error Logs** tab displays recent export activity and any errors encountered.
Use this to troubleshoot failed exports.
Log entries include:
- Triggered At**: When the export was initiated
- Message**: Status or error details
Troubleshooting
Connection Test Fails
- Verify credentials**: Ensure all required fields are filled correctly
- Check permissions**: Confirm your IAM user/service account has write permissions to the bucket
- Check bucket policy**: Ensure the bucket policy allows write access
- Verify bucket/container exists**: The destination must already exist
- Check network/firewall rules**: Ensure there are no restrictions blocking access
No Data Appearing
- Check if enabled**: Ensure the data feed is toggled on
- Review error logs**: Check the Error Logs tab for any failures
- Verify path**: If using a path prefix, ensure you're checking the correct folder
Authentication Errors
**AWS S3:**
- Verify Access Key ID and Secret are correct
- Check IAM policy includes required permissions
- Ensure the IAM user is active (not disabled)
Azure Storage:
- For Connection String: regenerate if expired
- For Service Principal: verify client secret hasn't expired
- Check RBAC role assignments on the storage account
Google Cloud Storage:
- Ensure service account key is the complete JSON (not truncated)
- Verify the service account has the required IAM role on the bucket
- For HMAC: ensure keys are associated with an active service account
Security Best Practices
- Use dedicated credentials**: Create IAM users/service accounts specifically for Data Feeds with minimal required permissions
- Rotate credentials regularly**: Update access keys and secrets periodically
- Enable bucket versioning**: Protect against accidental overwrites
- Use encryption**: Enable server-side encryption on your storage bucket
- Restrict bucket access**: Use bucket policies to limit access to authorized services only
For additional assistance or questions about Data Feeds, contact Kangarootime support via helpdesk@kangarootime.com.