Senior Data Engineer for BigQuery Marketing Spine + Cloudflare Worker Integration
Worldwide
I am seeking a senior data engineer to complete a unified marketing + intake data platform for my law firm. The system is already partially built: a Cloudflare Worker (JavaScript/ESM) acts as an API gateway to Google Ads, GA4, BigQuery, Gmail, Drive, Calendar, and Clio. BigQuery is the canonical analytics store.
Your job is to:
Harden and complete the data spine (Ads → GA4 → Contacts → Outcomes → Call logs).
Build clean, reliable daily fact tables in BigQuery.
Set up BigQuery ML models for lead-retention prediction.
Add simple API endpoints (or BigQuery queries) that my existing Cloudflare Worker can call.
Ensure everything is idempotent, tested, and production-ready.
EXISTING INFRASTRUCTURE YOU WILL BUILD ON
Cloudflare Worker already set up with working routes for:
/bigquery/query, /bigquery/tables
/ads/* including /ads/backfill
/ga4/*
/nl (natural-language analytics)
BigQuery dataset: friscia_law_live_data
contacts_clean_v1 (validated)
case_outcomes_v1 (retained vs not-retained)
GA4 export dataset
Ads data is partially implemented
A ChatGPT-based internal assistant consumes the Worker API. No changes needed here — just maintain endpoint compatibility.
SCOPE OF WORK
1. Vonage Call Logs → BigQuery
Create call_logs_raw_vonage and call_logs_enriched.
Normalize phone numbers and join to contacts.
Idempotent ingestion (daily + historical backfill).
2. Ads + GA4 Daily Fact Tables
Confirm or correct Ads history ingestion via /ads/backfill.
Build ads_daily_v1 (date, campaign, cost, clicks, impressions, conversions).
Build ga4_daily_v1 from GA4 export (sessions, conversions).
Build ads_ga4_daily_v1 joined on date/campaign.
3. Contacts + Outcomes Aggregates
Build contacts_daily_v1 keyed by date + source bucket (ads / gmb / referral / other).
Join against case_outcomes_v1.
4. Marketing Daily Spine
Build marketing_daily_spine_v1 with:
Ads metrics
GA4 metrics
Contacts + retained counts
This is the primary analytics table.
5. BigQuery ML Model (Lead Propensity)
Label: outcome_type = retained / not_retained.
Features from contacts, enriched call logs, GA4 channels, etc.
Deliver:
CREATE MODEL SQL
ML.EVALUATE results
A view such as lead_retention_scores_v1 using ML.PREDICT.
6. Cloudflare Worker Compatibility
Add minimal endpoints so the Worker can fetch daily metrics and ML predictions.
No redesign of the Worker is needed.
REQUIREMENTS
Must have:
Strong Google BigQuery + SQL experience
Proven ETL/data-pipeline experience
Experience with Google Ads API + GAQL
Experience with GA4 BigQuery export
Experience with Cloudflare Workers or serverless APIs
Experience with ML in BigQuery (LOGISTIC_REG or BOOSTED_TREE preferred)
Ability to produce production-quality schemas, views, and code
Ability to document assumptions & data logic clearly
Nice to have:
Experience with law firm CRM/intake systems
Experience with marketing attribution modeling
Experience with data-quality monitoring
Prior experience with Cloudflare Workers
DELIVERABLES
Working BigQuery tables/views:
call_logs_raw_vonage, call_logs_enriched
ads_daily_v1, ga4_daily_v1, ads_ga4_daily_v1
contacts_daily_v1
marketing_daily_spine_v1
BigQuery ML model + evaluation + prediction views
Ingestion jobs + backfill scripts
Minimal API endpoints or scripts compatible with my Worker
Documentation (README + schema notes)
WORK STYLE
Independent contributor comfortable working with an existing codebase.
Must communicate clearly and document details.
Must understand how to test ETL and confirm counts vs GA4/Ads UI.
SCREENING QUESTIONS
Please answer these with your application:
Describe a recent project where you built a data spine combining Ads + GA4 + CRM + call logs.
Do you have hands-on experience with BigQuery ML? Please provide examples.
Describe how you would design an idempotent ingestion job for daily call logs.
Do you have experience with Cloudflare Workers or similar serverless gateways?
What is your experience with GA4 export and matching campaigns across Ads and GA4?
- Less than 30 hrs/weekHourly
- 1-3 monthsDuration
- ExpertExperience Level
$40.00
-
$80.00
Hourly- Remote Job
- Complex projectProject Type
Skills and Expertise
Activity on this job
- Proposals:15 to 20
- Last viewed by client:yesterday
- Interviewing:3
- Invites sent:0
- Unanswered invites:0
About the client
- United StatesNewark1:50 PM
- $35 total spent1 hire, 1 active
- Mid-sized company (10-99 people)
Explore similar jobs on Upwork
How it works
Create your free profileHighlight your skills and experience, show your portfolio, and set your ideal pay rate.
Work the way you wantApply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
Get paid securelyFrom contract to payment, we help you work safely and get paid securely.
About Upwork
- 4.9/5(Average rating of clients by professionals)
- G2 2021#1 freelance platform
- 49,000+Signed contract every week
- $2.3BFreelancers earned on Upwork in 2020
Find the best freelance jobs
Growing your career is as easy as creating a free profile and finding work like this that fits your skills.
Trusted by