---
title: "firecrawl/skills"
description: "Agent Skills from firecrawl/skills."
source: https://github.com/firecrawl/skills
ref: main
license: ISC
licenseName: "ISC License"
canonical: https://skillsdocs.com/firecrawl/skills
base: https://github.com/firecrawl/skills/blob/main/
chapters: 7
inlined: 7
withheld: 0
words: 3728
updated: 2026-08-06T14:18:10Z
generator: "Skills Docs"
---

> **firecrawl/skills** — every Agent Skill in this repository, inlined verbatim.
>
> Canonical HTML: https://skillsdocs.com/firecrawl/skills
> Per-chapter Markdown: https://skillsdocs.com/firecrawl/skills/<skill>.md
> Machine manifest: https://skillsdocs.com/firecrawl/skills/.well-known/agent-skills/index.json
> JSON: https://skillsdocs.com/api/v1/books/firecrawl/skills
> Install: `npx skills add firecrawl/skills`
> Upstream: https://github.com/firecrawl/skills @ `main`
> Licence: ISC
>
> Content is mirrored from GitHub and © its authors, served unmodified. Takedown: https://github.com/DreambaseAI/skillsdocs/issues/new?labels=takedown&title=Takedown+request

# firecrawl/skills


- **Chapters:** 7
- **Inlined:** 7 (licence detected)
- **Words:** 3,728
- **Reading time:** 18 min
- **Stars:** 75

## Table of contents

1. [firecrawl-build-interact](https://skillsdocs.com/firecrawl/skills/firecrawl-build-interact.md) — Integrate Firecrawl `/interact` into product code for dynamic pages and browser actions after scraping. Use when a feature needs clicks, form fills, pagination…
2. [firecrawl-build-onboarding](https://skillsdocs.com/firecrawl/skills/firecrawl-build-onboarding.md) — Get Firecrawl credentials and SDK setup into a project. Use when an application needs `FIRECRAWL_API_KEY`, when an agent should add Firecrawl to `.env`, when t…
3. [firecrawl-build-scrape](https://skillsdocs.com/firecrawl/skills/firecrawl-build-scrape.md) — Integrate Firecrawl `/scrape` into product code for single-page extraction. Use when an app already has a URL and needs markdown, HTML, links, screenshots, met…
4. [firecrawl-build-search](https://skillsdocs.com/firecrawl/skills/firecrawl-build-search.md) — Integrate Firecrawl `/search` into product code and agent workflows. Use when an app needs discovery before extraction, when the feature starts with a query in…
5. [firecrawl-build](https://skillsdocs.com/firecrawl/skills/firecrawl-build.md) — No description.
6. [firecrawl-developer-index](https://skillsdocs.com/firecrawl/skills/firecrawl-developer-index.md) — Answer a developer question — code behaviour, a library or framework, an API contract, an error message, a known bug — from issues, merged pull requests, repos…
7. [firecrawl-research-index](https://skillsdocs.com/firecrawl/skills/firecrawl-research-index.md) — Find the papers that answer a research query with Firecrawl Research, using semantic search, semantic and structural expansion, and in-body verification. Alway…


## Front matter

_The repository README, verbatim except that relative links are resolved against https://github.com/firecrawl/skills/blob/main/._

# Firecrawl Skills

A collection of skills for AI coding agents following the [Agent Skills](https://agentskills.io) format. Available as a plugin for Claude Code, Cursor, and OpenAI Codex.

This repo is the app-integration counterpart to [`firecrawl/cli`](https://github.com/firecrawl/cli).

- Use this repo when an agent is building a product that calls Firecrawl APIs.
- Use `firecrawl/cli` when an agent needs better web access during its own work: search the web, scrape pages, crawl docs, or interact with live sites from the terminal.

## Install

One command installs both the CLI skills and these build skills:

```bash
npx -y firecrawl-cli@latest init --all --browser
```

Or install just this repo's skills directly:

```bash
npx skills add firecrawl/skills
```

## Available Skills

| Skill                                                               | Description                                                             | Source        |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------- |
| [`firecrawl-build`](https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build)                       | Firecrawl application API umbrella skill                                | Authored here |
| [`firecrawl-build-onboarding`](https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-onboarding) | Get `FIRECRAWL_API_KEY` into a project and choose the right SDK/docs    | Authored here |
| [`firecrawl-build-scrape`](https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-scrape)         | Integrate `/scrape` for single-page extraction                          | Authored here |
| [`firecrawl-build-search`](https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-search)         | Integrate `/search` for discovery-first workflows                       | Authored here |
| [`firecrawl-build-interact`](https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-interact)     | Integrate `/interact` for clicks, forms, and dynamic flows after scrape | Authored here |

## MCP Server

The plugin includes Firecrawl MCP configuration for the official [Firecrawl MCP server](https://github.com/firecrawl/firecrawl-mcp-server), so editors that support bundled MCP metadata can wire Firecrawl tools with `FIRECRAWL_API_KEY`.

## Plugins

This repo serves as a plugin for multiple platforms:

- **Claude Code** - `.claude-plugin/`
- **Cursor** - `.cursor-plugin/`
- **OpenAI Codex** - `.codex-plugin/`

## Editing Skills

All current skills in this repo are authored here and can be edited directly in this repo.

If Firecrawl later syncs skills from other repos, that distinction should be documented here and in `AGENTS.md`.

## Prerequisites

- A Firecrawl account or self-hosted Firecrawl deployment
- API key stored in `FIRECRAWL_API_KEY` for cloud usage

Get your API key at [firecrawl.dev/app](https://www.firecrawl.dev/app).

If you do not already have an API key, use [`firecrawl-build-onboarding`](https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-onboarding) in this repo. It includes the browser authorization flow directly and does not require the website onboarding skill.

## Relationship To The CLI Repo

Both repos are installed by the same command:

```bash
npx -y firecrawl-cli@latest init --all --browser
```

This installs the Firecrawl CLI, the CLI skills (for live web work), and these build skills (for app integration) together. The difference is what you use after install:

- **CLI skills** (`firecrawl/cli`) — for searching the web, scraping pages, interacting with live sites during the current session
- **Build skills** (this repo) — for integrating Firecrawl into application code

The build skills here focus on:

- getting an API key into `.env`
- choosing fresh project vs existing project flow
- choosing the right endpoint
- asking what Firecrawl should do in the product
- wiring SDKs or REST calls into code
- inspecting an existing repo before integrating
- running a smoke test so the integration is proven, not just written
- avoiding CLI-only guidance when the real task is product integration

Default build flow:

1. decide whether the project is fresh or existing
2. ask what Firecrawl should do in the product
3. route to `/scrape`, `/search`, or `/interact`
4. integrate using the project's existing conventions
5. verify one real Firecrawl request succeeds

## Source Of Truth

This repo follows the same two usage paths described in Firecrawl's onboarding skill (same install, different use cases):

- Path A: live web tools during the current session (CLI skills)
- Path B: integrate Firecrawl into application code (build skills)

The onboarding source lives at:

- [`firecrawl-web/public/agent-onboarding/SKILL.md`](https://www.firecrawl.dev/agent-onboarding/SKILL.md)

## Docs (Source of Truth)

Read the source-of-truth page for your project language:

- **Node / TypeScript**: [docs.firecrawl.dev/agent-source-of-truth/node](https://docs.firecrawl.dev/agent-source-of-truth/node)
- **Python**: [docs.firecrawl.dev/agent-source-of-truth/python](https://docs.firecrawl.dev/agent-source-of-truth/python)
- **Rust**: [docs.firecrawl.dev/agent-source-of-truth/rust](https://docs.firecrawl.dev/agent-source-of-truth/rust)
- **Java**: [docs.firecrawl.dev/agent-source-of-truth/java](https://docs.firecrawl.dev/agent-source-of-truth/java)
- **Elixir**: [docs.firecrawl.dev/agent-source-of-truth/elixir](https://docs.firecrawl.dev/agent-source-of-truth/elixir)
- **cURL / REST**: [docs.firecrawl.dev/agent-source-of-truth/curl](https://docs.firecrawl.dev/agent-source-of-truth/curl)

## Scope Boundaries

This repo does not try to duplicate:

- full CLI command references
- terminal flags and output handling rules
- editor setup flows

If a task is "search the web for me right now" or "scrape this URL during the session", use the CLI skills (already installed alongside these build skills).
If a task is "add Firecrawl to this codebase", use the build skills in this repo.

## License

ISC

## Notes

- Evals are intentionally deferred in this first pass while the authored skill set settles.
- If the CLI repo grows more integration-focused material, keep that content high-level there and preserve this repo as the detailed implementation home.

---

<!-- chapter:begin slug=firecrawl-build-interact position=1 -->

## 1. firecrawl-build-interact

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-interact/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-interact/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-build-interact.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-build-interact
description: Integrate Firecrawl `/interact` into product code for dynamic pages and browser actions after scraping. Use when a feature needs clicks, form fills, pagination, authentication-aware flows, or other multi-step interactions that plain `/scrape` cannot complete.
license: ISC
metadata:
  author: firecrawl
  version: "0.1.0"
  homepage: https://www.firecrawl.dev
  source: https://github.com/firecrawl/skills
inputs:
  - name: FIRECRAWL_API_KEY
    description: Firecrawl API key for hosted Firecrawl requests.
    required: true
  - name: FIRECRAWL_API_URL
    description: Optional base URL for self-hosted Firecrawl deployments.
    required: false
---

# Firecrawl Build Interact

Use this when `/scrape` is not enough because the feature needs to act on the page.

## Use This When

- content appears only after clicks, typing, or navigation
- the feature needs forms, pagination, filters, or multi-step flows
- the product must stay in the same browser context after scraping

## Default Recommendations

- Start with `/scrape`, then escalate to `/interact`.
- Keep `/interact` scoped to the smallest browser workflow that unlocks the data.
- Use persistent profiles only when the feature truly needs authenticated state across sessions.

## Common Product Patterns

- search forms and faceted filters
- paginated result sets
- login-gated dashboards or tools
- flows where the page must be explored before extraction is complete

## Implementation Notes

- `/interact` is the right tool when the page must be manipulated, not just read.
- Keep prompts or action code specific to the product flow.
- If the use case is fully open-ended browser automation, evaluate whether a browser sandbox is a better product fit.

## Escalation Rules

- If the page can be read directly, stay on [firecrawl-build-scrape](../firecrawl-build-scrape/SKILL.md).

## Docs (Source of Truth)

Read the source-of-truth page for your project language before writing integration code:

- **Node / TypeScript**: [docs.firecrawl.dev/agent-source-of-truth/node](https://docs.firecrawl.dev/agent-source-of-truth/node)
- **Python**: [docs.firecrawl.dev/agent-source-of-truth/python](https://docs.firecrawl.dev/agent-source-of-truth/python)
- **Rust**: [docs.firecrawl.dev/agent-source-of-truth/rust](https://docs.firecrawl.dev/agent-source-of-truth/rust)
- **Java**: [docs.firecrawl.dev/agent-source-of-truth/java](https://docs.firecrawl.dev/agent-source-of-truth/java)
- **Elixir**: [docs.firecrawl.dev/agent-source-of-truth/elixir](https://docs.firecrawl.dev/agent-source-of-truth/elixir)
- **cURL / REST**: [docs.firecrawl.dev/agent-source-of-truth/curl](https://docs.firecrawl.dev/agent-source-of-truth/curl)

## See Also

- [firecrawl-build](../firecrawl-build/SKILL.md)
- [firecrawl-build-scrape](../firecrawl-build-scrape/SKILL.md)
- [firecrawl-build-search](../firecrawl-build-search/SKILL.md)

<!-- chapter:end slug=firecrawl-build-interact -->

---

<!-- chapter:begin slug=firecrawl-build-onboarding position=2 -->

## 2. firecrawl-build-onboarding

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-onboarding/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-onboarding/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-build-onboarding.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

Bundled files (3), referenced from this skill's directory:
  - `references/auth-flow.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-onboarding/references/auth-flow.md
  - `references/project-setup.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-onboarding/references/project-setup.md
  - `references/sdk-installation.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-onboarding/references/sdk-installation.md

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-build-onboarding
description: Get Firecrawl credentials and SDK setup into a project. Use when an application needs `FIRECRAWL_API_KEY`, when an agent should add Firecrawl to `.env`, when the user wants to authenticate Firecrawl for app code, or when choosing the first SDK and docs for a new Firecrawl integration. This skill includes its own browser auth flow, so it does not depend on the website onboarding skill.
license: ISC
metadata:
  author: firecrawl
  version: "0.1.0"
  homepage: https://www.firecrawl.dev
  source: https://github.com/firecrawl/skills
inputs:
  - name: FIRECRAWL_API_KEY
    description: Firecrawl API key used for hosted Firecrawl API requests.
    required: true
  - name: FIRECRAWL_API_URL
    description: Optional base URL for self-hosted Firecrawl deployments.
    required: false
references:
  - references/auth-flow.md
  - references/sdk-installation.md
  - references/project-setup.md
---

# Firecrawl Build Onboarding

Use this skill for the application-integration path from Firecrawl's onboarding flow.

## Install

If you haven't installed yet, one command sets up both the CLI tools
(for live web work) and the build skills (for app integration):

```bash
npx -y firecrawl-cli@latest init --all --browser
```

This installs the Firecrawl CLI, the CLI skills, and these build skills
together. It also opens browser auth so the human can sign in or create
an account. No separate `npx skills add` step is needed.

## Use This When

- a project needs `FIRECRAWL_API_KEY`
- the user wants Firecrawl wired into `.env`
- you are adding Firecrawl to an app for the first time
- you need to choose the first SDK or REST path

If the human still needs to sign up, sign in, or authorize access in the browser, use the auth flow reference in this skill.

## Quick Start

If the user already has an API key, place it in `.env`:

```dotenv
FIRECRAWL_API_KEY=fc-...
```

If the project is self-hosted, also set:

```dotenv
FIRECRAWL_API_URL=https://your-firecrawl-instance.example.com
```

Then decide which integration path applies:

- **Fresh project** -> choose the target stack, install the SDK, add the first Firecrawl call, and run a smoke test
- **Existing project** -> inspect the repo first, then integrate Firecrawl where the project already handles third-party APIs and env vars

## What Do You Need?

| Task | Reference |
|---|---|
| **Run the browser auth flow and save `FIRECRAWL_API_KEY`** | [references/auth-flow.md](references/auth-flow.md) |
| **Install the right SDK** | [references/sdk-installation.md](references/sdk-installation.md) |
| **Put credentials into `.env` or project config** | [references/project-setup.md](references/project-setup.md) |
| **Choose the right endpoint after setup** | [firecrawl-build](../firecrawl-build/SKILL.md) |
| **Need live web tooling during this task** | The CLI skills are already installed from the same command |
| **Start implementation from a known URL** | [firecrawl-build-scrape](../firecrawl-build-scrape/SKILL.md) |
| **Start implementation from a query** | [firecrawl-build-search](../firecrawl-build-search/SKILL.md) |

## Docs (Source of Truth)

Read the source-of-truth page for your project language for SDK usage, schemas, and examples:

- **Node / TypeScript**: [docs.firecrawl.dev/agent-source-of-truth/node](https://docs.firecrawl.dev/agent-source-of-truth/node)
- **Python**: [docs.firecrawl.dev/agent-source-of-truth/python](https://docs.firecrawl.dev/agent-source-of-truth/python)
- **Rust**: [docs.firecrawl.dev/agent-source-of-truth/rust](https://docs.firecrawl.dev/agent-source-of-truth/rust)
- **Java**: [docs.firecrawl.dev/agent-source-of-truth/java](https://docs.firecrawl.dev/agent-source-of-truth/java)
- **Elixir**: [docs.firecrawl.dev/agent-source-of-truth/elixir](https://docs.firecrawl.dev/agent-source-of-truth/elixir)
- **cURL / REST**: [docs.firecrawl.dev/agent-source-of-truth/curl](https://docs.firecrawl.dev/agent-source-of-truth/curl)

## After Setup

Once the key is present:

1. decide whether this is a fresh project or an existing codebase
2. ask what Firecrawl should do in the product
3. pick the narrowest endpoint that matches that behavior
4. read the source-of-truth page for the project language before writing code
5. add the SDK or REST call in code
6. run a smoke test that proves one real Firecrawl request succeeds
7. use the endpoint-specific skills in this repo for implementation guidance
8. if you also need live web tooling during the current task, the CLI skills are already installed — use `firecrawl/cli`

<!-- chapter:end slug=firecrawl-build-onboarding -->

---

<!-- chapter:begin slug=firecrawl-build-scrape position=3 -->

## 3. firecrawl-build-scrape

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-scrape/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-scrape/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-build-scrape.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

Bundled files (1), referenced from this skill's directory:
  - `references/freshness-and-liveness.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-scrape/references/freshness-and-liveness.md

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-build-scrape
description: Integrate Firecrawl `/scrape` into product code for single-page extraction. Use when an app already has a URL and needs markdown, HTML, links, screenshots, metadata, or structured page output. Prefer this skill over broader crawl patterns when the feature is page-level.
license: ISC
metadata:
  author: firecrawl
  version: "0.1.0"
  homepage: https://www.firecrawl.dev
  source: https://github.com/firecrawl/skills
inputs:
  - name: FIRECRAWL_API_KEY
    description: Firecrawl API key for hosted Firecrawl requests.
    required: true
  - name: FIRECRAWL_API_URL
    description: Optional base URL for self-hosted Firecrawl deployments.
    required: false
references:
  - references/freshness-and-liveness.md
---

# Firecrawl Build Scrape

Use this when the application already has the URL and needs content from one page.

## Use This When

- the feature starts from a known URL
- you need page content for retrieval, summarization, enrichment, or monitoring
- you want the default extraction primitive before considering `/interact`

## Default Recommendations

- Return `markdown` unless the feature truly needs another format.
- Use `onlyMainContent` for article-like pages where nav and chrome add noise.
- Add waits or other rendering options only when the page needs them.

## Freshness and Liveness

- Firecrawl reuses recently indexed content, which is what makes repeat reads of the same URL fast. Set `maxAge` (milliseconds) to bound how old a reused copy may be, or `maxAge: 0` to skip index reuse for a freshness-critical read.
- Read `metadata.cacheState` and `metadata.cachedAt` to see what you actually got.
- A successful scrape reports what the page returned. Whether the thing the page describes is still active is a source-specific judgment your code makes.
- See [references/freshness-and-liveness.md](references/freshness-and-liveness.md) for the tradeoff, the metadata, and the decision rule.

## Common Product Patterns

- knowledge ingestion from known URLs
- enrichment from a company, product, or docs page
- pricing, changelog, and documentation extraction
- page-level quality checks or monitoring

## Escalation Rules

- If you do not have the URL yet, start with [firecrawl-build-search](../firecrawl-build-search/SKILL.md).
- If content requires clicks, typing, or multi-step navigation, escalate to [firecrawl-build-interact](../firecrawl-build-interact/SKILL.md).

## Implementation Notes

- Keep the integration narrow: one feature, one URL, one extraction contract.
- Treat `/scrape` as the default primitive for downstream LLM or indexing pipelines.
- Request richer formats only when the consumer needs them, such as links, screenshots, or branding data.

## Docs (Source of Truth)

Read the source-of-truth page for your project language before writing integration code:

- **Node / TypeScript**: [docs.firecrawl.dev/agent-source-of-truth/node](https://docs.firecrawl.dev/agent-source-of-truth/node)
- **Python**: [docs.firecrawl.dev/agent-source-of-truth/python](https://docs.firecrawl.dev/agent-source-of-truth/python)
- **Rust**: [docs.firecrawl.dev/agent-source-of-truth/rust](https://docs.firecrawl.dev/agent-source-of-truth/rust)
- **Java**: [docs.firecrawl.dev/agent-source-of-truth/java](https://docs.firecrawl.dev/agent-source-of-truth/java)
- **Elixir**: [docs.firecrawl.dev/agent-source-of-truth/elixir](https://docs.firecrawl.dev/agent-source-of-truth/elixir)
- **cURL / REST**: [docs.firecrawl.dev/agent-source-of-truth/curl](https://docs.firecrawl.dev/agent-source-of-truth/curl)

## See Also

- [firecrawl-build](../firecrawl-build/SKILL.md)
- [firecrawl-build-search](../firecrawl-build-search/SKILL.md)
- [firecrawl-build-interact](../firecrawl-build-interact/SKILL.md)

<!-- chapter:end slug=firecrawl-build-scrape -->

---

<!-- chapter:begin slug=firecrawl-build-search position=4 -->

## 4. firecrawl-build-search

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build-search/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build-search/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-build-search.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-build-search
description: Integrate Firecrawl `/search` into product code and agent workflows. Use when an app needs discovery before extraction, when the feature starts with a query instead of a URL, or when the system should search the web and optionally hydrate result content.
license: ISC
metadata:
  author: firecrawl
  version: "0.1.0"
  homepage: https://www.firecrawl.dev
  source: https://github.com/firecrawl/skills
inputs:
  - name: FIRECRAWL_API_KEY
    description: Firecrawl API key for hosted Firecrawl requests.
    required: true
  - name: FIRECRAWL_API_URL
    description: Optional base URL for self-hosted Firecrawl deployments.
    required: false
---

# Firecrawl Build Search

Use this when the application starts with a query, not a URL.

## Use This When

- the user asks a question and the product must discover sources first
- the feature needs current web results
- you want to turn a search query into a shortlist of pages for later scraping

## Default Recommendations

- Use `/search` first when URL discovery is part of the product behavior.
- Keep search and extraction conceptually separate unless scraping search results is clearly required.
- Prefer selective follow-up extraction over broad hydration when cost or latency matters.

## Common Product Patterns

- answer generation with cited sources
- company, competitor, or topic discovery
- research workflows that produce a shortlist before deeper extraction
- query-to-URL pipelines for later `/scrape` or `/interact`

## Escalation Rules

- If you already have the URL, use [firecrawl-build-scrape](../firecrawl-build-scrape/SKILL.md).
- If the result page then requires clicks or form interaction, escalate to [firecrawl-build-interact](../firecrawl-build-interact/SKILL.md).

## Implementation Notes

- Treat `/search` as discovery, ranking, and source selection.
- Be explicit about whether the product needs snippets, URLs, or full result content.
- Keep the query contract stable so downstream scraping logic stays predictable.

## Docs (Source of Truth)

Read the source-of-truth page for your project language before writing integration code:

- **Node / TypeScript**: [docs.firecrawl.dev/agent-source-of-truth/node](https://docs.firecrawl.dev/agent-source-of-truth/node)
- **Python**: [docs.firecrawl.dev/agent-source-of-truth/python](https://docs.firecrawl.dev/agent-source-of-truth/python)
- **Rust**: [docs.firecrawl.dev/agent-source-of-truth/rust](https://docs.firecrawl.dev/agent-source-of-truth/rust)
- **Java**: [docs.firecrawl.dev/agent-source-of-truth/java](https://docs.firecrawl.dev/agent-source-of-truth/java)
- **Elixir**: [docs.firecrawl.dev/agent-source-of-truth/elixir](https://docs.firecrawl.dev/agent-source-of-truth/elixir)
- **cURL / REST**: [docs.firecrawl.dev/agent-source-of-truth/curl](https://docs.firecrawl.dev/agent-source-of-truth/curl)

## See Also

- [firecrawl-build](../firecrawl-build/SKILL.md)
- [firecrawl-build-scrape](../firecrawl-build-scrape/SKILL.md)
- [firecrawl-build-interact](../firecrawl-build-interact/SKILL.md)

<!-- chapter:end slug=firecrawl-build-search -->

---

<!-- chapter:begin slug=firecrawl-build position=5 -->

## 5. firecrawl-build

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-build/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-build.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

Bundled files (6), referenced from this skill's directory:
  - `references/auth-and-env.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/references/auth-and-env.md
  - `references/endpoint-selection.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/references/endpoint-selection.md
  - `references/integration-patterns.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/references/integration-patterns.md
  - `references/project-intake.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/references/project-intake.md
  - `references/sdk-installation.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/references/sdk-installation.md
  - `references/verification.md` — https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-build/references/verification.md

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-build
description: Integrate Firecrawl into application code whenever a product, agent, or workflow needs web data inside the app: web search, live search results, page scraping, structured extraction, or browser interaction. Use when building any feature that needs data from the web in code, even if the user does not mention Firecrawl explicitly and only describes wanting web data, website content, search, scraping, or interaction in an application. Trigger for Firecrawl requests, "fire girl" shorthand, and generic app-level web-data needs that should map to `/scrape`, `/search`, or `/interact`. Do not use this skill for one-off terminal-only web tasks during the current session; use `firecrawl/cli` for those.
license: ISC
metadata:
  author: firecrawl
  version: "0.1.0"
  homepage: https://www.firecrawl.dev
  source: https://github.com/firecrawl/skills
inputs:
  - name: FIRECRAWL_API_KEY
    description: Firecrawl API key for cloud usage. Store it in `.env` or the runtime environment before making Firecrawl API calls.
    required: true
  - name: FIRECRAWL_API_URL
    description: Optional base URL for self-hosted Firecrawl deployments. Only set this when the project is not using the hosted `api.firecrawl.dev`.
    required: false
references:
  - references/project-intake.md
  - references/endpoint-selection.md
  - references/integration-patterns.md
  - references/sdk-installation.md
  - references/auth-and-env.md
  - references/verification.md
---

# Firecrawl Build

Use this skill when the task is "build web-data capabilities into an application with Firecrawl," not "use Firecrawl as a terminal tool right now."

Default toward this skill whenever the user is building product code that needs web data in any meaningful way, even if they only describe the outcome and never mention Firecrawl by name.

## Use This When

- a project needs live web data, website content, or retrieval from the web inside the product
- a feature needs web search, search results, or discovery before extraction
- a feature needs scraping, extraction, hydration, or structured content from known URLs
- a feature needs browser interaction, clicks, form fills, or navigation after loading a page
- an agent, backend, automation, or workflow should call Firecrawl from application code
- the user mentions Firecrawl, "fire girl," or describes Firecrawl-like web data needs without naming the tool
- you need to choose the right endpoint before implementation
- you need `FIRECRAWL_API_KEY` in the project

If the task is "search the web," "scrape this page for me," or "interact with a live site during this session," install and use `firecrawl/cli` instead.

## Quick Start

First choose the project mode:

- **Fresh project** -> choose the stack, install the SDK, add env vars, and run a smoke test
- **Existing project** -> inspect the repo first, match its conventions, then integrate in place

Then ask the required question:

- **What web data should this product get from the web, and how should it get it?**

If the request sounds like "I need web data in my app," "I need search in the product," "I need to scrape pages into the workflow," or "I need the app to interact with a site," start here and then narrow to the endpoint.

Route from that answer to the narrowest endpoint that fits:

- `/scrape` for one known URL
- `/search` when you have a query instead of a URL
- `/interact` when `/scrape` must continue into clicks, forms, or navigation

## Required Intake

Always do these before writing integration code:

1. Decide whether this is a **fresh project** or an **existing project**.
2. Ask what web data the product needs and what Firecrawl should do in the product.
3. If this is an existing project, inspect the repo before choosing SDK, REST, file locations, or env handling.

For the full checklist, see [references/project-intake.md](references/project-intake.md).

## What Do You Need?

| Task                                                 | Reference                                                                |
| ---------------------------------------------------- | ------------------------------------------------------------------------ |
| **Choose fresh project vs existing project flow**    | [references/project-intake.md](references/project-intake.md)             |
| **Choose the right endpoint**                        | [references/endpoint-selection.md](references/endpoint-selection.md)     |
| **Wire Firecrawl into product code**                 | [references/integration-patterns.md](references/integration-patterns.md) |
| **Install an SDK or use REST**                       | [references/sdk-installation.md](references/sdk-installation.md)         |
| **Set up `FIRECRAWL_API_KEY` or self-hosted config** | [references/auth-and-env.md](references/auth-and-env.md)                 |
| **Get credentials into the project**                 | [firecrawl-build-onboarding](../firecrawl-build-onboarding/SKILL.md)     |
| **Implement single-page extraction**                 | [firecrawl-build-scrape](../firecrawl-build-scrape/SKILL.md)             |
| **Implement discovery-first flows**                  | [firecrawl-build-search](../firecrawl-build-search/SKILL.md)             |
| **Implement post-scrape browser actions**            | [firecrawl-build-interact](../firecrawl-build-interact/SKILL.md)         |
| **Verify the integration actually works**            | [references/verification.md](references/verification.md)                 |

## Docs Are the Source of Truth

These language-specific reference pages are the canonical source of truth
for SDK usage, request/response schemas, parameters, and endpoint behavior.
Read the page that matches the project language before writing integration code:

- **Node / TypeScript**: [docs.firecrawl.dev/agent-source-of-truth/node](https://docs.firecrawl.dev/agent-source-of-truth/node)
- **Python**: [docs.firecrawl.dev/agent-source-of-truth/python](https://docs.firecrawl.dev/agent-source-of-truth/python)
- **Rust**: [docs.firecrawl.dev/agent-source-of-truth/rust](https://docs.firecrawl.dev/agent-source-of-truth/rust)
- **Java**: [docs.firecrawl.dev/agent-source-of-truth/java](https://docs.firecrawl.dev/agent-source-of-truth/java)
- **Elixir**: [docs.firecrawl.dev/agent-source-of-truth/elixir](https://docs.firecrawl.dev/agent-source-of-truth/elixir)
- **cURL / REST**: [docs.firecrawl.dev/agent-source-of-truth/curl](https://docs.firecrawl.dev/agent-source-of-truth/curl)

These skills describe when and why to use each endpoint. For how to call
them, read the source-of-truth page for your language.

## Default Integration Order

1. Get `FIRECRAWL_API_KEY` or `FIRECRAWL_API_URL` right.
2. Decide whether this is a fresh project or an existing codebase.
3. Ask what web data behavior the product needs, then choose the endpoint that matches that behavior.
4. For existing projects, inspect the repo and match its conventions before coding.
5. Install the SDK for the target stack, or call REST directly.
6. Read the source-of-truth page for your project language before writing integration code.
7. Keep endpoint-specific implementation details in the narrower skills linked above.
8. Run a smoke test that proves a real Firecrawl request succeeds.

## Boundary With The CLI

Both this repo and the CLI skills are installed by the same command:

```bash
npx -y firecrawl-cli@latest init --all --browser
```

Use these build skills for application integration. Use `firecrawl/cli`
for live web work during the current session (one-off research, terminal
workflows, editor setup). Both are available after install.

<!-- chapter:end slug=firecrawl-build -->

---

<!-- chapter:begin slug=firecrawl-developer-index position=6 -->

## 6. firecrawl-developer-index

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-developer-index/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-developer-index/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-developer-index.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-developer-index
description: Answer a developer question — code behaviour, a library or framework, an API contract, an error message, a known bug — from issues, merged pull requests, repository READMEs, and curated documentation sites with Firecrawl Developer. Always use this skill for any programming question whose answer belongs in a primary source rather than a general web page.
---

# Firecrawl Developer Index

Answer a developer question from the primary source: the issue where the bug was reported, the merged pull request that fixed it, the README or documentation page that states the contract. A blog post that describes a behaviour is a weaker answer than the passage that defines it, so reach for the index first and the open web second.

There is **no fixed recipe**. Read the question, decide what kind it is, and choose the approach below. A literal error string wants a different move than "how do I do X". Don't run machinery a question doesn't call for.

## The tools, and what each is uniquely good at

- HTTP: **`GET|POST https://api.firecrawl.dev/v2/search/developer`**
  MCP: **`firecrawl_developer_search(query, k?, skills?)`**
  CLI: **`firecrawl developer <query> [--limit <n>] [--skills-only]`**
  Ranked results over the whole index. Each carries `id` (`issue:owner/repo#123`), `type` (`doc` | `issue` | `pull_request` | `readme`), `url`, `title`, and the **matched passages in markdown**, so tables and code blocks survive.
  The default first move for a developer question. It is the only surface that returns the passages, which is what lets you answer instead of pointing at a page.
  `k` / `--limit` is 1–100 and defaults to 10. `skills="only"` / `--skills-only` restricts the search to agent-skill files.
  Keyless; send `Authorization: Bearer $FIRECRAWL_API_KEY` for higher rate limits.

- MCP: **`firecrawl_search(query, categories: ["developer"])`**
  CLI: **`firecrawl search <query> --categories developer`**
  Developer hits in a `developer` group beside `web`, each with `url`, `title`, `description` (the matched passage), `position`, and `category: "developer"` — web results carry no `category`, so that is the field to key on when merging.
  Use this when you are **already** running a web search and want developer sources weighed in the same call. It exposes none of the filters and no passage control.

- MCP: **`firecrawl_scrape(url)` / `firecrawl_search(query)`**
  CLI: **`firecrawl scrape <url>` / `firecrawl search <query>`**
  General web fetch and search, for what no primary source states: a comparison between two libraries, an outage, a migration write-up, a project with no public repository or indexed docs.
  Also the follow-through when a hit is the right page but you need all of it — `scrape` the result's `url`.

## Filters, and what each one costs you

Only the HTTP surface takes these. On `GET`, pass `types=issue,pull_request` or repeat the parameter; on `POST`, pass arrays. All are optional.

- `types` — which of `doc`, `issue`, `pull_request`, `readme` to search. Defaults to all four. Narrowing here is the cheapest way to sharpen a query.
- `repos` (`owner/name`) scopes the repository half, meaning `issue`, `pull_request`, and `readme`; `sources` (documentation source ids, at most 20) scopes the documentation half, meaning `doc`. Passing both **unions** the halves rather than intersecting them. Both echo back in the response with `indexed: true|false` — that is how you tell "not in the index" from "found nothing".
- A filter that cannot match any requested `type` is a `400`, not an empty list: `repos` with no repository type in `types`, or `sources` without `doc`.
- `passages` (1–5, default 1) is the *maximum* passages per result, not a guarantee. Raise it when one page is clearly the right page but the first passage is the wrong part of it.
- `language`, `topic`, `license`, `min_stars`, `max_stars`, `archived`, `fork` describe a **repository**. Most documentation pages in the index have no repository behind them, so no repository fact can admit or exclude one. Send any of these without a `sources` scope and the response holds repository evidence only — `issue`, `pull_request`, `readme` — with `coverage` reporting `doc` as `unavailable`. That is the design, not an index fault: do not retry it and do not report the index broken. To keep documentation, drop the repository filters, or scope the documentation half with `sources` and read `coverage` to confirm `doc` answered.

## Match the approach to the question

- **Literal error message or stack-trace string** → search the string itself plus the library name, with `types=["issue","pull_request"]`. Whoever hit it filed it. If nothing matches, strip the volatile parts (paths, line numbers, ids, addresses) and retry — the invariant middle of the message is what is indexed.
- **Conceptual "how do I do X"** → the full question in natural language, all four types. The answer is usually a `doc` or a `readme`; raise `passages` before raising `k`.
- **Known bug** → the issue reports it, the merged pull request *fixes* it, and the fix is what you want. Search `types=["issue","pull_request"]`, then re-query the issue's own terms scoped to its repo with `types=["pull_request"]`. A merged PR's passages tell you what changed and in which direction.
- **API contract** ("what does X return", "is Y required", "what is the default") → `readme` and `doc` are authoritative and a blog post is not. Use `types=["readme","doc"]`. If the contract looks like it moved, follow up with `pull_request` for the change that moved it.
- **Version-specific behaviour** → an issue's opening report describes the broken version; its resolution supersedes it. Raise `passages` to see further into the thread, and read the resolution and the linked pull request before answering. Never answer from an opening report alone.
- **Scoped to one library** → `repos=["owner/name"]` when you know the slug, plus `sources` if you want its docs in the same call. If a scoped search comes back empty, read the echoed `indexed` flag first: `false` means nothing from that repo or source can ever match and no rephrasing will help — drop the scope and search the whole index, or go to the web.
- **Ecosystem-wide** ("which libraries do X", "who else hit this") → no scope. Use `language` / `topic` / `min_stars` to keep to maintained repositories, accepting that this gives up all `doc` results.
- **Agent skills and tooling conventions** → `skills="only"` / `--skills-only`.
- **Comparison, opinion, news, or an unindexed project** → the open web. `firecrawl_search`, then `firecrawl_scrape` whatever deserves a full read. Combining is often right: take the contract from the index and the trade-off from the web.

## Principles

- **Read `coverage` before concluding a source doesn't exist.** Every response reports `ok` | `degraded` | `unavailable` | `skipped` per type. `skipped` means your own `types` value did not ask for that type. `degraded` or `unavailable` means the gap came from the index **or from a filter you sent**, not from your query — drop the filter or widen, rather than retrying the same call or reporting that nothing exists. `ok` with no hits of that type is a genuine miss: rephrase.
- **Quote the passage, cite the `url`.** The passages are the evidence; hand them over rather than paraphrasing them into a claim the reader can't check. `title` is frequently absent on `doc` results — fall back to `url`.
- **A merge supersedes a report.** When an issue and a pull request disagree, the merged pull request is the current behaviour. Say which one you read.
- **Scope last, not first.** Search the whole index, then narrow with `types`, `repos`, or `sources` once you know what the hits look like. Scoping first hides the result that would have told you where to look.
- **Go to the web when the index has nothing to say.** Trade-offs, ecosystem opinion, and anything about an unindexed project are web questions. Don't force them through the index, and don't dress a general web page up as a primary source.

<!-- chapter:end slug=firecrawl-developer-index -->

---

<!-- chapter:begin slug=firecrawl-research-index position=7 -->

## 7. firecrawl-research-index

- **Source:** https://github.com/firecrawl/skills/blob/main/skills/firecrawl-research-index/SKILL.md
- **Raw:** https://raw.githubusercontent.com/firecrawl/skills/main/skills/firecrawl-research-index/SKILL.md
- **Markdown:** https://skillsdocs.com/firecrawl/skills/firecrawl-research-index.md
- **Licence:** ISC — https://spdx.org/licenses/ISC.html

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: firecrawl-research-index
description: Find the papers that answer a research query with Firecrawl Research, using semantic search, semantic and structural expansion, and in-body verification. Always use this skill for any literature-finding / paper-retrieval task — single-paper lookups or full multi-paper sets.
---

# Firecrawl Research Index

Find the research papers that answer a research query. Some questions have a single answer; many have several — and when in doubt, lean toward returning the fuller relevant set (most relevant first) rather than narrowing to one. A reader is better served seeing the neighboring methods and papers than having them silently dropped.

There is **no fixed recipe**. Read the query, decide what kind it is, and choose the approach below. Some queries need a single search; others need heavy sturctural/semantic expansion. Don't run machinery a query doesn't call for.

## The tools, and what each is uniquely good at

- MCP: **`firecrawl_research_search_papers(query, k?)`**
  CLI: **`firecrawl research search-papers <query> [--k <number>]`**
  Semantic (HyDE) search over **abstracts**. The natural first move for almost any query.
  If results look thin or all-alike, re-run with a different framing (sibling domain, rival method, dataset/benchmark name) rather than giving up.

- MCP: **`firecrawl_research_related_papers(seed_ids, intent, mode?, k?)`**
  CLI: **`firecrawl research related-papers <seedIds...> --intent <intent> [--mode <similar|citers|references>] [--k <number>]`**
  Semantic and structural expansion, ranked to your `intent`.
  This reaches papers semantic search *cannot*, and it's how you turn one good hit into the rest of a set.
  `mode=similar` → niche siblings; `citers` → who uses/builds on the seeds; `references` → what they build on / compare against.

- MCP: **`firecrawl_research_inspect_paper(id)`**
  CLI: **`firecrawl research inspect-paper <id>`**
  Canonical metadata for **one** paper: title, abstract, authors, categories, source ids, and dates.
  Use it after `search_papers` or `related_papers` when you need the complete citation/metadata for a candidate, or when you have an id from elsewhere and need to confirm what paper it resolves to.
  This does **not** read the paper body; use `read_paper` for specific full-text questions.

- MCP: **`firecrawl_research_read_paper(id, question)`**
  CLI: **`firecrawl research read-paper <id> --question <question>`**
  In-body passages of **one** paper, to verify a load-bearing constraint (a method actually used, a score actually reported, an affiliation, what a paper compares to).
  Use it to settle a specific doubt, not on everything.

- MCP: **`firecrawl_search(query)` / `firecrawl_scrape(url)`**
  CLI: **`firecrawl search <query>` / `firecrawl scrape <url>`**
  General **web** search and page fetch, for facts that don't live in paper abstracts: benchmark **leaderboards**, rankings, "who scores best / is largest / is most used."
  Find the ranking on the web, then map the top entries back to papers with `search_papers`.
  Reach for these only when the corpus can't answer the question on its own.

## Match the approach to the query

- **Single *named* paper** ("the Qwen3 report") → one `search_papers`, done. This is the only case that truly wants exactly one paper.
- **Paper by description / by method or technique** ("the paper that introduced X", "training-free N-gram detection of AI text") → find the best match, then assume there's a *family*: expand with `related_papers` and **include the closely-related methods/papers too**. Even when one paper is the exact literal match, surface and keep its neighbors — don't narrow to the single best hit and reason the rest out. Only treat it as one-answer if the query names a specific paper.
- **Enumeration / method-family** ("papers that do X", "alternatives to Adam", "benchmarks for Y") → the answer is a *set*, and this is where `related_papers` earns its keep: expand several strong anchors with `mode=similar`, re-seed from new strong hits. One search is never enough here.
- **Exhibiting** ("papers that *use* / exhibit property P") → the relevant papers apply P but their abstracts may not describe it. Go from P's defining paper outward via `citers`/`references`, and use `read_paper` to confirm a candidate actually uses P.
- **Superlative / leaderboard** ("best on benchmark X", "largest", "most popular") → the ranking lives on **leaderboards / the web**, not in any single abstract. Use `firecrawl_search` / `firecrawl_scrape` to find the benchmark's leaderboard or rankings, read off the top models/papers, then `search_papers` each to get its paper. As a fallback, search the benchmark and `read_paper` candidates for reported numbers. The hardest kind — cast wide.
- **Org / author filtered** ("from \<org\>", "by \<author\>") → topical match isn't enough; verify the affiliation/authorship (metadata or `read_paper`) before keeping a paper.
- **Compare-against** ("what does paper X benchmark against / build on") → the answer is *inside* paper X: `read_paper(X, ...)` or `related_papers([X], ..., mode="references")`.

## Principles

- **When in doubt, include.** For any topic / method / comparison question, return the relevant *family*, not just the single best match — err toward keeping a plausibly-relevant paper rather than dropping it. The neighboring methods are part of a good answer; don't reason close work out just because one paper is the most exact match.
- **Follow the literature, and keep what you find.** The seminal source, the competing methods, the close neighbors are usually a hop away — use `related_papers`, and *include* them, not just the first hit. Stopping at one good result is the most common way to leave the reader with half an answer.
- **Verify to exclude, not to gatekeep.** Use `read_paper` to rule a paper *out* when a hard constraint clearly fails (wrong org/author, doesn't actually report the score). When a paper is plausibly relevant, lean toward keeping it rather than demanding proof.
- **Only drop the clearly off-topic.** Don't pad with papers you're confident are unrelated — but that's a high bar; most plausibly-relevant work should make the cut.

<!-- chapter:end slug=firecrawl-research-index -->
