B2B Intelligence

Competitor Profile

/extract/json

Schema for a competitor's public profile extracted from a homepage, product, or about page: positioning, product, target customers, pricing summary, and recent activity.

Download the schemab2b-intel/competitor-profile.json

competitor-profile.schema

// names marked ? are optional

name:string// Company or product name. Commonly found in: site logo, page header, og:site_name meta tag.
domain:string// Primary website domain. Commonly found in: site URL, canonical link, footer.
tagline?:string// Primary hero tagline or one-line positioning statement. Commonly found in: homepage hero heading, hero subhead, meta description.
description?:string// Short description of what the product does. Commonly found in: hero subhead, about section, meta description tag.
category?:string// Product category or market the company positions itself in. Commonly found in: hero copy, about section, how-it-works heading.
value_propositions?:string[]// Key value propositions or benefits the company leads with. Commonly found in: hero bullets, benefit section headings, feature callouts.
positioning_statements?:string[]// How the company frames itself, including any stated contrast with alternatives. Commonly found in: hero copy, comparison section, why-us section.
differentiators?:string[]// Claimed unique advantages or reasons to choose this product. Commonly found in: why-us section, feature highlights, comparison table.
key_features?:object[]// Product features or capabilities promoted on the page. Commonly found in: features section, product overview, nav submenu.
name:string// Short name of the feature. Commonly found in: feature card heading, product section title, nav submenu label.
description?:string// One-line description of what the feature does. Commonly found in: feature card body, product section copy, tooltip.
target_customers?:string[]// Audiences or customer types the product is built for. Commonly found in: built-for section, use-case headings, hero copy.
notable_customers?:string[]// Named customers or logos shown as social proof. Commonly found in: customer logo wall, testimonials section, trusted-by strip.
integrations?:string[]// Named integrations or supported tools. Commonly found in: integrations section, logo grid, docs nav.
pricing_summary?:object[]// Summary of pricing plans shown on the homepage or pricing teaser. Commonly found in: pricing section, plan cards, pricing teaser.
plan_name:string// Name of the plan. Commonly found in: pricing card title, plan tier label, pricing teaser.
starting_price?:string// Displayed starting price as written, verbatim from the page. May be non-numeric (e.g., "Free", "Custom", "Contact us") and include currency and period. Commonly found in: pricing card price, plan headline price, pricing teaser.
billing_period?:string// Billing period for the price (e.g., per month, per year, per seat). Commonly found in: pricing card interval label, billing toggle, price footnote.
pricing_url?:string// Link to the full pricing page. Commonly found in: nav pricing link, hero secondary CTA, footer.
recent_announcements?:object[]// Recent updates, releases, or news promoted on the site. Commonly found in: blog teasers, changelog, what's new section, news banner.
title:string// Title of the announcement or update. Commonly found in: blog teaser, changelog entry, news banner, what's new section.
date?:string// Date the announcement was published. Commonly found in: blog post date, changelog entry date, press release date.
url?:string// Link to the full announcement. Commonly found in: blog teaser link, changelog entry link, news item href.
primary_cta?:string// Text of the main call-to-action button. Commonly found in: hero CTA button, header sign-up button, nav primary action.
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 Competitor Profile 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 Competitor Profile

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
competitor-profile.ts
// curl -sfLO https://raw.githubusercontent.com/Mozilla-Ocho/tabstack-schemas/main/b2b-intel/competitor-profile.json
import Tabstack from '@tabstack/sdk'
import schema from './competitor-profile.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.