Skip to content
Dashboard

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).

  • 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:
ScopeNeeded by
Pixel Attribution: Readorders_with_journeys
Data Out (may be plan-gated)pixel_attributed_performance, ads_performance

Follow the shared Create a pipeline steps until the source catalogue appears, then select Triple Whale Attribution.

On the Source step, configure the connector:

FieldPurpose
Schedule TypeHow the pipeline runs — typically Scheduled
Sync FrequencyHow often Airbyte syncs (for example, Every 24 hours)
Source NameName for this pipeline — used in the Athena schema <SOURCE_NAME>_<ENV>

Every request carries x-api-key: <key>.

FieldTypeRequiredDefaultDescription
api_keysecret stringYes—Triple Whale API key. Needs Pixel Attribution: Read; SQL streams may need Data Out.
shopstringYes—Shop domain (e.g. example.myshopify.com). Sent as shop on attribution and shopId on SQL.
start_datestringYes—Earliest date to pull (YYYY-MM-DD). Attribution timestamps use UTC.
end_datestringNoTodayLeave blank for scheduled connections.
lookback_daysintegerNo7Rewind before the stored cursor. Journeys keep resolving, firstClick can change, and ad platforms restate spend.
page_sizeintegerNo100API max for orders. Larger values are rejected.
order_step_daysintegerNo7Slice width for orders_with_journeys. The stream paginates, so this affects request shape only.
currencystringNoUSDCurrency for the SQL-backed streams.
exclude_journey_databooleanNofalseLeave false. Set true to drop journey[] and keep only firstClick.
base_urlstringNohttps://api.triplewhale.com/api/v2Override only for a dedicated host.
  • Incremental Sync — Append (orders_with_journeys, pixel_attributed_performance, ads_performance)
  • Full Refresh (api_key_info)
StreamEndpointMethodCursorSync Mode
orders_with_journeys/attribution/get-orders-with-journeys-v2POSTcreated_atIncremental
pixel_attributed_performance/orcabase/api/sql (pixel_joined_tvf)POSTevent_dateIncremental
ads_performance/orcabase/api/sql (ads_table)POSTevent_dateIncremental
api_key_info/users/api-keys/meGET—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.

One row identifying the key, its scopes, and attached shops. Also the check stream — a check failure means the key itself is bad.

  • Schema: triplewhale_<client>_prod.*
  • All data streams are Append — dedupe latest-per-key downstream
  • SQL primary keys match GROUP BY exactly (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 = 1
VersionDateDescription
1.0.02026-09Initial release with 4 streams: orders_with_journeys, pixel_attributed_performance, ads_performance, api_key_info

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.