← All use cases

Direct ad sales

Sell direct ads to sponsors without losing 32% to AdSense

Cut Google out. Sell your inventory to sponsors directly. Run rotation, scheduling, impressions in WordPress. Higher RPMs than programmatic on niche audiences.

What you’re building

A WordPress-native ad server that lets you sell banner + sidebar + in-feed inventory directly to sponsors, rotate multiple campaigns, schedule by date, and track impressions + clicks. No third-party JS. No AdSense revenue share.

This is the “I’d rather sell three sponsored sidebar slots a month than run AdSense” playbook.

Why direct sells beat programmatic on niche audiences

AdSense pays roughly $1-3 CPM on niche-vertical English traffic. Mediavine + Raptive pay $15-30 CPM but require 50k+ sessions. Below that floor, programmatic is dead money.

A single direct sponsor on a niche blog can pay $200-$500/month for a sidebar slot at well under 50k sessions, because they value the audience match more than the impression count. The ROI is hand-curated, not auction-priced.

What stops most publishers from doing this: managing the inventory. Who has which slot this week. Which sponsor’s campaign expires Friday. Which click leads to which campaign report.

WB Ad Manager solves the management problem.

Ad types built in

Five ad types ship in the free plugin:

  1. Image banner — JPG/PNG/WebP, click-tracked
  2. HTML ad — sponsor brings their own creative (responsive, JS-free)
  3. Code ad — paste a third-party ad tag (AdSense, Ezoic, custom)
  4. Text ad — title + description + URL, no image
  5. Native / in-article — matches the post styling, looks editorial

For most niche publishers, image banner + native covers 95% of sponsor inventory.

Where ads go: 16+ built-in placements

Plugin ships placement hooks for:

  • Before / after / inside post content (specific paragraph numbers, e.g. “after 3rd paragraph”)
  • Sidebar widget (3 widget areas)
  • Header bar (sitewide notification-style)
  • Footer bar
  • Between posts in archive listing
  • Above / below comments
  • In BuddyPress activity feed (if you run a community)
  • In bbPress topics (if you run forums)

Sponsors care about placement specificity. “Above the fold on the homepage” sells for more than “somewhere on the site.” Plugin lets you guarantee placement.

The booking workflow

For a single sponsor, no Pro license needed. Free flow:

  1. Sponsor confirms. Email back-and-forth. Decide price + placement + dates.
  2. Plugin > Ads > Add new. Upload creative. Set start + end date. Tag the placement.
  3. Send sponsor the preview URL. They confirm the live placement looks right.
  4. Schedule activates automatically on the start date. Pulls down on the end date. No manual intervention.

You’ll spend more time on the email than on the plugin.

Tracking that sponsors actually want

Most sponsors don’t ask for impressions — they ask for clicks. WB Ad Manager tracks both:

  • Impressions = times the ad was rendered server-side (not pixel-counted — server count, more accurate)
  • Clicks = times the ad was clicked (with referrer, timestamp, country)
  • CTR = clicks / impressions, calculated automatically

Export CSV per campaign for the sponsor’s monthly report. That CSV is usually enough to renew the contract.

What Pro unlocks for direct sales

Pro adds:

  • Multiple campaigns per placement, rotated — sponsor A gets 60% of impressions in slot X, sponsor B gets 40%. Plugin weights the rotation.
  • Frequency cap per visitor — show each user the same ad max 3 times per session. Sponsors will request this once you have repeat-traffic.
  • Geo + device targeting — US-only campaigns, mobile-only campaigns. Increases sell-through on the same inventory.
  • Goal-based stopping — “stop showing this ad after 100 clicks” — useful for trial campaigns.

If your direct ads revenue clears $500/month, Pro pays for itself in the first quarter.

Pricing your inventory

CPM benchmarks for a 20k-monthly-visitor niche publication:

SlotStandard CPMPremium / Sponsored
Sidebar$5$15-25 (homepage above fold)
In-article$8$20-40 (after paragraph 3)
Header bar$10$25-50 (sitewide notification)
Newsletter slot$30$50-100 (lead position)

These are minimums. Verticals with B2B audience (SaaS, real estate, finance) easily 3-5x these numbers.

Don’t undercharge. Sponsors who pay $50/month treat you like $50/month. Sponsors who pay $500/month treat you like a partner.

AdSense + direct ads together

You can run both. Mixed inventory is common:

  • AdSense fills unsold slots (no booking, no rotation needed)
  • Direct sponsors take the premium slots (above-fold sidebar, post-3 in-article)
  • WB Ad Manager rotates direct + AdSense as configured

When a direct sponsor signs for a slot, the AdSense ad in that slot is paused automatically. Plugin handles the swap.

Common pitfalls

  • No refund policy in the booking email. Write one before you sell. “Refund within 7 days if performance is more than 50% below the projected click rate” is standard.
  • Sponsor expects guaranteed clicks. Clicks aren’t sellable. Impressions and placement are. Price on impressions; report on both.
  • No preview URL when sending the campaign live. Sponsors hate surprises. Send the live URL with a screenshot before the campaign begins.
  • Slow site = low CTR = sponsor doesn’t renew. Image ads at WebP/AVIF + lazy-loaded help. Plugin supports both natively.

Ship checklist

  • 3 ad slots defined on the site (sidebar, in-article, header)
  • CPM rate card written (even if just internal — defend pricing)
  • Refund policy + screenshot-before-launch in your sponsor email template
  • One test ad rotating, click + impression counts working in dashboard
  • AdSense fill (if using) configured for unsold inventory

Then start outreach. Your first three sponsors will be people who already read you.