← back to Animals

docs/monetization.md

132 lines

# Monetization — Project: Animals

Three independent revenue rails, ranked by build cost / unit economics.

---

## Rail A · Display ads (lowest friction, lowest CPM)

**Where:** every public page — breed pages, clinic pages, vet pages, groomer/pet-store/
shelter/breeder/trainer/boarding pages, breed-vs-breed, city directory pages, "best
vets in {city}" SEO pages, and the city-map "everything near you" pages.

**Slot inventory per page:**
- Header banner (728×90 desktop / 320×50 mobile)
- Mid-content native (in-flow card)
- Sidebar sticky (300×600 desktop only)
- Footer (728×90)

**Implementation:**
- Phase 1: Google AdSense (`AD_PROVIDER=adsense`, just inject the snippet).
  Pros: zero sales effort. Cons: $1-3 RPM in this vertical.
- Phase 2: Direct contextual ads (`AD_PROVIDER=inhouse`). Sell directly to:
  - Pet food (Chewy affiliate, Farmer's Dog, The Honest Kitchen, Open Farm)
  - Pet insurance (Lemonade, Trupanion, Pets Best, Healthy Paws, MetLife)
  - Pet retailers (Chewy, Petco, BarkBox)
  - Vet schools / continuing ed (low priority)
- Each clinic page that has ≥1 ad-friendly trigger keyword (e.g., "puppy",
  "vaccination", "senior dog") gets a contextually-matched native card.

**Target unit economics at scale:**
- 70k clinic pages + 500 breed pages + 1k city pages = ~71k indexable pages
- 5 sessions/page/mo (modest SEO baseline) = 355k sessions/mo
- $4 effective RPM = **~$1,420/mo** at first
- Realistic 12-month target with SEO: 200 sessions/page = $5.7k/mo
- Realistic 24-month target with SEO + brand: 500 sessions/page = $14k/mo

**Schema:** `ad_slots`, `ad_impressions`, `ad_clicks` (rail A is mostly third-party
served — we just track impressions for our own analytics + ad-fraud verification).

---

## Rail B · Lead-gen funnel (highest LTV per lead)

**Where:** every clinic/vet/groomer/trainer/breeder page has a "Get matched
with a {role} near you" CTA that opens a 4-field form (name, email, ZIP,
species + symptom or service).

**Routing:**
- Form submit → `leads` row → `match_engine.js` picks top 3 businesses by:
  - distance from ZIP (Haversine)
  - species match (dog/cat/exotic/etc.)
  - service match (general/emergency/dental/dermatology/etc.)
  - `verified=true` priority (clinics that responded to a prior outreach)
- George (gmail agent on tailnet) emails the matched business owner with a
  1-click "Claim this lead" link.

**Pricing:**
| Vertical    | Per-lead |
| ----------- | -------- |
| Veterinarians (general)   | $25 |
| Vets (specialty: derma/cards/onco) | $60 |
| Emergency vets            | $80 |
| Groomers                  | $15 |
| Trainers                  | $25 |
| Breeders (puppy buyers)   | $50 |
| Boarding/daycare          | $20 |
| Pet store (premium feature placement) | flat $39/mo |

**Target:** 200 leads/mo @ avg $35 = **$7k/mo MRR** within 6 months.

**Schema:** `leads`, `lead_matches`, `lead_charges` (Stripe usage-billed).

---

## Rail C · White-label "Vet Site Upgrade" SaaS

**The pitch (auto-generated, sent to clinic email from site_audit):**

> Hi [Clinic Name] team — we audited your website and noticed a few things
> that may be costing you new patients (no mobile menu, no schema.org for
> Google to understand your services, no online booking, slow page load).
>
> We rebuilt 3 mockups for you — see them at:
> https://animalsdirectory.com/upgrade/preview/[token]
>
> $499 one-time, $49/mo. We host, maintain, update — you just send us your
> photos and we ship in 7 days.

**What they get:**
- Modern responsive site (one of 3 templates — same as lawyer EZ-Upgrade)
- Custom domain (theirs) or our subdomain `[clinic].vetpages.com`
- Online appointment request form (POSTs to clinic email)
- Schema.org `VeterinaryCare` markup (so Google ranks them for local-pack)
- Photo gallery, services list, team bios
- Hosted on Kamatera, deployed via push-to-deploy bare repo (per Steve pattern)

**Funnel:**
1. `audit:websites` cron computes `marketing_score` for every clinic with a
   known website. Anything < 60 enters the upgrade pipeline.
2. `audit:mockups` generates 3 PNG mockups via Playwright + EJS templates.
3. Outbound email sent via George with a `/upgrade/preview/:token` link.
4. Clinic clicks → sees mockups + price → submits `upgrade_order`.
5. Admin gets Stripe checkout → onboards clinic → ships site in 7 days.

**Target:** 70k clinics × 0.3% conversion = 210 customers
- 210 × $499 setup = **$104,790 one-time** in year 1
- 210 × $49/mo = **$10,290 MRR** by end of year 1

**Schema:** `site_audits`, `site_mockups`, `upgrade_orders`, `app_users`
(clinic owner login to claim profile + manage subscription).

---

## Combined target (12-month base case)

| Rail | Year-1 revenue | Notes                              |
| ---- | -------------- | ---------------------------------- |
| A    | $30k           | Ad CPMs grow w/ SEO                |
| B    | $70k           | 200 leads/mo at $35 avg            |
| C    | $135k          | $105k setup + $30k from MRR ramp   |
| **Total** | **~$235k**  | with one full-time human handling C delivery |

---

## Build sequence (revenue-first)

1. Scaffold + ingest 5k clinic seed (CA + TX) — needed to demo any rail
2. Build viewer w/ ad slots wired (AdSense first) — turns on Rail A immediately
3. Build site_audit + mockup generator — turns on Rail C
4. Build lead form + George outbound — turns on Rail B
5. Hire 1 part-time site-builder when Rail C books >$5k/mo