The data prep step is done. Four ready-to-upload CSVs are sitting in /Users/mo/Downloads/For FB Audiences/output/. This doc walks through what's in them, the Ads Manager upload sequence, and what to do if match rates underperform.
The script prep_audience_csvs.py read both PII files Anthony Kaylor delivered, filtered to Military.com Auto + Home campaigns only (using the campaign-ID mapping from his email), renamed columns to Meta's customer-list spec, and deduplicated on email. Result: 4 clean CSVs in /Users/mo/Downloads/For FB Audiences/output/ ready for direct upload.
| File | Use | Rows | Source window |
|---|---|---|---|
mil_combined_seed_90d.csv |
Fresh seed for general LAL ladder (warm layer) | 112,264 | Mar-May 2026, Auto + Home |
mil_auto_seed_90d.csv |
Auto-specific LAL ladder for Auto ALC | 91,871 | Mar-May 2026, Auto only |
mil_home_seed_90d.csv |
Home-specific LAL ladder for Home ALC | 21,777 | Mar-May 2026, Home only |
mil_suppression_all_7mo.csv |
Existing-customer suppression list | 195,137 | Nov 2025 - May 2026, all Mil.com |
Total time: ~60 minutes (mostly waiting for Meta to process).
Business Manager → Audiences → Create Audience → Custom Audience → Customer List → Use a list of customers → Next
Custom_Recruiting-Leads_06-11-2026_Fresh/Users/mo/Downloads/For FB Audiences/output/mil_combined_seed_90d.csvemail, fn, ln, etc.). If it asks for manual mapping, confirm each maps to the matching Customer Information field.Meta begins processing. Audience size will show "Calculating..." for 30-60 minutes.
Same flow as Step 1.
Custom_Auto-Leads_06-11-2026_Fresh/Users/mo/Downloads/For FB Audiences/output/mil_auto_seed_90d.csvCustom_Home-Leads_06-11-2026_Fresh/Users/mo/Downloads/For FB Audiences/output/mil_home_seed_90d.csvSame flow.
Suppression_Existing-Customers_All-Time_06-11-2026/Users/mo/Downloads/For FB Audiences/output/mil_suppression_all_7mo.csvGo check on Auto ALC's underutilization in the meantime, or build the Warm Layer ad set (it doesn't depend on these customer-list uploads — see the Audience Structure Spec).
Once each audience shows "Audience size" instead of "Calculating...", note the size. Match rate is approximate:
Match rate ≈ (Audience size shown by Meta) / (Rows you uploaded)
| Audience | Rows uploaded | Target Audience size (60% match) | Target (75% match) |
|---|---|---|---|
| Combined seed | 112,264 | ≥ 67,000 | ≥ 84,000 |
| Auto seed | 91,871 | ≥ 55,000 | ≥ 68,000 |
| Home seed | 21,777 | ≥ 13,000 | ≥ 16,000 |
| Suppression | 195,137 | ≥ 117,000 | ≥ 146,000 |
If match rate < 60% on any audience: email Anthony Kaylor accepting his phone-number offer. Draft below.
If 60-80% (likely outcome): proceed to build LAL audiences.
If 80%+: even better — proceed normally.
Per the Audience Structure Spec, Option C (hybrid: Combined LAL for Warm Layer, vertical-specific LALs for ALC) is the recommended approach.
Audiences → Create → Lookalike → Source: Custom_Recruiting-Leads_06-11-2026_Fresh
Build three at once:
- LAL_US_1pct_Custom-Recruiting-Leads_06-11-2026_Fresh (size 1%, ~2M people)
- LAL_US_3pct_Custom-Recruiting-Leads_06-11-2026_Fresh (size 3%, ~6M people)
- LAL_US_5pct_Custom-Recruiting-Leads_06-11-2026_Fresh (size 5%, ~10M people)
Location: US. Click Create.
Source: Custom_Auto-Leads_06-11-2026_Fresh
LAL_US_1pct_Auto-Leads_06-11-2026_FreshLAL_US_3pct_Auto-Leads_06-11-2026_FreshLAL_US_5pct_Auto-Leads_06-11-2026_FreshSource: Custom_Home-Leads_06-11-2026_Fresh
LAL_US_1pct_Home-Leads_06-11-2026_FreshLAL_US_3pct_Home-Leads_06-11-2026_FreshLAL_US_5pct_Home-Leads_06-11-2026_FreshAll LAL builds process in 5-15 minutes typically.
The Audience Structure Spec said "use new LAL ladder in Auto ALC and Home ALC." With vertical-specific LALs now available, use this assignment instead:
| Campaign | Ad Set | Include | Exclude |
|---|---|---|---|
| Auto BAU | Broad (existing — modify) | (no custom audience — broad targeting + Advantage+ ON) | Suppression list |
| Auto BAU | Custom (existing — modify) | Custom_Recruiting-Leads_06-11-2026_Fresh (combined seed) |
Suppression list |
| Auto BAU | NEW Warm Layer | 4 page-engagement audiences (FB Likers + Engagers + IG Followers + Engagers) | Suppression list |
| Auto Max Val | Broad (modify) | (broad + Advantage+) | Suppression list |
| Auto ALC | Broad 2.O (modify) | Auto-specific LALs: LAL_US_1pct_Auto-Leads_06-11-2026_Fresh + 3% + 5% |
Suppression list |
| Home BAU | Broad (modify) | (broad + Advantage+) | Suppression list |
| Home BAU | Custom (modify) | Custom_Recruiting-Leads_06-11-2026_Fresh |
Suppression list |
| Home BAU | Home Insurance (existing) | (keep as is, add suppression) | Suppression list |
| Home BAU | NEW Warm Layer | 4 page-engagement audiences | Suppression list |
| Home Max Val | Broad (modify) | (broad + Advantage+) | Suppression list |
| Home ALC | Broad (modify) | Home-specific LALs: LAL_US_1pct_Home-Leads_06-11-2026_Fresh + 3% + 5% |
Suppression list |
Plus the Auto ALC overlap fix from the Audience Structure Spec: Auto ALC's targeting must have Detailed Targeting Expansion OFF and Advantage+ Audience OFF. Auto BAU has both ON. This makes the two campaigns structurally distinct so Meta no longer self-limits.
Once new LAL ladders are deploying at positive ROAS for 3 days:
Lookalike (US, 1%) - Custom Audience_08-05-2025
- Lookalike (US, 3%) - Custom_Recruiting-Leads_08-25
- Lookalike (US, 5%) - Custom_Recruiting-Leads_08-05-2025Custom_Recruiting-Leads_08-05-2025Don't delete before the new structure has been stable for 72 hours — rolling back is harder once the source data is gone.
Anthony Kaylor's delivery only includes ACCEPTED + SOLD leads. The Audience Structure Spec also calls for a 30-day form-submitter cooldown — all users who hit the quote form, regardless of QW outcome. This data lives in FunnelFlux / Iron Corp's funnel database, not in QW.
Email draft for Lauren:
Lauren — for the audience cleanup I'm doing in Ads Manager, I have the QW accepted/sold leads (Anthony Kaylor sent those). I'm also looking to build a 30-day form-submitter suppression list — all users who hit the quote form in the last 30 days, whether or not they ended up accepted by QW.
Is that data accessible from FunnelFlux or wherever your funnel submission events land? Same format as Anthony's exports would be ideal (email + fn + ln + zip + dob + state + country + gender, raw — Meta auto-hashes on upload). Last 30 days rolling window. Want to use this to give recent submitters a cooldown before retargeting them again — prevents wasting impressions on users who just submitted.
If easier I can pull it myself once you point me at the right access. Thanks!
Email draft for Anthony Kaylor (only send if first match rate comes in below 60%):
Hey Anthony — thanks again for the PII exports. The combined seed matched at [X]% which is below the 60% threshold Meta uses for confident audience targeting. Want to take you up on your offer to pull phone numbers from QW and re-export — based on Meta's docs that should lift match rates by 10-15% which would put us comfortably in the deploy-confidently range.
Same campaign ID filters as last time (Auto: C20188, C32405, C32535, C32533, C31885, C31476, C32381, C31701; Home: C20259, C32454, C31886, C31633). Just add a phone column to the existing schema.
No urgency — first match rate is workable for the immediate build, but the phone-augmented version would help us scale the LAL ladder more confidently. Thanks!
After this build is live, set a calendar reminder to ask Anthony Kaylor for a fresh export every 30 days. Re-run the prep script, re-upload to Meta (Meta's UI has an "Update audience" flow that preserves the audience ID — just replace the data behind it).
Lives at /Users/mo/Desktop/military.com/deliverables/audit_2026-06-04/prep_audience_csvs.py.
Re-run anytime by running:
python3 /Users/mo/Desktop/military.com/deliverables/audit_2026-06-04/prep_audience_csvs.py
It auto-creates /Users/mo/Downloads/For FB Audiences/output/ if it doesn't exist and overwrites any prior CSVs.
To use it for the next monthly refresh:
1. Drop the new file into /Users/mo/Downloads/For FB Audiences/ (same naming convention or update the script's MAR_MAY / NOV_FEB constants)
2. Re-run the script
3. Re-upload the resulting CSVs to Meta
The audience build is working when:
If Auto ALC utilization doesn't move within 4 days of the build, the constraint isn't audience overlap — investigate other gating factors (bid strategy, optimization event volume, learning phase).