Sponsorship desk for every newsletter ad you have sold

Track every ad placement from pitched to paid on one board, show sponsors what their issue actually did, and raise the invoice without leaving the app.

App
beehiivStripeMarketingFinanceData Sync
PromptCreate

Build me a sponsorship desk app for my newsletter where I manage every ad placement I have sold, from the moment I pitch it to the moment the money lands. I sell ads in my beehiiv newsletter and bill sponsors through Stripe, and right now this all lives in a spreadsheet that breaks once I have more than about ten active deals.

Important: beehiiv has no ad network, sponsorship, boost, or referral operations in its catalog, so the app itself must own and persist the placement records. Do not try to read or write sponsorship data in beehiiv. Each placement record is stored by the app and linked to a beehiiv post by its post ID. Store per placement: sponsor name, billing contact name and email, agreed rate, status (pitched, booked, ran, invoiced, paid), the beehiiv post ID and cached post title plus publish date for the issue it runs in, the slot or position within that issue, free text notes, and once billing has happened the Stripe customer ID, invoice ID, invoice number, and hosted invoice URL.

The main surface is a placement board with a column per status: pitched, booked, ran, invoiced, paid. Each card shows the sponsor name, the rate, the issue title, and the issue date, and every column shows a count and a summed dollar total in its header. I can move a placement between columns from the card, and I can create a new placement from a button on the board.

When I create or edit a placement, the issue field is a dropdown populated by beehiiv List Posts for my publication, showing each post's title and publish or scheduled date, most recent first, with a search box because the list gets long. Selecting an issue stores its post ID on the placement. Issues I have marked sold out appear in the dropdown but are disabled with a sold out label so I cannot pick them.

I need to mark an issue as sold out so I never double book the same slot. The sold out flag is app-owned data keyed by beehiiv post ID, with an optional slot count so an issue with a primary and a secondary spot can hold two placements before it is full. Give me a place to toggle sold out per issue, and warn me before saving if I am adding a placement to an issue that already has one in the same slot.

A performance view covers every placement that has shipped, meaning status ran, invoiced, or paid. For each one, call beehiiv Get Post for the linked post ID with the stats expansion and show the real numbers: recipients, opens and open rate, clicks and click rate, and unique clicks where available. Present it per placement with the sponsor name next to it so that when a sponsor asks whether the placement was worth it I can read the answer straight off the screen. Also show a rollup across all shipped placements using beehiiv Get Post Aggregate Stats, which aggregates engagement across the posts matching a filter, as a top line for the period. Handle the case where an issue has not sent yet by showing a pending state instead of zeros.

Clicking a placement opens a detail panel with everything about the deal, its issue performance, and a button that raises the bill in Stripe. That button should: find the sponsor's Stripe customer with Stripe Search Customers on the billing contact email, falling back to Stripe Create Customer when there is no match; create a draft bill with Stripe Create Invoice for that customer with send invoice collection and payment terms I can set; add the placement rate as a line with Stripe Create Invoice Item, with a description naming the sponsor, the issue title, and the issue date; finalize it with Stripe Finalize Invoice; then email it with Stripe Send Invoice. Save the returned invoice ID, number, and hosted URL onto the placement, move it to invoiced, and show the hosted invoice link in the panel. If the placement already has an invoice ID, disable the button and show the existing invoice instead so I cannot bill a sponsor twice. Stripe amounts are in cents, so convert on the way in and out. Use Stripe List Invoice Items scoped to the stored invoice ID to show what was actually billed.

The board should move a placement to paid on its own once the money lands. When the board loads, and from a refresh control, read Stripe List Invoices and match settled invoices against the invoice IDs stored on placements. When an invoice for a placement has been paid, set the placement to paid and record the amount paid and the payment date. This reconciliation only reads from Stripe, it never writes.

Include a revenue summary for the current quarter showing booked versus collected. Booked is the sum of rates for placements whose issue date falls in the quarter and whose status is booked, ran, invoiced, or paid. Invoiced is the sum of rates for those already billed. Collected is the sum of settled Stripe invoice amounts in the quarter from the same List Invoices read. Show outstanding as invoiced minus collected, and let me switch quarters. Pitched placements are not counted as booked but show as a separate pipeline number so I can see what is still in play.

This is for me and maybe one teammate, so keep it simple: no roles or permissions, currency formatted as dollars everywhere, sensible empty states for a first run with no placements yet, and clear error messages if the beehiiv or Stripe connection fails rather than silent blank panels.

What does this prompt do?

  • One board that groups every ad placement you have sold by stage, from pitched through booked, ran, invoiced, and paid
  • Each placement is tied to a real newsletter issue picked from a dropdown of your beehiiv posts, and you can mark an issue sold out so you never double book a slot
  • A performance view shows the real opens, clicks, and click rate for the issue a sponsor ran in, ready for the moment they ask whether it was worth it
  • One button raises and emails the Stripe bill, and the board moves a placement to paid on its own once the money lands
  • A revenue summary for the current quarter showing what you have booked against what you have actually collected

What do I need to use this?

  • A beehiiv account for the newsletter you sell sponsorships in
  • A Stripe account you bill sponsors from
  • Your current deals to load in: sponsor name, billing contact, agreed rate, and which issue each one runs in
  • Issues need to have already sent for their performance numbers to appear

How can I customize it?

  • Rename or add stages if your process has more steps than pitched, booked, ran, invoiced, and paid
  • Set how many sponsor slots an issue has before it counts as sold out, so a primary and a secondary spot can both be sold
  • Change the invoice payment terms and memo wording, and pick which quarter the revenue summary opens on

FAQs

Does this store my sponsorship deals inside beehiiv?
No. beehiiv does not hold ad or sponsorship records, so the app keeps its own placement records for sponsor, contact, rate, and status, and links each one to the issue it runs in. Nothing you enter changes your newsletter.
How does a placement get marked paid?
The board checks your Stripe invoices and moves a placement to paid once its invoice is settled, recording the amount and the date. Apps do not run on a schedule, so open the board or hit refresh to pick up the latest payments.
Can I use this if I invoice sponsors somewhere other than Stripe?
The billing button and the automatic move to paid are built on Stripe. You can still run the board, the sold out control, and the performance view without it, but placements will not bill or settle themselves.
Will it stop me double booking the same issue?
Yes. Mark an issue sold out and it stops being selectable for new placements, and you get a warning if you try to add a placement to an issue that already has one in the same slot.
Where do the open and click numbers come from?
Straight from beehiiv's own stats for the issue the ad ran in, so the figures you show a sponsor match what your newsletter actually did. They appear once the issue has sent.
Does it work if I sell sponsorships across more than one newsletter?
Yes, as long as the publications sit in the same beehiiv workspace. Each placement records the issue it belongs to, so the board and the revenue summary can be filtered per publication.

Related templates

Look up any customer's support, billing and CRM in one page

Type a customer email before a renewal call and get their whole support history next to their plan, their invoices and their open deals.

Help Scout
Stripe
HubSpot
App
Investor update studio that builds your board deck monthly

Open one screen each month to see your real numbers, write the commentary yourself, and generate a board deck you can send to investors.

Gamma
Stripe
HubSpot
+1
App
Sell and invoice Ghost newsletter sponsor slots in one board

Replace the sponsorship spreadsheet with a live board of upcoming issues, sold and open slots, real subscriber counts, and paid or unpaid status from Stripe.

Ghost
Stripe
App
Support console that pairs Gladly chats with orders and refunds

Type a customer email or phone and see their whole support history, order tracking, and payment record on one screen instead of three tabs.

Gladly
Shopify
Stripe
App
Firebase support desk with account actions and Stripe billing

Your support team types an email, phone, or user id and sees that person's account, app data, and billing on one screen, with the fixes they used to escalate.

Firebase
Stripe
Slack Bot
App
Match your Stripe buyers against your Flodesk subscriber list

Open one screen to see who paid you, who is on your email list, and who is missing from either, then add and tag those buyers without leaving the app.

Flodesk
Stripe
App

Stop running sponsorship revenue out of a spreadsheet.

Every placement, performance recap, and sponsor invoice in one board you actually open.