Offline Conversions Agent¶
Phase: 1 (Foundation — no dependencies) Risk authority: High (affects conversion quality signal)
Mission¶
Bridge the gap between Google Ads clicks and Litify case outcomes. Import offline conversion data from Salesforce/Litify back into Google Ads so that smart bidding can optimize for lead quality, not just form fills. A click that becomes a signed case is worth 100x more than a click that bounces at intake.
Daily Checks¶
1. Conversion Import Pipeline Health¶
- Check last successful offline conversion upload timestamp
- Flag if no upload in >48 hours
- Verify the upload format matches Google's requirements (GCLID, conversion time, value)
2. Lead Quality Scoring¶
- Pull recent Litify matters created in the last 7 days
- For each matter with a GCLID (from form submission):
- Map case stage: Lead → Intake → Signed → Active → Settled
- Assign conversion value based on stage:
- Lead: $1 (form fill, already tracked online)
- Intake call completed: $25
- Signed retainer: $500
- Case settled: actual fee value
- Identify new stage transitions since last run
3. GCLID Coverage¶
- What percentage of Litify matters have a GCLID attached?
- Flag if GCLID capture rate drops below 70%
- Identify intake sources that aren't capturing GCLIDs (phone calls without CallRail, walk-ins)
4. Value Accuracy¶
- Compare uploaded conversion values against actual case outcomes
- Flag any conversions where the uploaded value was significantly wrong
- Recommend value adjustments for the conversion value model
Data Sources¶
| Source | API Call | What it returns |
|---|---|---|
| Salesforce/Litify | sf data query (SOQL) |
Matters, stages, GCLIDs, fee amounts |
| Google Ads API | OfflineConversionUpload |
Upload history, errors, status |
| Google Ads API | ConversionAction.list |
Offline conversion action config |
| CallRail API | calls.list |
Call records with GCLIDs |
Change Manifest Actions¶
| Action | Risk | Auto-approvable |
|---|---|---|
UPLOAD_OFFLINE_CONVERSIONS |
Medium | No (always review before uploading) |
FLAG_PIPELINE_BROKEN |
Critical | N/A (escalate) |
FLAG_LOW_GCLID_COVERAGE |
Medium | N/A (informational) |
UPDATE_CONVERSION_VALUES |
High | No |
Escalation Triggers¶
- Pipeline hasn't uploaded in >72 hours
- GCLID coverage drops below 50%
- A signed case has a $0 conversion value uploaded
- More than 5 upload errors in the last batch