Platform
Margin
The margin Crackle keeps on managed advertising. We send the platform a reduced budget & targets; the customer is billed the grossed-up price. Applies to Google & Facebook campaigns. Locked onto each campaign at launch — changes affect new campaigns only.
Global default
margin_config WHERE tenant_id IS NULL% of customer price
Gross margin on the customer-facing price. 0% = pure pass-through (no markup). Capped at 90%.
Customer with a ₹1,00,000 budget · full delivery
Sent to platform (×0.80)
₹80,000
Crackle margin (20%)
₹20,000
Customer billed
₹1,00,000
Same budget · under-delivery (spends ₹60k)
Platform cost
₹60,000
Crackle margin (held at 20%)
₹15,000
Customer billed (÷0.80)
₹75,000
| Bidding intent | What we send the platform at 20% margin |
|---|---|
| Max conversions | Budget ×0.80 |
| Max conversion value | Budget ×0.80 · target ROAS ÷0.80 (if set) |
| Target CPA | Budget ×0.80 · target CPA ×0.80 |
| Target ROAS | Budget ×0.80 · target ROAS ÷0.80 |
| Limit bid | Budget ×0.80 · bid cap ×0.80 |
Each lever is adjusted so the customer's billed CPA / ROAS / bid lands exactly on the number they entered.
Per-tenant overrides
margin_config WHERE tenant_id = '<tenant>'Tenants without an override inherit the global default (20%). The Effective column is what actually applies to that tenant's new campaigns: the override if set, else the global default.
| Tenant | Override | Effective | |
|---|---|---|---|
| Acme Ads Co. | % |
25.0% +5 vs default | |
| Bharat Media | % |
20.0% inherits default | |
| Chai Labs | % |
0.0% pure pass-through |
Clear an override to remove it — the tenant falls back to the global default. Override inputs are clamped 0–90 (capped at 90%).
Saving emits a customer_events row of type margin_changed. New margins apply to campaigns launched after the change; in-flight campaigns keep the margin snapshotted at their launch.