Swaarm supports two levels of budget control - offer-level and publisher-level. Understanding how they interact is important for setting up campaigns correctly.
Budget types
You can set budgets for any combination of:
Clicks - total clicks forwarded to the advertiser
Impressions - total impressions served
Conversions - total approved conversions
Revenue - total WeGet earned
And at any frequency:
Hourly
Daily
Monthly
Total (lifetime of the offer)
Offer budget vs publisher budget
| Offer budget | Publisher budget |
Scope | Applies to the entire offer across all publishers | Applies to one specific publisher on one offer |
Priority | Higher - offer budget always takes precedence | Lower - only applies if the offer budget hasn't been reached |
Where to set it | Offer settings → Budgets tab
| Offer detail page → Publishers tab → Edit → Budget |
Offer budget - where to set it
Publisher budget - where to set it
ℹ️ Offer budget takes priority. If the offer budget is reached, traffic stops for all publishers - regardless of whether individual publisher budgets still have capacity. If a publisher's budget is reached but the offer budget hasn't, only that publisher's traffic stops.
Hard caps vs Soft caps
Both offer and publisher budgets can be set as Hard or Soft. This controls what happens when the cap is reached.
| Hard cap | Soft cap |
Feed API | Offer disappears from the publisher's feed | Offer stays visible in the publisher's feed |
Clicks | Discarded once budget is reached - not forwarded to the advertiser | Still forwarded to the advertiser |
Conversions | Status set to Rejected - publisher postback not fired | Status set to Approved - publisher postback not fired |
Reported as | Discarded Click / Rejected conversion | Normal click / Approved conversion |
Use when | You must not exceed the budget under any circumstances | You want to keep receiving conversions but stop paying the publisher |
⚠️ Budgets are not guaranteed to be exact. Two scenarios can cause overcap:
Simultaneous clicks - if a large volume of clicks arrives at the same time, some may be forwarded before the system registers the cap as reached
In-flight conversions - clicks sent before the cap was reached can still convert after it. These conversions are assigned with status Pending - publisher postback is not fired
ℹ️ Soft budget counting - soft conversion budgets only count conversions that were actually passed to the publisher (Decision: Passed). Conversions with a failed decision (e.g. blocked by CTIT or Random Evaluation rules) do not count against the soft budget.
ℹ️ If you're using the Feed API and want publishers to see Soft budget status rather than having the offer disappear, configure this in the Feed API Configurator. See Feed API Configurator →
Identifying budget type
In the budget column headers and the Publishers tab, budget type is shown as:
[H] - Hard cap
[S] - Soft cap
Budget timezones
Budgets reset according to the offer-level timezone, not the platform timezone. If your advertiser's budget resets at midnight in their local time, set the offer timezone to match theirs to avoid misalignment.
You can set the budget timezone per offer in two places:
⚠️ Changing the platform (organisation) timezone causes all offer budgets to reset at the next received postback or at midnight in the new timezone - even if they were already partially filled. Conversions received before the reset but counted after may be assigned Pending status. To avoid this, adjust offer-level timezones before changing the platform timezone.





