Skip to content

FIRE-1 Agent Model

Updated Feb 2026

FIRE-1 is an AI agent that enhances Firecrawl's extraction capabilities through intelligent browser automation. It plans and executes multi-step actions to uncover data that standard scraping cannot reach.

Overview

FIRE-1 differs from the Spark-1 models used in the Agent API. While Spark-1 focuses on autonomous web research (searching the web, navigating sites, synthesizing information), FIRE-1 is a browser automation agent designed to interact with complex page elements to extract structured data from specific URLs.

FIRE-1 vs Spark-1

CapabilityFIRE-1Spark-1 Mini/Pro
PurposeBrowser automation extractionAutonomous web research
URLs RequiredYesNo (optional)
Endpoint/v1/extract/v2/agent
Browser ControlFull (clicks, forms, pagination)Search + navigate
Schema OutputYesYes
Web SearchNoYes (built-in)
CostVariable (per-request complexity)Dynamic (credit-based)
Best ForComplex single-site extractionMulti-site research

When to Use FIRE-1

Use FIRE-1 when your target data requires browser interaction to access:

  • Paginated content -- tables, forums, or listings that span multiple pages
  • Dynamic elements -- data behind "Load More" buttons, accordions, tabs
  • Multi-step navigation -- content requiring sequential clicks to reach
  • Interactive forms -- data that appears after filter/search interactions
  • Hidden content -- elements that only render after user interaction

Use Spark-1 (Agent API) instead when:

  • You do not have specific URLs
  • You need web search capabilities
  • The task involves cross-site research
  • Data is on simple, static pages

API Endpoint

POST https://api.firecrawl.dev/v1/extract

v1 Endpoint

FIRE-1 uses the /v1/extract endpoint, not /v2/extract. This is distinct from the newer Extract API which uses /v1/extract as well but can operate without an agent.

Rate Limit: 10 requests per minute

Parameters

ParameterTypeRequiredDescription
urlsarrayYesTarget URLs to extract from
promptstringYesNatural language description of the extraction task
schemaobjectYesJSON Schema defining the output structure
agentobjectYesAgent configuration: {"model": "FIRE-1"}

Schema Definition

Define the structure of your expected output using JSON Schema:

json
{
  "type": "object",
  "properties": {
    "company_name": { "type": "string" },
    "pricing_plans": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "price": { "type": "string" },
          "features": {
            "type": "array",
            "items": { "type": "string" }
          }
        },
        "required": ["name", "price"]
      }
    }
  },
  "required": ["company_name", "pricing_plans"]
}

Usage Examples

Python

python
from firecrawl import FirecrawlApp

app = FirecrawlApp(api_key="fc-YOUR-API-KEY")

result = app.extract(
    urls=["https://example.com/pricing"],
    prompt="Extract all pricing plans including plan name, monthly price, and features list",
    schema={
        "type": "object",
        "properties": {
            "plans": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string"},
                        "monthly_price": {"type": "string"},
                        "features": {
                            "type": "array",
                            "items": {"type": "string"}
                        }
                    },
                    "required": ["name", "monthly_price"]
                }
            }
        },
        "required": ["plans"]
    },
    agent={"model": "FIRE-1"}
)

for plan in result['data']['plans']:
    print(f"{plan['name']}: {plan['monthly_price']}")
    for feature in plan.get('features', []):
        print(f"  - {feature}")

Node.js

javascript
import FirecrawlApp from '@mendable/firecrawl-js';

const app = new FirecrawlApp({ apiKey: "fc-YOUR-API-KEY" });

const result = await app.extract({
  urls: ["https://example.com/pricing"],
  prompt: "Extract all pricing plans including plan name, monthly price, and features list",
  schema: {
    type: "object",
    properties: {
      plans: {
        type: "array",
        items: {
          type: "object",
          properties: {
            name: { type: "string" },
            monthly_price: { type: "string" },
            features: { type: "array", items: { type: "string" } }
          },
          required: ["name", "monthly_price"]
        }
      }
    },
    required: ["plans"]
  },
  agent: { model: "FIRE-1" }
});

console.log(result.data);

cURL

bash
curl -X POST https://api.firecrawl.dev/v1/extract \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "urls": ["https://example.com/pricing"],
    "prompt": "Extract all pricing plans including plan name, monthly price, and features list",
    "schema": {
      "type": "object",
      "properties": {
        "plans": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {"type": "string"},
              "monthly_price": {"type": "string"},
              "features": {"type": "array", "items": {"type": "string"}}
            },
            "required": ["name", "monthly_price"]
          }
        }
      },
      "required": ["plans"]
    },
    "agent": {"model": "FIRE-1"}
  }'

Use Cases

Forum Thread Extraction

Extract all comments from a paginated forum:

python
result = app.extract(
    urls=["https://forum.example.com/thread/12345"],
    prompt="Extract all user comments from this forum thread, including username, timestamp, and comment text. Follow pagination to get all pages.",
    schema={
        "type": "object",
        "properties": {
            "comments": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "username": {"type": "string"},
                        "timestamp": {"type": "string"},
                        "text": {"type": "string"}
                    }
                }
            }
        }
    },
    agent={"model": "FIRE-1"}
)

Filtered Product Listings

Extract products after applying filters:

python
result = app.extract(
    urls=["https://store.example.com/products"],
    prompt="Filter products by category 'Electronics' and price range '$50-$200', then extract all visible product names, prices, and ratings",
    schema={
        "type": "object",
        "properties": {
            "products": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string"},
                        "price": {"type": "string"},
                        "rating": {"type": "number"}
                    }
                }
            }
        }
    },
    agent={"model": "FIRE-1"}
)

Tabbed Content

Extract data from multiple tabs on a page:

python
result = app.extract(
    urls=["https://example.com/product/specs"],
    prompt="Click through all specification tabs (Overview, Technical, Dimensions) and extract the content from each tab",
    schema={
        "type": "object",
        "properties": {
            "overview": {"type": "string"},
            "technical_specs": {"type": "object"},
            "dimensions": {"type": "object"}
        }
    },
    agent={"model": "FIRE-1"}
)

Cost

FIRE-1 pricing is non-deterministic -- costs vary based on:

  • Number of browser actions required
  • Complexity of the page interaction
  • Number of pages navigated
  • Amount of data extracted

Use the credit calculator to estimate costs for your specific use case. FIRE-1 requests are generally more expensive than standard extraction due to the advanced browser automation and AI planning involved.

Limitations

  • Cloud only -- not available in self-hosted deployments
  • Rate limited to 10 requests per minute
  • Variable cost -- complex interactions consume more credits
  • URL required -- unlike Spark-1, you must provide target URLs
  • No web search -- cannot discover URLs autonomously

Back to: Features Overview -->