{
  "schema_version": 1,
  "currency": "USD",
  "default_scenario": {
    "billing": "monthly",
    "plans": {
      "context": "Scale",
      "firecrawl": "Scale",
      "exa": "Pay as you go",
      "keenable": "Live fetch"
    }
  },
  "methodology": {
    "reference": "https://github.com/keenableai/needle/blob/main/dashboard/index.html",
    "unit_price": "Base subscription / monthly included credits * 1000; annual subscription / 12 replaces base. One base credit per page. Exa text-only is metered per page.",
    "default_plan": "Largest published self-service paid tier; same billing period across subscriptions.",
    "exclusions": "Enterprise quotes, free allowances, promotional credits, search, judging, hosting, tax, extra formats and special URL surcharges. These are modeled prices, not invoices.",
    "useful_price": "Unit price divided by useful rate, only with resolved judgments and at least one useful page. Assumes one billable base page per attempt.",
    "budget_pages": 93000
  },
  "providers": [
    {
      "id": "context",
      "name": "Context",
      "checked": "2026-09-30",
      "source": "https://www.context.dev/pricing",
      "endpoint": "Markdown scrape · maxAgeMs=0 · 1 base credit/page",
      "billingSource": "https://docs.context.dev/api-reference/web-scraping/scrape",
      "notes": "Current new-subscription prices. Annual billing saves two months on the base subscription. Overage is purchased in 1,000-credit blocks; auto top-up must be enabled. Most failures are unbilled, but 404 responses are billed. Browser actions and extra output formats cost more. Existing accounts may retain older rates and limits.",
      "plans": [
        {
          "name": "Free",
          "monthly": 0,
          "included": 1000,
          "concurrency": 1,
          "monthly_unit_usd_per_1000": null,
          "annual_unit_usd_per_1000": null,
          "monthly_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Allowance exceeded"
          },
          "annual_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Allowance exceeded"
          }
        },
        {
          "name": "Developer",
          "monthly": 19,
          "annual": 190,
          "included": 7500,
          "block": 1000,
          "blockUsd": 2.2,
          "concurrency": 10,
          "monthly_unit_usd_per_1000": 2.533333333333333,
          "annual_unit_usd_per_1000": 2.111111111111111,
          "monthly_budget": {
            "monthly": 208.2,
            "commitment": null,
            "extra": 189.2,
            "reason": null
          },
          "annual_budget": {
            "monthly": 205.03333333333333,
            "commitment": 190,
            "extra": 189.2,
            "reason": null
          }
        },
        {
          "name": "Pro",
          "monthly": 99,
          "annual": 990,
          "included": 125000,
          "block": 1000,
          "blockUsd": 1.8,
          "concurrency": 100,
          "monthly_unit_usd_per_1000": 0.792,
          "annual_unit_usd_per_1000": 0.66,
          "monthly_budget": {
            "monthly": 99,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 82.5,
            "commitment": 990,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Growth",
          "monthly": 299,
          "annual": 2990,
          "included": 500000,
          "block": 1000,
          "blockUsd": 1.4,
          "concurrency": 250,
          "monthly_unit_usd_per_1000": 0.598,
          "annual_unit_usd_per_1000": 0.4983333333333333,
          "monthly_budget": {
            "monthly": 299,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 249.16666666666666,
            "commitment": 2990,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Scale",
          "monthly": 499,
          "annual": 4990,
          "included": 1000000,
          "block": 1000,
          "blockUsd": 1,
          "concurrency": 500,
          "monthly_unit_usd_per_1000": 0.499,
          "annual_unit_usd_per_1000": 0.41583333333333333,
          "monthly_budget": {
            "monthly": 499,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 415.8333333333333,
            "commitment": 4990,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Enterprise",
          "custom": true,
          "monthly_unit_usd_per_1000": null,
          "annual_unit_usd_per_1000": null,
          "monthly_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          },
          "annual_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          }
        }
      ]
    },
    {
      "id": "firecrawl",
      "name": "Firecrawl",
      "checked": "2026-09-30",
      "source": "https://www.firecrawl.dev/pricing.md",
      "endpoint": "Markdown scrape · maxAge=0 · parsers=[] · 1 base credit/page",
      "billingSource": "https://docs.firecrawl.dev/billing",
      "notes": "Annual commitments use the exact published totals, not rounded monthly labels. Allowances renew monthly; Scale has one month of rollover. Extra credits come in $5 blocks and require pay-as-you-go to be enabled. Returned 403/404 pages still cost a credit; a scrape with no result is uncharged. Enhanced proxy escalation has no surcharge. PDF parsing is disabled in this benchmark. X/Twitter URLs have separate billing. Extra formats and PDF parsing can cost more. Concurrency is concurrent browsers; request rate limits also apply.",
      "plans": [
        {
          "name": "Free",
          "monthly": 0,
          "included": 1000,
          "concurrency": 2,
          "rpm": 10,
          "monthly_unit_usd_per_1000": null,
          "annual_unit_usd_per_1000": null,
          "monthly_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Allowance exceeded"
          },
          "annual_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Allowance exceeded"
          }
        },
        {
          "name": "Hobby",
          "monthly": 19,
          "annual": 190,
          "included": 5000,
          "block": 1000,
          "blockUsd": 5,
          "concurrency": 5,
          "rpm": 100,
          "monthly_unit_usd_per_1000": 3.8,
          "annual_unit_usd_per_1000": 3.166666666666667,
          "monthly_budget": {
            "monthly": 459,
            "commitment": null,
            "extra": 440,
            "reason": null
          },
          "annual_budget": {
            "monthly": 455.8333333333333,
            "commitment": 190,
            "extra": 440,
            "reason": null
          }
        },
        {
          "name": "Standard",
          "monthly": 99,
          "annual": 990,
          "included": 100000,
          "block": 2000,
          "blockUsd": 5,
          "concurrency": 25,
          "rpm": 500,
          "monthly_unit_usd_per_1000": 0.99,
          "annual_unit_usd_per_1000": 0.825,
          "monthly_budget": {
            "monthly": 99,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 82.5,
            "commitment": 990,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Growth",
          "monthly": 399,
          "annual": 3990,
          "included": 500000,
          "block": 2500,
          "blockUsd": 5,
          "concurrency": 50,
          "rpm": 5000,
          "monthly_unit_usd_per_1000": 0.798,
          "annual_unit_usd_per_1000": 0.665,
          "monthly_budget": {
            "monthly": 399,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 332.5,
            "commitment": 3990,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Scale",
          "monthly": 749,
          "annual": 7190,
          "included": 1000000,
          "block": 5000,
          "blockUsd": 5,
          "concurrency": 100,
          "rpm": 10000,
          "monthly_unit_usd_per_1000": 0.749,
          "annual_unit_usd_per_1000": 0.5991666666666666,
          "monthly_budget": {
            "monthly": 749,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 599.1666666666666,
            "commitment": 7190,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Enterprise",
          "custom": true,
          "monthly_unit_usd_per_1000": null,
          "annual_unit_usd_per_1000": null,
          "monthly_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          },
          "annual_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          }
        }
      ]
    },
    {
      "id": "exa",
      "name": "Exa",
      "checked": "2026-09-30",
      "source": "https://exa.ai/docs/admin/pricing",
      "endpoint": "/contents · text only · maxAgeHours=0",
      "notes": "Text content is $1 per 1,000 pages, with no subscription minimum. Each additional content type is billed separately. Published $10 monthly free credits and the onboarding bonus depend on account eligibility and shared usage; they are not deducted from this gross comparison. Enterprise discounts are custom. These are Contents prices, not Search prices.",
      "plans": [
        {
          "name": "Pay as you go",
          "perThousand": 1,
          "monthly_unit_usd_per_1000": 1,
          "annual_unit_usd_per_1000": 1,
          "monthly_budget": {
            "monthly": 93,
            "commitment": null,
            "extra": 0,
            "reason": null
          },
          "annual_budget": {
            "monthly": 93,
            "commitment": null,
            "extra": 0,
            "reason": null
          }
        },
        {
          "name": "Enterprise",
          "custom": true,
          "monthly_unit_usd_per_1000": null,
          "annual_unit_usd_per_1000": null,
          "monthly_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          },
          "annual_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          }
        }
      ]
    },
    {
      "id": "keenable",
      "name": "Keenable",
      "checked": "2026-09-30",
      "source": "https://docs.keenable.ai/credits",
      "endpoint": "/fetch · live=true · fetch.live SKU",
      "notes": "The docs advertise a shared monthly allowance of 100,000 requests, but live fetch has a distinct SKU and organization-specific credit pricing. A public USD tariff for this mode is not established. Search-tier prices and the ordinary-fetch allowance cannot establish its live-fetch cost. This collector has no verified HTTP billing receipt; an account-specific live-fetch tariff is needed.",
      "plans": [
        {
          "name": "Live fetch",
          "custom": true,
          "monthly_unit_usd_per_1000": null,
          "annual_unit_usd_per_1000": null,
          "monthly_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          },
          "annual_budget": {
            "monthly": null,
            "commitment": null,
            "extra": null,
            "reason": "Quote required"
          }
        }
      ]
    }
  ]
}
