Installation
The official PHP SDK is maintained in the Firecrawl monorepo at apps/php-sdk. To install the Firecrawl PHP SDK, add the dependency via Composer:Requires PHP 8.1 or later.
Laravel Integration
The SDK includes first-class Laravel support with auto-discovery. After installing the package, publish the configuration file:.env file:
Usage
- Get an API key from firecrawl.dev
- Set the API key as an environment variable named
FIRECRAWL_API_KEY, or pass it withFirecrawlClient::create(apiKey: ...)
Using the Laravel Facade
In a Laravel application you can use theFirecrawl facade or dependency injection:
Scraping a URL
To scrape a single URL, use thescrape method.
JSON Extraction
Extract structured JSON withJsonFormat via the scrape endpoint:
Crawling a Website
To crawl a website and wait for completion, usecrawl.
Start a Crawl
Start a job without waiting usingstartCrawl.
Checking Crawl Status
Check crawl progress withgetCrawlStatus.
Cancelling a Crawl
Cancel a running crawl withcancelCrawl.
Crawl Errors
Fetch crawl-level errors (if any) withgetCrawlErrors.
Mapping a Website
Discover links on a site usingmap.
Searching the Web
Search with optional search settings usingsearch.
Batch Scraping
Scrape multiple URLs in parallel usingbatchScrape.
startBatchScrape, getBatchScrapeStatus, and cancelBatchScrape:
Agent
Run an AI-powered agent withagent.
startAgent, getAgentStatus, and cancelAgent:
Usage & Metrics
Check concurrency and remaining credits:Laravel AI SDK Tools
The SDK ships native tool classes for the Laravel AI SDK (laravel/ai), so agents can scrape, search, map, and crawl the web without an MCP server or manual HTTP calls.
Requires
firecrawl/firecrawl-sdk 1.9.0 or later, plus laravel/ai 0.9 or later (PHP 8.3+, Laravel 12+). The tool classes only load when laravel/ai is installed.FirecrawlClient from the container, so your existing config/firecrawl.php and FIRECRAWL_API_KEY setup is reused as is:
Available Tools
The tool names match the Firecrawl MCP server, so agents see the same vocabulary across surfaces. Register all four at once with the spread helper:
FirecrawlTools::all() passes one to all four tools:
Tool Parameters
Each tool exposes a small, model-facing schema. These are the parameters the agent can pass:
Out-of-range
limit values are clamped to the nearest bound rather than rejected, so a model that asks for 99 search results gets 20 instead of an error.
Tool Behavior
Tool failures such as rate limits, timeouts, and invalid URLs are returned to the model as readable error strings rather than thrown, so agent runs degrade gracefully. Outputs are capped to stay within model context: scrape results truncate at 80,000 characters, crawl pages at 15,000 characters each under a 100,000 character whole result budget, and search and map results drop tail items with an explicit omitted marker.firecrawl_search and firecrawl_map return JSON arrays of results. firecrawl_scrape returns the page as markdown.
Crawl Results
firecrawl_crawl waits up to 55 seconds for the crawl to finish, then returns a JSON object that makes the outcome explicit. Failed, cancelled, or partial crawls stay visible to the model through the status field rather than being silently truncated:
omittedPages counts pages dropped to stay inside the output budget, and note tells the model that more pages exist on the server and that it should use a smaller limit or scrape specific pages with firecrawl_scrape. The tool reports pagination instead of following it, so agents that need every page of a large crawl should use FirecrawlClient directly.
If the crawl is still running when the wait expires, the tool says so and reminds the model the crawl may still complete server-side. Crawl starts carry a UUID idempotency key, so an HTTP-level retry never creates a duplicate crawl.
If your agent runs inside a queued job, keep the crawl limit small or raise the worker’s job timeout. The wait, poll cadence, and per-page cap are protected properties, so extend the class to tune them:
Browser
The PHP SDK includes Browser Sandbox helpers.Create a Session
Execute Code
Scrape-Bound Interactive Session
Use a scrape job ID to run follow-up browser code in the same replayed context:interact(...)runs code in the scrape-bound browser session (and initializes it on first use).stopInteractiveBrowser(...)explicitly stops the interactive session when you are done.
List & Close Sessions
Configuration
FirecrawlClient::create() supports the following options:
Custom HTTP Client
You can pass a pre-configuredGuzzleHttp\ClientInterface implementation to control connection pooling, middleware, proxy settings, and other HTTP features. When provided, the timeoutSeconds setting is ignored in favor of the client’s own configuration.
Error Handling
The SDK throws runtime exceptions underFirecrawl\Exceptions.
Are you an AI agent that needs a Firecrawl API key? See firecrawl.dev/agent-onboarding/SKILL.md for automated onboarding instructions.

