B2B Intelligence

SaaS Pricing Page

/extract/json

Schema for SaaS product pricing page data including plans, features, and pricing models.

Download the schemab2b-intel/saas-pricing-page.json

saas-pricing-page.schema

// names marked ? are optional

company_name:string// Name of the SaaS company. Commonly found in: page header, site logo, og:site_name meta tag.
company_domain:string// Website domain of the company. Commonly found in: site URL, pricing page domain, canonical URL.
pricing_model?:string// Primary pricing model used. Commonly found in: pricing page structure, pricing model description, plan structure. One of: per_seat, usage_based, flat, tiered, custom, other.
free_tier_available?:boolean// Whether a free tier or free plan is available. Commonly found in: free plan badge, pricing tier list, CTA buttons.
free_trial_available?:boolean// Whether a free trial is offered. Commonly found in: free trial CTA, trial badge, pricing page header.
trial_days?:number// Number of days in the free trial. Commonly found in: trial duration text, free trial badge, pricing page FAQ.
billing_intervals?:string[]// Available billing intervals (e.g., monthly, annual). Commonly found in: billing toggle, billing period options, pricing header.
annual_discount_percent?:number// Discount percentage for annual billing. Commonly found in: billing toggle label, annual discount badge, savings callout.
currency?:string// ISO 4217 currency code for pricing. Commonly found in: price display currency symbol, currency selector, pricing footnote.
custom_pricing_available?:boolean// Whether custom or enterprise pricing is available. Commonly found in: enterprise plan CTA, contact us for pricing, custom plan section.
plans:object[]// List of pricing plans available. Commonly found in: pricing plan cards, plan tier section, pricing comparison table.
plan_name:string// Name of the pricing plan (e.g., Starter, Pro, Enterprise). Commonly found in: plan header, pricing tier name, plan card title.
price_monthly?:number// Monthly price when billed monthly. Commonly found in: monthly price display, plan price card, billing toggle monthly.
price_annual_monthly?:number// Monthly price when billed annually. Commonly found in: annual price display, plan price card annual view, billing toggle annual.
price_annual_total?:number// Total annual price when billed annually. Commonly found in: annual total display, yearly price label, billing summary.
seats_included?:number// Number of seats or users included in the plan. Commonly found in: plan details, seats/users limit, plan feature list.
seat_overage_price?:number// Price per additional seat beyond the included count. Commonly found in: pricing footnote, overage pricing details, plan FAQ.
usage_limit?:string// Usage limits or quotas for this plan. Commonly found in: plan details, usage limits section, plan comparison table.
features:string[]// List of features included in this plan. Commonly found in: plan feature list, included features section, plan comparison table.
highlighted?:boolean// Whether this plan is visually highlighted or recommended. Commonly found in: recommended badge, most popular label, plan card highlight style.
cta_text?:string// Call-to-action button text for this plan. Commonly found in: plan CTA button, get started button text, sign up button.
page_title?:string// Title of the source page. Tabstack auto-fills this from page metadata when left empty.
favicon?:string// Favicon URL of the source page. Tabstack auto-fills this from page metadata when left empty.

Try it live

A sample SaaS Pricing Page document, generated from the schema. Edit it, or paste a real response, and see it checked against the schema instantly. It runs in your browser, nothing is sent anywhere.

your-output.json
validation

Valid, matches SaaS Pricing Page

Every required field is present and each value matches its type. Extra fields are allowed. A field the page does not carry is not guaranteed to come back as null, so check values rather than only checking for null.

/extract/json

Copy-paste usage

The same call in TypeScript, Python, and curl. Point it at your own URL and go. The schema drives the response, so you get back the fields you asked for instead of a page to parse.

Features

  • Typed TypeScript and Python SDKs
  • One call, no parsing code and no second LLM pass
  • The same field names on every request, even when the page layout changes
saas-pricing-page.ts
// curl -sfLO https://raw.githubusercontent.com/Mozilla-Ocho/tabstack-schemas/main/b2b-intel/saas-pricing-page.json
import Tabstack from '@tabstack/sdk'
import schema from './saas-pricing-page.json' with { type: 'json' }

const client = new Tabstack() // reads TABSTACK_API_KEY from the environment

try {
  const data = await client.extract.json({
    url: 'https://example.com/pricing',
    json_schema: schema,
    effort: 'standard', // 'min' | 'standard' | 'max'
  })

  console.log(data)
} catch (err) {
  console.error('Extraction failed:', err)
}

Ship this schema in one call.

Pass a URL, get matching JSON back. Free to start, no extraction layer to maintain.