import type { Metadata } from "next"; import Link from "next/link"; import { Check, KeyRound, LogIn, Mail } from "lucide-react"; import { PLAN_LIMITS } from "@fetcha/core"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { formatNumber } from "@/lib/format"; export const metadata: Metadata = { title: "Access", description: "Fetcha is a private, invitation-only web access platform. One plan, no meters: unlimited requests, 200 concurrent, all network classes, managed browser and crawl jobs.", alternates: { canonical: "/pricing" }, }; const REQUEST_ACCESS = "mailto:hello@fetcha.co?subject=Fetcha%20access"; function seconds(ms: number) { return `${ms / 1000} s`; } export default function AccessPage() { const p = PLAN_LIMITS.unlimited; const networks = p.networks.map((n) => n[0]!.toUpperCase() + n.slice(1)).join(", "); const included: Array<{ label: string; value: string; hint: string }> = [ { label: "Requests", value: "Unlimited", hint: "No monthly quota, no overage, no request fee." }, { label: "Concurrency", value: formatNumber(p.concurrency), hint: "Requests in flight at once, per organization." }, { label: "Timeout", value: `up to ${seconds(p.max_timeout_ms)}`, hint: "One budget for the whole request, retries included." }, { label: "Retries", value: `up to ${p.max_retries}`, hint: "New exit IP and alternate route on every attempt." }, { label: "Network classes", value: "All", hint: networks + ", chosen automatically or pinned per request." }, { label: "Managed browser", value: `${p.browser_concurrency} concurrent`, hint: "Real Chromium, same networks, automatic fallback on JS challenges." }, { label: "Crawl jobs", value: `${formatNumber(p.crawl_max_pages)} pages / job`, hint: `${p.crawl_concurrent_jobs} jobs in parallel, sitemap discovery, Markdown output.` }, { label: "Sessions and geo", value: "Included", hint: "Sticky sessions up to 30 minutes; country, region and city targeting." }, { label: "Request logs", value: `${p.retention_days} days`, hint: "Every attempt, route alias, timing and cost, in the dashboard and the API." }, ]; const features = ["POST /v1/fetch with HTML, text, Markdown, JSON or raw output", "Managed headless browser with screenshots and wait conditions", "Crawl and map endpoints for whole sites", "Sticky sessions and geo targeting", "Playground, request explorer and usage analytics", "JavaScript and Python SDKs", "Optional spending limits as guard-rails"]; return (

Access

Private access. No plans, no meters.

Fetcha is an invitation-only platform. There is a single, unlimited plan for everyone who is let in, and there is nothing to buy: no tiers, no quotas, no invoices. Accounts are created from an access list managed by a Fetcha administrator.

Already invited? Sign up with the email address your administrator approved.

{/* Single plan */}

{p.label}

private platform

The only plan. Same limits for every organization, enforced by the API from the configuration below.

$0
no billing, by invitation
{included.map((row) => (
{row.label}
{row.value}
{row.hint}
))}
{/* What is included + how to get access */}

Everything is included

No feature is gated behind a tier. When a capability ships, every account gets it the same day.

    {features.map((f) => (
  • {f}
  • ))}

How to get access

    {[ { title: "Ask for an invitation", body: <>Write to hello@fetcha.co with the email address you want to use and a sentence about what you plan to fetch. }, { title: "Your email is added to the access list", body: <>A Fetcha administrator adds it and sends you an invitation. Only listed addresses can create an account; anyone else is refused at signup. }, { title: "Create your account", body: <>Follow the link in the invitation (or open /signup) using the same address. Your workspace, a default project and the Playground are ready immediately. }, ].map((s, i) => (
  1. {i + 1}
    {s.title}

    {s.body}

  2. ))}
{/* Notes */}

Good to know

Questions? Write to support@fetcha.co.

{[ { q: "Why is there no pricing?", a: "Fetcha runs as a private platform for invited teams. Access is granted by an administrator rather than sold, so there is no checkout, no card on file and no invoice. The dashboard's “Plan & access” page shows your usage for information only." }, { q: "Are the limits really unlimited?", a: `There is no monthly request quota and no overage. Operational limits still apply to keep the platform healthy: ${formatNumber(p.concurrency)} concurrent requests per organization, a ${seconds(p.max_timeout_ms)} maximum timeout, up to ${p.max_retries} retries, ${p.browser_concurrency} concurrent browser renders and ${formatNumber(p.crawl_max_pages)} pages per crawl job. Burst rate limits protect the API from runaway loops.` }, { q: "What are spending limits, then?", a: "Optional guard-rails you set yourself, per organization or per project. They are based on an internal cost estimate and stop requests with USAGE_LIMIT_REACHED when a hard limit is reached. Nothing is charged." }, { q: "Can I invite my teammates?", a: "Ask your Fetcha administrator to add their email addresses to the access list; each of them receives an invitation and creates their own account. Shared organizations and roles are not available yet." }, { q: "What happens if I sign up with an email that was not invited?", a: "Signup is refused with the message “This email is not on the access list. Ask your Fetcha administrator to invite you.” No account is created." }, ].map((f) => (
{f.q} +
{f.a}
))}

Invited? Your workspace is waiting.

Log in with the address your administrator approved, or ask us for access.

Private platform. No plans, no meters, no billing.

); }