# LIV Derma Institute: Meta ads export for audit

Cosmetic clinic in Almere (NL). Window: **5 Sep 2026 - 4 Oct 2026** (30 days; 4 Oct is a partial day, pulled mid-afternoon Amsterdam time). Source: Meta Marketing API v21, read-only. Generated 4 Oct 2026.

## Accounts
| Account | Currency | Notes |
|---|---|---|
| LIV DERMA 3 (act_910272818481998) | EUR | The live account. Real campaigns start **21 Sep 2026** (3 CBO campaigns, 8 ad sets). Before that it held two weekend "Botox Image Ad" campaigns and a paused "Medical Weight Loss" campaign. |
| LIV Derma 2 (act_821913690912024) | USD | Old account. Ran until 20 Sep, fully paused 21 Sep. Kept for history (video vs static results). Different pixel (3409675132527380). |

Spend is in each account's own currency; never add EUR and USD.

## Files
1. `1_ads_performance_30d_totals.csv` - one row per ad, 30-day totals, with quality/engagement/conversion rankings.
2. `2_ads_performance_daily.csv` - ad x day.
3. `3_creatives_and_copy.csv` - headline, primary text (⏎ = line break), description, link, CTA, image hashes, video ids, url_tags, which Advantage+ enhancements are opted out, review feedback. `image_files` is filled only where the file name is known; the hash identifies the image in the Meta library.
4. `4_adset_targeting.csv` - age, gender (blank = all), geography and radius, placements, Advantage audience flag, optimisation goal, bid strategy, learning stage.
5. `5_budgets.csv` - campaign and ad set budgets, spend caps, remaining budget, per-ad-set minimum/maximum spend targets. Amounts in account currency (major units).
6. `6_conversion_settings.csv` - per-ad-set optimisation event (promoted_object, attribution_spec), custom conversions with their rules, pixels with settings.
7. `7_breakdowns_30d.csv` - ad set x age / gender / placement / device.
8. `8_change_log_30d.csv` - Meta's activity log (budget, status, creative edits) for both accounts.
9. `9_pixel_events_daily_raw.csv` - raw site-wide pixel events per day. Not ad-attributed; one booking can fire the event more than once, so raw counts can be about double the real number.
`raw/` holds the unmodified API responses. `reconciliation.json` shows that ad-level, daily and account-level spend and bookings agree exactly.

## How "bookings" is defined
- LIV DERMA 3: custom conversion **"Confirmed Bookings" (id 3359466184256964)** on pixel/dataset 2600879527003377 ("Dataset3"), rule = event "Appointment Booking" on livdermainstitute.com. A booking is a genuine confirmed appointment (the confirmation page fires only after the clinic's booking system, Ekis, redirects back). The conversion was created 21 Sep 2026 16:47 CEST, so days before show 0 by construction.
- LIV Derma 2: the pixel event "Appointment Booking" (`offsite_conversion.fb_pixel_custom`).
- Columns: `bookings_total` = 7-day-click + 1-day-view attribution; `bookings_7d_click` and `bookings_1d_view` split it. `cost_per_booking` = spend / bookings_total. `all_actions_json` keeps every raw action Meta returned.

## Headline numbers (from file 2)
| | Spend | Link clicks | Landing page views | Bookings (click / view) |
|---|---|---|---|---|
| LIV DERMA 3, 5 Sep-4 Oct | EUR 1,464.00 | 1,379 | 1,124 | 34 (22 / 12) |
| LIV DERMA 3, live period 21 Sep-4 Oct | EUR 1,326.80 | 1,195 | 1,044 | 34 (22 / 12) |
| LIV Derma 2, 5 Sep-4 Oct | USD 1,503.91 | 1,416 | 1,213 | 41 (27 / 16) |

## Caveats an auditor should know
- Meta credits only a share of the clinic's real online bookings (earlier analysis: about 40-45%); phone and WhatsApp bookings were not tracked until early Oct 2026.
- 24-26 Sep 2026 shows an unexplained all-source booking spike (14 of LIV DERMA 3's 34 credited bookings fell on those 3 days); including it makes the average cost per booking about 30% lower than without it.
- About a third of credited bookings are view-through only. Judge click-attributed numbers first.
- Total budget limit for the engagement is EUR 3,000 for 21 Sep-20 Oct 2026; spend caps per campaign are in file 5.
- Dutch advertising code (CCBA / Reclamecode) applies to every ad: mandatory warning sentence with eye logo, no time pressure, price must not dominate, no before/after, no prescription-medicine names in Meta ads. Compliance of individual ads is not scored in this export.
- LIV DERMA 3 ran many edits in the first two weeks (see file 8); the account has eight ad sets sharing about 2-3 bookings per day, so ad sets stay in learning.

## Not included
Google Ads (account 101-371-3909, read separately), Google Tag Manager, the Ekis booking-system export (appointments, revenue, no-shows), Page/Instagram organic insights, server-side events.

Regenerate: `python3 ads/export-audit-pack.py YYYY-MM-DD`.
