Triple Whale Attribution
Use the Triple Whale Attribution connector to sync order-level first-click attribution with journey events, pixel-attributed ad performance (Triple Attribution), and platform-reported ad spend into your Athena lakehouse. This is a Blotout custom connector built on the Airbyte Connector Builder (declarative manifest).
Prerequisites
Section titled “Prerequisites”- A tag with Blotout Cloud set up (green checkmark in the Tags table)
- A Triple Whale API key — created under Settings → API Keys in the Triple Whale UI. Scopes cannot be added after creation.
- The shop domain (e.g.
example.myshopify.com) - Required scopes:
| Scope | Needed by |
|---|---|
| Pixel Attribution: Read | orders_with_journeys |
| Data Out (may be plan-gated) | pixel_attributed_performance, ads_performance |
Create the pipeline
Section titled “Create the pipeline”Follow the shared Create a pipeline steps until the source catalogue appears, then select Triple Whale Attribution.
Source configuration
Section titled “Source configuration”On the Source step, configure the connector:
| Field | Purpose |
|---|---|
| Schedule Type | How the pipeline runs — typically Scheduled |
| Sync Frequency | How often Airbyte syncs (for example, Every 24 hours) |
| Source Name | Name for this pipeline — used in the Athena schema <SOURCE_NAME>_<ENV> |
Authentication
Section titled “Authentication”Every request carries x-api-key: <key>.
Configuration fields
Section titled “Configuration fields”| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| api_key | secret string | Yes | — | Triple Whale API key. Needs Pixel Attribution: Read; SQL streams may need Data Out. |
| shop | string | Yes | — | Shop domain (e.g. example.myshopify.com). Sent as shop on attribution and shopId on SQL. |
| start_date | string | Yes | — | Earliest date to pull (YYYY-MM-DD). Attribution timestamps use UTC. |
| end_date | string | No | Today | Leave blank for scheduled connections. |
| lookback_days | integer | No | 7 | Rewind before the stored cursor. Journeys keep resolving, firstClick can change, and ad platforms restate spend. |
| page_size | integer | No | 100 | API max for orders. Larger values are rejected. |
| order_step_days | integer | No | 7 | Slice width for orders_with_journeys. The stream paginates, so this affects request shape only. |
| currency | string | No | USD | Currency for the SQL-backed streams. |
| exclude_journey_data | boolean | No | false | Leave false. Set true to drop journey[] and keep only firstClick. |
| base_url | string | No | https://api.triplewhale.com/api/v2 | Override only for a dedicated host. |
Supported sync modes
Section titled “Supported sync modes”- Incremental Sync — Append (
orders_with_journeys,pixel_attributed_performance,ads_performance) - Full Refresh (
api_key_info)
Supported streams
Section titled “Supported streams”| Stream | Endpoint | Method | Cursor | Sync Mode |
|---|---|---|---|---|
orders_with_journeys | /attribution/get-orders-with-journeys-v2 | POST | created_at | Incremental |
pixel_attributed_performance | /orcabase/api/sql (pixel_joined_tvf) | POST | event_date | Incremental |
ads_performance | /orcabase/api/sql (ads_table) | POST | event_date | Incremental |
api_key_info | /users/api-keys/me | GET | — | Full Refresh |
orders_with_journeys — REST first-click + journey events
Section titled “orders_with_journeys — REST first-click + journey events”One row per order with attribution.firstClick[] and journey[] events (page loaded, add2c). This is not warehouse pixel_orders (Triple Attribution multi-touch). Deduping PARTITION BY order_id is correct here.
Key fields: order_id, order_name, created_at, customer_id, total_price (string — cast in dbt), currency, attribution.firstClick[], journey[].
pixel_attributed_performance — Triple Attribution ad-day aggregates
Section titled “pixel_attributed_performance — Triple Attribution ad-day aggregates”SQL over pixel_joined_tvf() with model = 'Triple Attribution'. Spend plus Triple-Attribution order_revenue / orders_quantity / new-customer measures. Grouped to ad × day.
Key fields: event_date, channel, campaign_id, ad_id, spend, impressions, clicks, order_revenue, orders_quantity, new_customer_orders, channel_reported_conversions.
ads_performance — platform-reported ad spend
Section titled “ads_performance — platform-reported ad spend”SQL over ads_table. Raw ad-network numbers before pixel attribution. Grouped to campaign × day. Pair with pixel_attributed_performance to compare channel-reported vs pixel-reported.
Key fields: event_date, channel, account_id, campaign_id, currency, spend, impressions, clicks, conversion_value.
api_key_info
Section titled “api_key_info”One row identifying the key, its scopes, and attached shops. Also the check stream — a check failure means the key itself is bad.
Downstream notes
Section titled “Downstream notes”- Schema:
triplewhale_<client>_prod.* - All data streams are Append — dedupe latest-per-key downstream
- SQL primary keys match
GROUP BYexactly (wide keys are intentional) - Ratio columns (
pixel_roas,pixel_cpa,ncpa) are formula type — recompute in dbt - Deduplication example:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY order_id ORDER BY _airbyte_extracted_at DESC ) AS rn FROM triplewhale_<client>_prod.orders_with_journeys) WHERE rn = 1Changelog
Section titled “Changelog”| Version | Date | Description |
|---|---|---|
| 1.0.0 | 2026-09 | Initial release with 4 streams: orders_with_journeys, pixel_attributed_performance, ads_performance, api_key_info |
Complete Schema and Summary
Section titled “Complete Schema and Summary”Continue through the Schema and Summary steps to choose streams and confirm the connection. Save and run the first sync.
After a successful sync, Airflow creates an organization-scoped DAG for the pipeline, and dbt models feed downstream analytics.
Related documentation
Section titled “Related documentation”- Data Pipelines overview — Tags-first create flow