Labsco
firecrawl logo

pricing-tracker

โœ“ Officialโ˜… 1,129

by firecrawl ยท part of firecrawl/web-agent

Extract and normalize pricing tiers from any SaaS, API, cloud, or LLM vendor's pricing page. Use this skill whenever the user says "pricing for X", "how much does X cost", "pricing tiers", "cost comparison", provides a URL ending in `/pricing` or `/plans`, or asks to monitor pricing over time. Pairs well with `exportSkill` to turn a run into a cron-friendly workflow. Scrape-driven; no interact needed for typical pricing pages.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedAccount requiredQuick setup
๐Ÿงฉ One of 6 skills in the firecrawl/web-agent package โ€” works on its own, and pairs well with its siblings.

This is the playbook your agent receives when the skill activates โ€” you don't need to read it to use the skill, but it's here to audit before installing.

Pricing Tracker

Extract pricing tiers from a vendor's pricing page and normalize them into a consistent shape. Optimized for SaaS, API, cloud, LLM, and CDN pricing pages โ€” all of which share similar structure but inconsistent naming.

When to use

  • User provides a pricing URL: "get pricing from https://openai.com/api/pricing"
  • User names a vendor: "what does Vercel cost?", "get Anthropic API pricing"
  • User wants to compare prices across vendors (delegate per-vendor extraction to this skill, then aggregate)
  • User wants to monitor pricing on a schedule (combine with exportSkill: true to generate a standalone workflow)

Do NOT use for e-commerce SKU pricing โ€” use e-commerce instead.

Strategy

  1. Find the pricing URL.

    • If the user provided one, use it.
    • Otherwise search "<vendor> pricing" and take the top result from the vendor's own domain.
  2. Scrape with only-main-content. Pricing pages are heavy on nav and testimonials that waste context.

  3. Identify the unit. Every pricing page has one of these shapes โ€” pick the right one:

    • Per seat โ€” SaaS (Notion, Linear, Vercel)
    • Per request / token / call โ€” API and LLM (OpenAI, Anthropic)
    • Per GB / TB โ€” storage, bandwidth, CDN
    • Per minute / hour โ€” compute (Modal, Replicate)
    • Flat monthly โ€” simple SaaS tiers
    • Usage-based with tiers โ€” cloud (AWS, GCP)
  4. Extract every tier. Include Free and Enterprise even when their price is $0 or "Contact sales" โ€” users care about those as much as the paid tiers.

  5. Flag the gotchas.

    • Annual vs monthly pricing (often a 20% discount buried on annual)
    • Overage rates past the included quota
    • Seat minimums ("Team plan starts at 5 seats")
    • Features gated to higher tiers
    • "Free tier" that requires a credit card
  6. Call formatOutput once with the full pricing object.

Output schema

{
  "vendor": "OpenAI",
  "url": "https://openai.com/api/pricing",
  "currency": "USD",
  "billingPeriod": "monthly",
  "unit": "per 1M tokens",
  "tiers": [
    {
      "name": "gpt-4o",
      "price": 2.5,
      "unit": "per 1M input tokens",
      "includedQuota": null,
      "features": [],
      "limits": {},
      "enterpriseOnly": false
    }
  ],
  "freeTierAvailable": false,
  "enterpriseContactOnly": false,
  "notes": "Output tokens priced separately at $10 / 1M. Batch API is 50% off.",
  "capturedAt": "2026-04-15",
  "sources": ["https://openai.com/api/pricing"]
}

Tips

  • Numbers are numbers, not strings. Price 2.5, never "$2.50". Strip currency symbols and commas. Put the currency in currency and the unit in unit.
  • Do not guess. If a tier shows "Contact sales", put null in price and set enterpriseContactOnly: true. Never make up a number.
  • Model-tier grids count as tiers. For LLM pricing pages with many models, emit one tier entry per model.
  • Capture capturedAt: <date> in every output. Makes downstream diffing against a previous run trivial.
  • Annual vs monthly: if both are shown, capture the monthly rate as the primary price and note the annual discount in notes.
  • Always include sources: [...] โ€” at minimum the scraped pricing URL.

See also