Customer.io¶
Customer.io is a customer engagement platform that enables businesses to send automated messages across email, push, SMS, and more.
omniload supports Customer.io as a source.
URI format¶
The URI format for Customer.io is as follows:
customerio://?api_key=<api-key>®ion=<region>
URI parameters:
api_key: The API key for authentication with the Customer.io API.region: The region of your Customer.io account. Must be eitherus(default) oreu.
The URI is used to connect to the Customer.io API for extracting data.
Setting up a Customer.io Integration¶
To get your API key:
Log in to your Customer.io account
Go to Account Settings > API Credentials
Create a new App API Key with read permissions
Once you have your API key, here’s a sample command that will copy the data from Customer.io into a DuckDB database:
omniload ingest \
--source-uri 'customerio://?api_key=your_api_key®ion=us' \
--source-table 'broadcasts' \
--dest-uri duckdb:///customerio.duckdb \
--dest-table 'customerio.broadcasts'
The result of this command will be a table in the customerio.duckdb database.
Tables¶
Customer.io source allows ingesting the following sources into separate tables:
Table |
PK |
Inc Key |
Inc Strategy |
Details |
|---|---|---|---|---|
id |
– |
replace |
Retrieves account activity log. |
|
id |
updated |
merge |
Retrieves broadcast campaigns. |
|
id |
updated |
merge |
Retrieves actions for broadcasts. |
|
broadcast_action_metrics:period |
broadcast_id, action_id, period, step_index |
– |
replace |
Retrieves metrics for broadcast actions. Period: |
id |
– |
merge |
Retrieves messages sent by broadcasts. |
|
broadcast_metrics:period |
broadcast_id, period, step_index |
– |
replace |
Retrieves metrics for all broadcasts. Period: |
id |
updated |
merge |
Retrieves triggered campaigns. |
|
id |
updated |
merge |
Retrieves actions for campaigns. |
|
campaign_action_metrics:period |
campaign_id, action_id, period, step_index |
– |
replace |
Retrieves metrics for campaign actions. Period: |
id |
– |
merge |
Retrieves messages/deliveries sent from campaigns. |
|
campaign_metrics:period |
campaign_id, period, step_index |
– |
replace |
Retrieves metrics for all campaigns. Period: |
id |
updated_at |
merge |
Retrieves data collections. |
|
cio_id |
– |
replace |
Retrieves all customers/people in the workspace. |
|
id |
– |
replace |
Retrieves activities performed by each customer. |
|
customer_id |
– |
replace |
Retrieves attributes for each customer. |
|
id |
– |
merge |
Retrieves messages sent to each customer. |
|
customer_id, object_type_id, object_id |
– |
replace |
Retrieves object relationships for each customer. |
|
id |
updated_at |
merge |
Retrieves export jobs. |
|
ip |
– |
replace |
Retrieves IP addresses used by Customer.io. |
|
id |
– |
merge |
Retrieves sent messages. |
|
id |
updated |
merge |
Retrieves newsletters. |
|
newsletter_metrics:period |
newsletter_id, period, step_index |
– |
replace |
Retrieves metrics for all newsletters. Period: |
id |
– |
replace |
Retrieves test groups for newsletters. |
|
id |
– |
replace |
Retrieves object types in the workspace. |
|
object_type_id, object_id |
– |
replace |
Retrieves all objects for each object type. |
|
id |
– |
replace |
Retrieves reporting webhooks. |
|
id |
updated_at |
merge |
Retrieves customer segments. |
|
id |
– |
replace |
Retrieves sender identities. |
|
id |
– |
replace |
Retrieves subscription topics. |
|
id |
– |
replace |
Retrieves transactional message templates. |
|
id |
– |
replace |
Retrieves workspaces in your account. |
Use these as --source-table parameter in the omniload ingest command.
Examples¶
Metrics Tables¶
Metrics tables require a period suffix. Use the format table_name:period where period can be hours, days, weeks, or months.
# Get daily broadcast metrics
omniload ingest \
--source-uri 'customerio://?api_key=your_api_key®ion=us' \
--source-table 'broadcast_metrics:days' \
--dest-uri duckdb:///customerio.duckdb \
--dest-table 'customerio.broadcast_metrics'
# Get hourly campaign metrics
omniload ingest \
--source-uri 'customerio://?api_key=your_api_key®ion=us' \
--source-table 'campaign_metrics:hours' \
--dest-uri duckdb:///customerio.duckdb \
--dest-table 'customerio.campaign_metrics'
People and Objects¶
# Get all customers with their identifiers
omniload ingest \
--source-uri 'customerio://?api_key=your_api_key®ion=us' \
--source-table 'customers' \
--dest-uri duckdb:///customerio.duckdb \
--dest-table 'customerio.customers'
# Get detailed customer attributes
omniload ingest \
--source-uri 'customerio://?api_key=your_api_key®ion=us' \
--source-table 'customer_attributes' \
--dest-uri duckdb:///customerio.duckdb \
--dest-table 'customerio.customer_attributes'
Incremental Loading¶
Customer.io supports incremental loading for tables that have an updated or updated_at field. When using the --interval-start and --interval-end flags, omniload will only fetch records that have been updated within the specified time range.
omniload ingest \
--source-uri 'customerio://?api_key=your_api_key®ion=us' \
--source-table 'broadcasts' \
--dest-uri duckdb:///customerio.duckdb \
--dest-table 'customerio.broadcasts' \
--interval-start '2024-01-01' \
--interval-end '2024-01-31'