Payment Architecture
Revenue model, billing infrastructure, and compliance strategy for Groundwork's SaaS stage and beyond.
1 Revenue Model Summary
Groundwork monetizes in two distinct layers. The primary revenue driver at launch is a contractor SaaS subscription — contractors pay monthly to access the platform's project management, contract scoring, and homeowner transparency tools. Homeowners are free or lightly monetized, keeping the consumer side of the network frictionless and growing.
Contractor SaaS Primary
Monthly/annual subscriptions for contractors. Tiered by seat count, feature access, and volume. Core revenue engine at launch.
Homeowner Freemium Secondary
Free base access for homeowners. Pro upgrade at $9.99/mo unlocks advanced tracking, multiple projects, and document storage.
Premium Add-ons Upside
Contract scoring credits, deep analytics exports, white-label reports, and API access for larger contractor operations.
Marketplace Fees Future
Payment processing between homeowners and contractors. Requires Stripe Connect and a significant compliance uplift. Not in MVP scope.
Revenue Model Principles
- Contractors pay, homeowners don't have to. The contractor's value proposition — winning trust, getting paid faster, reducing disputes — justifies a real SaaS price. Homeowners experiencing frictionless transparency is the network effect that makes the contractor subscription valuable.
- Annual discounts drive cash efficiency. Two months free on annual plans (roughly 17% discount) improves upfront cash collection and reduces churn risk.
- Usage-based hooks, not usage-based billing at launch. Contract scoring and analytics are quantity-limited by tier, not metered by consumption. Simplicity reduces billing complexity during early growth.
- Premium features are bundled, not nickel-and-dimed. Avoid per-feature charges that create hesitation. Tier jumps should feel like obvious value unlocks.
Revenue Projections (Illustrative)
| Scenario | Contractor Basic Seats | Contractor Pro Seats | Homeowner Pro | Monthly Revenue | ARR |
|---|---|---|---|---|---|
| Early Traction | 50 | 10 | 200 | ~$4,440 | ~$53K |
| Growth | 200 | 60 | 1,000 | ~$18,870 | ~$226K |
| Scale | 500 | 250 | 5,000 | ~$87,200 | ~$1.05M |
Projections assume no marketplace revenue. Mix shift to Pro tiers and annual billing materially improves margins at scale.
2 Payment Flow Diagram
The following diagram shows Groundwork's two-stage payment architecture. Stage A (SaaS only) is active at MVP. Stage B (marketplace) represents a future capability requiring substantial infrastructure changes.
Stage A — SaaS Subscription Flow (Current)
invoice.paid webhook fires → Groundwork provisions features → receipt sent. Renewal happens automatically. The contractor's card is never stored by Groundwork — only Stripe holds payment credentials.
invoice.payment_failed and customer.subscription.deleted webhooks to downgrade access gracefully before cancellation.
Stage B — Marketplace Payment Flow (Future)
3 Pricing Tiers
Groundwork operates four subscription tiers across two personas. Pricing is designed to keep the homeowner acquisition funnel wide while capturing meaningful revenue from contractors who derive direct business value from the platform.
- 1 active project
- View project timeline
- Receive contractor updates
- Basic document storage (500 MB)
- Email notifications
- Advanced analytics
- Multiple projects
- Priority support
- Up to 5 active projects
- Full renovation timeline history
- Document storage (10 GB)
- Budget tracking & alerts
- Change order history
- Contractor performance reports
- Priority email support
- Contract scoring
- Up to 10 active projects
- Homeowner transparency portal
- Update & milestone tracking
- Digital change orders
- 5 contract scores/mo
- Basic analytics dashboard
- Invite up to 2 team members
- Advanced analytics
- Unlimited active projects
- All Basic features
- 25 contract scores/mo
- Advanced analytics & exports
- White-label homeowner reports
- Unlimited team members
- API access (read)
- Dedicated onboarding call
Tier Design Rationale
| Decision | Rationale |
|---|---|
| Homeowner Free tier exists | Homeowner adoption is the product's network effect. Every homeowner on the platform increases the value for contractors, who pay the bills. Friction here costs contractor revenue. |
| Contractor Basic at $49 | Anchored below common trade software (ServiceTitan, Jobber at $49–$200+). Accessible to small operators and solo contractors who are the earliest adopters. |
| Contract scoring is gated | High-value feature that demonstrates ROI directly. Quantity limit encourages upgrade without metered billing complexity. |
| Annual discount at 17% | Two months free. Simple to communicate. Improves cash flow and reduces voluntary churn by extending commitment horizon. |
| No per-seat pricing at launch | Simplifies invoicing and reduces friction. Per-seat pricing can be introduced at a Series A-scale product with more negotiated enterprise deals. |
Upgrade Triggers
In-app prompts should fire at natural moments of friction against tier limits, not on a calendar schedule:
- Homeowner Free: "You have 1 project slot remaining" when creating project #1 — seeds urgency before they hit the wall at project #2.
- Contractor Basic: Contract scoring limit reached (soft block with upgrade CTA, not a hard error).
- Contractor Basic: Team invite attempt when at 2-member limit.
- Contractor Basic to Pro: Advanced analytics page is visible but blurred with an upgrade prompt.
4 Billing Lifecycle
Every subscription passes through a defined sequence of states. Groundwork must handle each transition gracefully — both in the Stripe configuration and in the application layer's access-control logic.
Primary Lifecycle
State Transitions
Lifecycle Detail by Event
| Event | Stripe Trigger | App Behavior | User Communication |
|---|---|---|---|
| Trial starts | customer.subscription.created |
Provision trial-tier features; set trial_end date in user record |
Welcome email with trial end date and feature highlights |
| Trial ending | customer.subscription.trial_will_end (3 days prior) |
No access change yet | Reminder email: "Your trial ends in 3 days — card on file will be charged $49" |
| First charge | invoice.paid |
Confirm paid tier; update subscription_status = active |
Receipt email with invoice link |
| Renewal charge | invoice.paid |
Extend current_period_end; no access change |
Optional monthly receipt (configurable per user) |
| Upgrade | customer.subscription.updated |
Provision new tier features immediately; Stripe handles proration | "You've upgraded to Pro — here's what's new" email |
| Downgrade | customer.subscription.updated + schedule |
Schedule feature restriction for current_period_end; do not restrict immediately |
"Your plan changes at end of billing period" confirmation |
| Payment failed | invoice.payment_failed |
Log failure; maintain access during grace period; trigger in-app banner | "Payment failed — please update your card" email with update link |
| Dunning exhausted | customer.subscription.deleted |
Downgrade to free tier; preserve data for 90 days | "Your subscription has been canceled" email with reactivation CTA |
| Cancel (user-initiated) | customer.subscription.deleted at period end |
Set cancel_at_period_end = true; maintain access until current_period_end |
Cancellation confirmation + "You can reactivate anytime before [date]" message |
| Reactivation | customer.subscription.created |
Restore previous tier; link to historical project data | Welcome back email |
5 Checkout Experience
The checkout flow is the highest-stakes UX moment in the subscription lifecycle. Every unnecessary step or unclear message at this point costs a conversion. The design should be frictionless for the contractor persona — typically a skilled tradesperson or small business owner, not a tech-native SaaS buyer.
Checkout Flow Steps
Plan Selection
User selects a tier from the pricing page or an in-app upgrade prompt. Plan is pre-selected if arriving from a feature gate. Annual vs. monthly toggle is visible with savings callout. No account creation required to view pricing.
Account Creation or Login
New users create an account (email + password or Google OAuth). Existing users authenticate. Account creation and plan selection are combined into a single form — avoid making the user click through an account wall before they see the payment screen.
Payment Details (Stripe Checkout or Elements)
Card number, expiry, CVC, and billing address collected via Stripe's hosted UI. Groundwork never sees raw card data. For contractors, a company name field is captured for invoice display. Stripe handles 3DS authentication where required by the card issuer. Show the trial period clearly: "Your card won't be charged until [date]."
Order Summary & Confirmation
Display: plan name, billing amount, trial end date (if applicable), and the cancellation policy in plain language. A single "Start Free Trial" or "Subscribe" CTA. No hidden fees. Tax (if applicable via Stripe Tax) is shown as a line item, not revealed on a confirmation screen.
Post-Checkout Onboarding
On successful subscription creation, redirect to an onboarding flow — not a generic dashboard. For contractors: prompt to create the first project and invite a homeowner. This converts the checkout moment directly into activation, improving trial-to-paid conversion. Receipt email sent in parallel via Stripe's receipt system.
Stripe Checkout vs. Stripe Elements
| Approach | Pros | Cons | Recommendation |
|---|---|---|---|
| Stripe Checkout (hosted) | Zero PCI surface, rapid implementation, Stripe-maintained UX, built-in tax collection | Less design control, external redirect (or modal), Stripe branding visible | Use at MVP |
| Stripe Elements (embedded) | Full design control, no redirect, native feel, custom styling | More integration work, requires careful PCI-SAQ-A compliance handling | Migrate post-PMF |
Payment Methods to Support
- Launch: Credit card, debit card (Visa, Mastercard, Amex, Discover)
- Near-term: ACH bank transfer — relevant for contractors invoicing through business accounts; lower transaction fees for high-ticket annual plans
- Future consideration: Buy Now Pay Later (Affirm/Klarna) not recommended for SaaS subscriptions
6 Refund Policy
A clear, fair refund policy reduces support burden and customer friction. For a SaaS product at early stage, erring toward generosity protects reputation and reduces chargebacks — chargebacks are significantly more expensive in time and Stripe standing than a refund.
Policy Summary
| Scenario | Policy | Process |
|---|---|---|
| Cancel during trial | No charge, no refund needed | Automated — subscription deleted before trial_end fires |
| Cancel within 7 days of first charge | Full refund, no questions asked | Support request or self-serve via billing portal → Stripe refund API |
| Cancel mid-billing-period (after 7 days) | No refund for current period; access continues until period end | No action required — Stripe handles access via cancel_at_period_end |
| Annual plan, canceled within 30 days | Prorated refund for unused months | Support request → manual Stripe refund for remaining months |
| Annual plan, canceled after 30 days | No refund; access continues until annual period end | No action required |
| Duplicate charge | Full refund of duplicate | Support request → Stripe refund API within 24 hours |
| Unauthorized charge / fraud | Full refund + account investigation | Immediate refund to prevent chargeback; flag account for review |
| Service outage (> 4 hours) | Prorated service credit at discretion | Manual credit via Stripe balance adjustment; no automatic refund |
Chargeback Prevention
- Stripe's Radar rules enabled by default — blocks high-risk card patterns before charges occur.
- Clear billing descriptor:
GROUNDWORK.APP— matches what users will see on bank statements. Avoid generic corporate entity names that trigger "I don't recognize this charge" disputes. - Receipt emails sent immediately on every successful charge, with a support link prominently displayed.
- Self-serve cancellation must be easy to find. Hiding the cancel button is a primary cause of chargebacks in SaaS.
7 Tax & Compliance
Sales Tax on SaaS (US)
SaaS is taxable in an increasing number of US states. The rules are inconsistent: some states treat SaaS as a taxable service, others as non-taxable software, and a few distinguish by use case. Managing this manually is impractical beyond a handful of states.
Stripe Tax integrates directly with Stripe Billing and handles:
- Automatic nexus detection based on customer billing address
- Correct tax rate lookup for SaaS in each jurisdiction
- Tax amount displayed at checkout as a line item
- Tax remittance reporting per state (Groundwork still files — Stripe provides the data)
- Exemption certificate management (for B2B customers with resale certificates)
Cost: 0.5% of taxable transactions processed through Stripe Tax (capped per transaction). Minimal at early revenue levels; worth monitoring at scale.
Compliance Posture by Area
PCI DSS
Stripe is the card data environment. Groundwork operates under SAQ-A (no cardholder data stored or transmitted). Annual self-assessment questionnaire only.
Money Transmission
No money-transmission license required at SaaS stage. Groundwork collects subscription fees for its own services — this is ordinary commerce, not fund transfer between third parties.
KYC / AML
Not required for SaaS subscriptions. Stripe handles identity verification for its own compliance purposes. Groundwork has no separate obligation.
Sales Tax (US)
Medium complexity. Use Stripe Tax. Register in states where economic nexus thresholds are crossed ($100K revenue or 200 transactions). File returns quarterly or annually per state.
VAT / GST (International)
Not a day-one concern. If Groundwork expands to EU/UK/AU markets, VAT registration requirements apply. Stripe Tax handles VAT calculation in supported jurisdictions.
1099 Reporting
Not required at SaaS stage. 1099-K reporting obligations arise only when Groundwork processes payments on behalf of third parties (i.e., marketplace stage).
GDPR / Privacy (Payment Data)
- Groundwork stores: customer ID, subscription status, plan, and billing period. No card numbers, no bank account numbers.
- Stripe's Data Processing Agreement (DPA) covers Stripe's handling of EU personal data. Groundwork must execute Stripe's DPA if serving EU users.
- Billing data is subject to GDPR right-to-erasure requests, but financial records may be retained for statutory periods (typically 7 years in the US) even after account deletion.
8 Financial Reporting
Groundwork needs a small set of key SaaS metrics tracked from day one. These metrics drive fundraising conversations, pricing decisions, and product prioritization. They should be computed from Stripe data (supplemented by app-level cohort data) and surfaced in an internal dashboard.
Core SaaS Metrics
MRR Movement Categories
| Category | Definition | Stripe Data Source |
|---|---|---|
| New MRR | Revenue from brand-new subscribers this month | customer.subscription.created events where customer is new |
| Expansion MRR | Revenue from existing customers upgrading to higher tier | customer.subscription.updated with increased amount |
| Contraction MRR | Revenue lost from existing customers downgrading | customer.subscription.updated with decreased amount |
| Churned MRR | Revenue lost from cancellations | customer.subscription.deleted |
| Reactivation MRR | Revenue from previously churned customers returning | customer.subscription.created where customer previously had a deleted subscription |
Reporting Infrastructure
At MVP, reporting is sourced from Stripe's built-in dashboard and periodic exports. As the business scales, a dedicated data pipeline becomes necessary:
- MVP: Stripe Dashboard + manual monthly export to a spreadsheet. Sufficient for the first 6–12 months.
- Growth: Stripe webhook events → application database → query layer (e.g., Metabase on top of Postgres). Enables cohort analysis and custom segmentation.
- Scale: Stripe → data warehouse (BigQuery/Snowflake) → BI tool (Looker/Metabase). Required before Series A due diligence.
9 Implementation Approach
The following describes the capabilities required to run Groundwork's billing system, followed by a recommendation on which vendor delivers them. Framing this way ensures the capability requirements remain stable even if the vendor changes.
Required Billing Capabilities
Subscription Management
Create, update, pause, and cancel subscriptions. Support multiple plans and annual/monthly cadences. Handle mid-cycle upgrades with proration.
Hosted Payment Collection
Collect card details in a PCI-compliant hosted UI. Support 3DS authentication. No card data stored on Groundwork infrastructure.
Automated Invoicing
Generate invoices on each billing cycle. Email receipts automatically. Support invoice customization (company name, address, tax line items).
Dunning & Retry Logic
Configurable retry schedule on failed payments. Email notifications at each failure. Final state triggers subscription cancellation webhook.
Webhook Event Stream
Reliable event delivery for subscription state changes. Application logic must be driven by these events, not by polling.
Customer Portal
Self-serve billing portal where customers can update card, download invoices, switch plans, and cancel. Reduces support load significantly.
Tax Calculation
Automatic jurisdiction-based tax rate lookup and collection. Reporting exports for filing purposes.
Trial Period Support
First-class support for free trials with card-on-file. Trial end triggers first charge without requiring user action.
Vendor Comparison
| Capability | Stripe Billing | Paddle | Lemon Squeezy |
|---|---|---|---|
| Subscription management | Strong | Strong | Good |
| Hosted checkout | Strong | Strong | Strong |
| Tax / VAT handling | Add-on ($) | Built-in (MoR) | Built-in (MoR) |
| Global payment methods | Excellent | Strong | Good |
| Customer billing portal | Built-in | Built-in | Built-in |
| Webhook reliability | Excellent | Good | Good |
| Marketplace / Connect | Yes (Connect) | Limited | No |
| US contractor payouts (future) | Yes | Partial | No |
| Documentation quality | Best-in-class | Strong | Adequate |
| Transaction fees | 2.9% + 30¢ | 5% + 50¢ (MoR) | 5% + 50¢ (MoR) |
| Stripe Tax add-on | +0.5% taxable txn | Included | Included |
Integration Architecture (Stripe)
// Groundwork billing data model (simplified)
User
stripe_customer_id // Stripe Customer object
subscription_status // active | trialing | past_due | canceled
plan_id // contractor_basic | contractor_pro | homeowner_pro
current_period_end // Unix timestamp from Stripe
trial_end // Unix timestamp, null if no trial
cancel_at_period_end // boolean
// Webhook handler pattern
POST /webhooks/stripe
verify signature (Stripe-Signature header)
route by event.type:
"invoice.paid" → provision_or_renew_access(customer_id)
"invoice.payment_failed" → flag_payment_issue(customer_id)
"customer.subscription.deleted" → downgrade_to_free(customer_id)
"customer.subscription.updated" → sync_plan(customer_id, new_plan)
"customer.subscription.trial_will_end" → send_trial_reminder(customer_id)
10 Pricing Page Specifications
The pricing page serves two audiences simultaneously: homeowners evaluating whether to invite their contractor, and contractors evaluating whether to subscribe. The page design must address both without confusing either.
Page Structure
Hero / Value Proposition
One-sentence pitch tailored to the current viewer's likely persona (default to contractor). Social proof element: "Trusted by X contractors across Y cities." No pricing numbers in the hero — drive scroll.
Persona Toggle
A segmented control: "I'm a Contractor" | "I'm a Homeowner." Toggling switches the tier cards displayed below. Contractors see Basic / Pro / Enterprise. Homeowners see Free / Pro. Reduces cognitive load by showing each persona only what is relevant to them.
Billing Cadence Toggle
Monthly | Annual, with "Save 17%" badge on Annual. Default to Monthly to show the lower number, not the annual commitment, for psychological accessibility. Annual should be selectable before proceeding to checkout.
Tier Cards
3 cards for contractors (Basic, Pro, Enterprise/Custom), 2 for homeowners (Free, Pro). Each card: tier name, price, primary value statement (one sentence), feature list (5–8 items), and a single CTA button. Most popular plan is visually elevated. Feature list uses checkmarks for included, dash or muted text for excluded.
Feature Comparison Table
A detailed, expandable table comparing all features across tiers. This is for decision-makers doing due diligence, not the primary conversion path. Placed below the cards so it does not slow down confident buyers.
FAQ Section
Target 6–8 questions. Must include: "Can I cancel anytime?", "What happens after my free trial?", "Do homeowners pay anything?", "What payment methods do you accept?", "Is my billing information secure?", "Can I switch plans later?"
CTA Copy Guidelines
| Tier | Primary CTA | Secondary / Subtext |
|---|---|---|
| Homeowner Free | "Get Started Free" | "No credit card required" |
| Homeowner Pro | "Start Free Trial" | "14 days free, then $9.99/mo" |
| Contractor Basic | "Start Free Trial" | "14 days free, then $49/mo — cancel anytime" |
| Contractor Pro | "Start Free Trial" | "14 days free, then $149/mo — cancel anytime" |
| Contractor Enterprise | "Talk to Sales" | "Custom pricing for teams of 10+" |
Trust Signals
- SSL / Stripe security badge near the CTA buttons
- "Cancel anytime" explicit callout — not buried in fine print
- Short testimonial from a contractor (trade, city, and one result metric e.g. "disputes down 60%")
- Money-back guarantee badge for annual plans (30-day refund window per policy in Section 6)
11 Future: Marketplace Payment Processing
What Changes and Why It Matters
The SaaS model described in this document has Groundwork as a principal — it sells a service, collects subscription fees, and keeps the money. When Groundwork begins holding and disbursing renovation funds between homeowners and contractors, it becomes a payment intermediary. This is a fundamentally different legal and operational position.
| Dimension | SaaS Stage (Now) | Marketplace Stage (Future) |
|---|---|---|
| Groundwork's role | Principal — sells its own software | Intermediary — facilitates payments between parties |
| Money transmission | Not applicable | Potentially applicable — requires legal review per state |
| PCI scope | SAQ-A (minimal) | Still SAQ-A if using Connect, but higher operational complexity |
| KYC / AML | Not required | Required for contractors receiving payouts above IRS thresholds |
| 1099-K reporting | Not required | Required for contractors receiving $600+ via platform (post-2024 IRS rules) |
| Dispute handling | Chargebacks between customer and Groundwork only | Three-party disputes between homeowner, contractor, and Groundwork |
| Stripe product | Stripe Billing | Stripe Connect (Express or Custom) + Billing |
| Revenue model | Fixed subscription fee | Transaction fee (e.g., 1–3% of renovation value) on top of or instead of subscription |
| Fraud risk | Standard card fraud risk | Construction fraud risk (phantom invoices, scope disputes, advance-fee schemes) |
Prerequisites Before Enabling Marketplace Payments
- Legal opinion on money transmission licensing. Some states (e.g., California, New York) have broad definitions of money transmission that may capture renovation payment facilitation. An attorney familiar with payments regulation must review before launch.
- Stripe Connect onboarding for contractors. Each contractor must complete Stripe's KYC process to receive payouts. This is a UX friction point — plan for drop-off and an onboarding funnel.
- Escrow / milestone release logic. The core product decision: who triggers release of funds? Homeowner approval, automatic on schedule, or Groundwork arbitration? Each choice has different liability implications.
- Dispute resolution process. What happens when a homeowner refuses to release a milestone payment? Groundwork needs a documented, fair process before the first payment is processed.
- 1099-K compliance tooling. Tax year end requires 1099-K issuance to contractors who received $600+. Stripe provides data; Groundwork must have a process to collect contractor tax IDs (SSN/EIN) and file.
- Insurance and liability review. Does Groundwork have any liability exposure if a renovation payment is processed and the work is not completed? Legal and product must align on the scope of Groundwork's role.
Stripe Connect Implementation Notes (When Ready)
Stripe Connect Express is the recommended starting point for marketplace payouts. It provides:
- Stripe-hosted onboarding for contractors (KYC handled by Stripe)
- Automatic 1099-K generation for contractors crossing IRS thresholds
- Instant or scheduled payouts to contractor bank accounts
- Fee collection via application fees at transfer time
- Dispute handling with clear liability rules
The transition from Billing-only to Billing + Connect on Stripe does not require a processor migration — it is additive. This is a key advantage of selecting Stripe at the SaaS stage.