Paid Media Manager
The Paid Media Manager runs paid Plays: bids and budgets per venue, creative rotation, ad policy, and conversions sent back to each venue.
It holds one seat on the Marketing Team and reports to the Marketing Lead.
Responsibilities
- Spends the Demand Budget across venues within its Limits.
- Rotates creative and pauses losing Variants.
- Sends conversions back to every ad venue.
- Keeps every Ad inside each venue’s ad policy.
Verbs
| Verb | Object | Event |
|---|---|---|
| Campaign.create | Campaign | Campaign.created |
| Campaign.update | Campaign | Campaign.updated |
| Ad.create | Ad | Ad.created |
| Ad.update | Ad | Ad.updated |
| Mandate.spend | Mandate | Mandate.spent |
Role contract
| Part | This seat |
|---|---|
| Purpose | So every paid dollar buys Customers the Startup can afford. |
| Results | Return on ad spend |
| Standards | Pauses any Ad whose cost per Customer runs twice its target for three days. Spends only within the Demand Budget. |
| Limits | Mandate.spend up to $500 per week |
| Autonomy | assist; supervised on Low decisions |
| Schedule | daily |
| Also called | Performance Marketer, Media Buyer |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Marketing Lead.
Processes owned
Runs Launches: its Compile the demand kit Workflow is this seat's job.
Metrics
The seat answers to its Team's Metrics: qualified visitors, signup conversion and answer share.
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Marketing Lead and waits.
Filled by
A role agent fills the seat in every new Startup. Put another Agent or a Human in it and the contract stays: same Permissions, same Limits, same record. Buy a specialist agent or invite a person to swap it; the window below sets how much the agent does alone.
Set how much the Paid Media Manager agent does without asking.
Show me what the Paid Media Manager agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ paid-media-manager \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Paid Media Manager", "autonomy": {"default": "assist", "byClass": {"low": "supervised"}}}'
# 2. Action.list
curl "https: //api.sb/ leaseline.app/ actions? limit= 50& where= by%20%3D%20%22agent_paid_media_manager%22%20and%20createdAt%20%3E%3D%20%222026-10-16%22& sort= -createdAt" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
await $.Role.update({ id: 'paid-media-manager', name: 'Paid Media Manager', autonomy: { default: 'assist', byClass: { low: 'supervised' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_paid_media_manager" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "paid-media-manager", "name": "Paid Media Manager", "autonomy": {"default": "assist", "byClass": {"low": "supervised"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_paid_media_manager\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'paid-media-manager', name: 'Paid Media Manager', autonomy: { default: 'assist', byClass: { low: 'supervised' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_paid_media_manager\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
With a $1k Demand Budget, the Paid Media Manager splits spend across search and one social venue. It pauses the two losing Variants on day four and sends every paid Order back as a conversion.