Converge BigQuery order lineage: V1 vs. V2
Document Version: 1.1
Date: 2026-08-18
Client Focus: UpWellness (upwellness-uw) & Converge BigQuery Connectors
Author: LaunchPad Data Engineering Team
1. Executive Summary
In LaunchPad V1, Converge data was ingested as pre-aggregated ad-day summaries, meaning individual order IDs, customer transaction properties, and purchase timestamps were not captured or stored.
In LaunchPad V2, we have upgraded the Converge integration from daily aggregate buckets to a true 1-to-1 individual order event stream:
- Every customer checkout event from BigQuery (
vw_last_touch_1d) is stored as a distinct order record with its uniquesale_id, exact transaction amount, and full JSON properties. - Each order is resolved against UpWellness's Meta and Google ad accounts to map the exact Ad ID, Ad Set ID, and Campaign ID.
- The raw order events land simultaneously in
marketing_sales(for complete commerce transaction lineage) andmarketing_attribution_events(for real-time dashboard ROAS and CPA reporting).
2. V1 vs. V2 Architecture Comparison
V1 CONVERGE PIPELINE (Aggregated / Lossy):
BigQuery (daily_ad_attribution)
──> Aggregated sums per ad-day
──> insights.crm_purchase & crm_revenue updated
❌ No individual order IDs
❌ No transaction properties or SKUs
❌ No multi-account direct attribution mapping
V2 CONVERGE PIPELINE (Individual Order Event Stream):
BigQuery (vw_last_touch_1d event stream)
──> 1 Row per unique customer checkout (sale_id = order_id)
├──> marketing_sales (Lossless raw sales ledger + normalized transaction identity)
└──> marketing_attribution_events (Full 4-tier ad hierarchy)
✅ Exact conversion ID, profile identity, timestamp, revenue, and full JSON payload
✅ 100% matched across 3,559 ads, ad sets, campaigns, accounts
✅ Zero unresolved alarms
3. Detailed Technical Deep Dive
A. How V1 Handled Converge
In V1 (launchpad-old-v1/app/Services/ConvergeBigQueryOnDemandService.php), V1 executed daily aggregate queries and stamped the resulting sums directly onto ad rows:
crm_purchase = SUM(conversions)crm_revenue = SUM(revenue)- Grain:
daily_aggregate(1 summary number per ad per calendar day). - Result: Impossible to audit individual customer receipts or determine which specific products were purchased.
B. How V2 Ingests at Order Grain
In V2 (src/lib/marketing/platforms/bigquery_converge.ts), LaunchPad connects directly to the client's BigQuery dataset and extracts the raw event stream:
SELECT
conversion_date AS date,
CAST(COALESCE(ad_id, '') AS STRING) AS ad_id,
CAST(COALESCE(campaign_id, '') AS STRING) AS campaign_id,
CAST(COALESCE(adset_id, '') AS STRING) AS adset_id,
1.0 AS conversions,
COALESCE(
SAFE_CAST(JSON_VALUE(conversion_properties, '$.total_price') AS FLOAT64),
SAFE_CAST(JSON_VALUE(conversion_properties, '$.shop_total_price') AS FLOAT64),
0
) AS revenue,
COALESCE(
JSON_VALUE(conversion_properties, '$.id'),
JSON_VALUE(conversion_properties, '$.order_id'),
conversion_id
) AS sale_id,
CAST(conversion_id AS STRING) AS transaction_id,
CAST(profile_id AS STRING) AS customer_id,
CAST(conversion_timestamp AS STRING) AS transaction_at,
TO_JSON_STRING(conversion_properties) AS raw_payload_json
FROM `upwconverge.upw_converge.vw_last_touch_1d`
WHERE conversion_date >= @since
AND (event_name IS NULL OR LOWER(TRIM(event_name)) = 'placed order')
4. Live Production Verification Data (UpWellness)
The normalized ledger uses conversion_id as txn_id, a hash of profile_id
as customer_identity_sha, and conversion_timestamp as the trustworthy
transaction instant. Initial and upsell classification follows the fixed
customer-anchored 24-hour rule documented in
upsell-and-line-item-tracking-architecture.md; Converge tags remain audit
metadata and do not override that historical definition.
The following values are a dated 2026-08-18 snapshot, not a current health claim. Ingested-order and attributed-order populations have different windows and denominators; rerun the authorized queries before reuse.
| Metric Dimension | Live Production Value | Status |
|---|---|---|
Total Ingested Orders (marketing_sales) | 5,038 orders ($605,556.89) | Historical snapshot |
| Attributed Orders (30-Day Window) | 3,596 orders ($403,183.54) | Different denominator/window |
| Hierarchy Resolution | 3,559 ads • 3,555 ad sets • 3,559 campaigns • 3,559 accounts | Historical snapshot |
| Attribution Match Rate | 100.0% | Historical query result |
| Unresolved Alarms | 0 | Historical UI snapshot |
5. Client Review Talking Points
When walking through this update with UpWellness or other Converge clients, emphasize the following key benefits:
-
Transaction-Level Auditability:
"Unlike our legacy reporting system which only received daily summary numbers from BigQuery, LaunchPad V2 now stores every individual order ID, timestamp, and transaction property. You can now audit exact orders directly from your dashboard."
-
Defined Cost Per Order (CPA): explain the selected conversion identity, attribution weights, window, and denominator. Do not call CPA or AOV exact without reconciling the requested population and multi-item/upsell rules.
-
Multi-account resolution: describe the source-reviewed mapping mechanics; verify current bindings and unresolved coverage before quoting account counts.
6. Verification Checklist for Client Review
- BigQuery event stream (
vw_last_touch_1d) validated for live orders. - Raw order stream mirrored into
marketing_sales(5,038 orders / $605.5K). - Credited conversions mapped to 4-tier ad hierarchy in
marketing_attribution_events. - Zero unresolved alarms on
/admin/sync-health. - All 1,187 automated unit tests and type checks passing clean.