Radio promotions, minus the retyping

Every contest, every station, one hub. And it agrees with itself.

Plan promotions, track prize inventory, record winners, schedule liners and imaging, and run remotes — every station in the group, in one hub that agrees with itself.

2
status axes — paused never reads as ended
$600
1099 threshold, flagged automatically
1 link
and the winner types their own paperwork
The Working Parts

What it keeps straight, so nobody has to

A promotions department runs on records — who won what, what it was worth, what is left, what airs when. These cards name the rules that keep those records honest, and the limits that come with them.

Paused is not ended

A promotion's lifecycle is a choice; where today sits against its dates is derived. Pause one mid-flight and it says paused — not ended, which is what single-flag systems tell the jock who then stops plugging a contest that is still running.

One number, however you count it

Every stat on the hub is computed in SQL over the whole table. The headline cards and the lists underneath them cannot disagree, because they are the same query — not a server count sitting over a first-fifty-rows list.

The claimed counter cannot drift

Because it does not exist. What a prize has left is derived from its winner rows every time anyone asks, so inventory is never a second number somebody forgot to decrement — and a forfeited win puts the prize straight back on the shelf.

Prizes know their days

Every prize carries a day-of-week window and an optional date range of its own. A weekday-only gas card never appears in Sunday's show prep, so the overnight jock cannot give away what the sales contract said Monday to Friday.

The winner does the data entry

Award the prize, issue the link. The listener opens it, types their own contact details and postal address, and signs the release — so the record is in the winner's own words and nobody at the station retypes a phone number wrong.

Signed before it is collected

The winner link carries your release text, and the name the listener types is kept verbatim as the signature record, with the moment it was signed. Revoke a link and every later visit is a plain 404 — it never confirms what the URL used to be.

January cannot rewrite itself

A prize's per-unit value is frozen onto the winner row at award time, in integer cents. Reprice the prize in March and January's totals do not move — so each listener's calendar-year figure, and the $600 1099 flag on it, holds still for the bookkeeper.

Eligibility, before the congratulation

Every prize carries a per-winner limit, and a listener's wins are on their record where you award. "You've already won this month" is a thing the screen says before the on-air congratulation, not a thing legal says after.

Liners that read where they air

Live-read copy tied to its promotion and scheduled by date range, with an optional station-specific cut. What a jock sees is what is current — a liner outside its window is not in today's list.

Imaging with six named stages

Needs review, needs voicing, needs producing, final review, needs scheduling, completed. Every promo, sweeper, credit and bumper is at exactly one of them, with the cart number recorded once playout has one — so nothing sits in an unnamed limbo.

The remote on one page

A run sheet for every appearance: venue and address, the contact and their phone, door times, what the street team brings, team notes and the on-air mentions. The van leaves with the whole plan, not with whoever remembers it.

The month in one query

Promotion starts and ends, prize windows and events on one calendar, windowed in the database rather than paginated — so the week you are looking at is the whole week, whatever size the tenant.

Rename a station, it renames everywhere

Stations are rows with a join table, not an id list serialized into a column. "Everything running on the FM" is an indexed query, a callsign change is one edit, and a station that signs off is archived with its history intact.

Your listener database, portable

Every contest builds an audience. Export the listener database as CSV whenever you want it — names, contact details, addresses — because it is your record, not a thing the platform holds hostage.

Read-only seats for the airstaff

Viewers read everything — show prep, liners, what is left on the shelf — and can change nothing. Members and up write. A jock checking prep at 5am cannot archive the contest by mistake.

Who did what, kept

Consequential actions write an audit row — who awarded, who archived, who changed the plan. The activity feed reads the same log, so accountability is not a separate system that could disagree with it.

Nothing silently undeletable

Promotions, prizes, stations and sponsors archive rather than delete, so history keeps its references. And a listener with wins on record cannot be deleted out from under the prize ledger — the product offers archive or anonymise instead of failing mysteriously.

…and a REST API for all of itSee the API
How it works

Three steps, and the first one is optional

  1. 1

    Set up stations and sponsors

    Name the signals and the advertisers behind the prizes. Optional and skippable — a promotion runs fine without either, and you can attach them later.

  2. 2

    Create the promotion, stock the prizes

    Dates, stations, the show-prep notes, then the shelf: quantities, values, per-winner limits and the days each prize may go out the door.

  3. 3

    Award winners — the link does the paperwork

    Pick the prize and the listener; the value freezes itself. Send the winner link and the listener types their own details and signs the release.

For programme directors

Numbers you can repeat in the Monday meeting

A hub that computes every figure over the whole table means the answer you read is the answer, whichever station, whichever market, however big the quarter got.

1

One look across the group

Every station's promotions on one hub and one calendar. What is live, what is paused, what ends this week — per market, without ringing each building.

2

Paused is a decision you can see

Two status axes mean the hub distinguishes a promotion someone stopped from one that ran its course. The difference is exactly the thing a PD needs to ask about.

3

Rankings over everything

Top promotions by awarded value and most-awarded prizes, computed over every row in the period — not over whatever page of the list happened to load.

4

Give the airstaff the keys, not the pen

Viewer seats let every jock read show prep, liners and prize availability without being able to change a record. Access stops being a reason things live on paper.

Start free
For promotions teams

The paperwork does itself, mostly by not existing

Awarding is the daily verb, so it is the shortest path in the product — and the parts that used to mean a clipboard, a release form and a January of spreadsheet archaeology are records the system keeps as you go.

1

Award in seconds

Prize, listener, done. The unit value freezes onto the record at that moment, and the per-winner limit has already been checked against their history.

2

Send the link, skip the retyping

The winner submits their own contact details and address and signs the release on their own phone. What lands in the database is their spelling, not your transcription.

3

Know what is left on the shelf

Low stock and promotions ending with prizes still unclaimed are surfaced on the hub — the ones someone should be giving away harder this week.

4

January is already done

Calendar-year totals per listener, values as they were at award time, the $600 threshold flagged, and a CSV for the bookkeeper. Tax season is an export, not a reconstruction.

A winner link shows the listener their prize, your station group's name and your release text — no other winner, no other record. Revoke it and the address stops existing; every later visit is a 404.

Record your first winner
Pricing

Pay for what's live, not who's logged in

Every plan includes the whole product. What changes is scale: how many promotions may be live at the same time, and how many stations the workspace programs. Nothing is metered and nothing resets monthly.

Free

Free

Run your first contest end to end.

2
live at once
1
station
  • 2 promotions live at once
  • 1 station
  • Prize inventory and winner records
  • Liner and imaging copy
Start free

Starter

$19/month

A single station with a steady promo calendar.

10
live at once
3
stations
  • 10 promotions live at once
  • 3 stations
  • Winner acknowledgment links
  • API access
Choose Starter

Station

Popular
$49/month

A busy station running something every daypart.

25
live at once
8
stations
  • 25 promotions live at once
  • 8 stations
  • Everything in Starter
Choose Station

Group

$129/month

Clusters programming several signals from one desk.

100
live at once
25
stations
  • 100 promotions live at once
  • 25 stations
  • Everything in Station
Choose Group

Network

$349/month

Group-wide promotions across every market.

400
live at once
120
stations
  • 400 promotions live at once
  • 120 stations
  • Everything in Group
Choose Network

Prices in USD. The caps are live counts, not meters: pause or archive a promotion and its slot frees instantly, archive a station and so does its. Nothing accrues, nothing resets on a date, and there is no overage to be surprised by.

No seat pricing on any plan. Invite the whole airstaff — the caps count promotions and stations, never people, and a read-only Viewer seat costs the same as no seat at all: nothing.

No plan on this page carries an uptime commitment, a service-level credit or a support response time. The Terms of Service are what govern.

For developers

One key, REST and MCP

The API reads and writes the same records the console does — promotions, prizes, winners, events. Issue a key from the workspace, keep it in your environment, and wire the promo calendar into whatever already runs your station.

  • Keys are hashed at rest and scoped to what each integration needs.
  • Reads and writes across promotions, prizes, winners and events — the same records the console holds.
  • REST and MCP from one catalogue, so one key drives both.
Get an API key
GET /api/v1/promotions
curl https://promobuddy.radioworkflow.com/api/v1/promotions \
  -H "xi-api-key: $PROMOBUDDY_API_KEY"
Promo Buddy

The next contest is set up in minutes

Run 2 promotions at once on 1 station on the free plan. No card, no sales call, and your records export whenever you want them.