Agentic campaigns
Agentic campaigns
You write a goal. Freebuff turns it into a skill its coding agent can run, offers it to developers mid-task, implements your product in their project when they accept, and tells you how many of those runs converted.
Who can run one
How it works
You write an agent goal.
What a developer should end up with: a working feature, not an installed package.Freebuff builds a skill from it.
A reviewed, versioned procedure the coding agent follows, made from your goal and your website. You never write the prompt.Developers see a proposal while they work.
Only when the task fits. Accept starts the run, and is what you pay for.The agent implements your product in their project.
The run is assessed against your goal.
A conversion is a run the agent judged to have met it, with evidence. Never charged.
Set one up
Once your agreement is in place: New campaign → Agentic ads. Four things, then submit.
| Field | Notes |
|---|---|
| Agent goal | Drafted for you from your landing page; edit freely. Up to 1,500 characters. Say where the product helps, what a useful result is, and any docs or constraints. |
| One ad | Header and subheader, generated and editable. Shown word for word. |
| Budget and countries | Daily budget (default $100) buys whole accepts at the campaign’s CPC, billed against your monthly invoice. All countries by default. |
| Submit for review | Freebuff builds the skill, reviews it, and the campaign goes live on approval. |
Writing a goal that converts
- Where it helps. The capabilities, and the developer tasks they fit.
- A useful result. Saving data, sending an email, a deployed endpoint. Not “install the SDK”.
- Boundaries and references. Docs links, setup requirements, what to preserve.
What you see
The campaign table shows Displayed, Accepted and Conversions by default. Columns adds the rest.
| Column | Meaning |
|---|---|
| Displayed | Proposals confirmed shown in the developer’s app. |
| Accepted | Proposals the developer accepted. Accept starts the sponsored run and is the billable event. |
| Conversions | Runs the agent assessed as meeting your goal, plus any events you report yourself. |
| Committed | Runs that saved their changes in a commit. |
| Delivered in place | Runs that finished directly in the working folder, no branch or PR. |
| PR opened | Runs that opened a pull request. |
| Merged | Pull requests confirmed merged. |
| API key issued | Runs whose diff shows verified API-key setup. |
| MCP installed | Runs whose diff shows a verified MCP integration. |
| Acceptance rate | Accepted ÷ Displayed. |
Counts follow the day a proposal was first offered, so a later PR or conversion lands on that day. Breakdowns by country and tier are on the campaign page.
Conversions
After a run, the agent assesses whether your goal was met and the developer is asked to confirm. The campaign page lists each accepted run under Agent conversion assessments:
| Column | Values |
|---|---|
| Goal | The goal and its version at Accept. |
| User answer | confirmed, declined, unknown |
| Assessment | satisfied, inconclusive, not assessed, with a reason. |
| Evidence | What the agent observed in the browser or the installed project, per criterion, plus any events you reported. |
| Lifecycle | pending, completed, interrupted, timed out |
Only satisfied counts as a conversion. An inconclusive run is not one. No run text, developer identity or exact time is shown.
Your own events
Optional. If the skill sends developers to a signup link on your site, that link carries a signed bfcid. Keep it with the account and report what only you can see.
/api/ads/agentic/postbackthe bfcid, no keyPOST https://freebuff.com/api/ads/agentic/postback
Content-Type: application/json
{
"conversionToken": "<the bfcid the run carried to your site>",
"eventType": "account_created",
"eventId": "account_created:<stable account id>",
"occurredAt": "2026-10-24T20:15:00Z"
}| Field | Type | Description |
|---|---|---|
conversionTokenrequired | string | The exact bfcid. |
eventTyperequired | string | account_created. Product-use events are retired; the run assessment covers them. |
eventIdrequired | string | Your stable id, namespaced by type. Same id again is a free replay. |
occurredAtrequired | string | ISO 8601. Within 30 days of Accept. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | { "accepted": true } | Recorded; deduped: true on a replay. |
| 400 | invalid_request | Malformed. Fix, do not retry. |
| 401 | invalid_conversion_token | The bfcid is missing, damaged or not ours. Do not retry. |
| 429 | rate_limited | 240 per token per hour. |