# Firecrawl

> Turn any website into clean, AI-ready data: scrape pages to Markdown, map and crawl whole sites, search the web with full page content, and send a research agent to find information for you.

App · AI Agents · 20 actions. Web page: https://docs.lodol.com/docs/integrations/firecrawl

## Actions

### Cancel a batch scrape

Stop a running batch scrape so it reads, and costs, no more pages.

**Inputs**

- Batch scrape (`batch_id`, text, required): The batch scrape's id, as 'Scrape a list of pages' gave it back.

**Outputs**

- `batch_id` (text)
- `cancelled` (true/false)
- `status` (text)

**Example output**

```json
{
  "batch_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "cancelled": true,
  "status": "cancelled"
}
```

### Cancel a crawl

Stop a running crawl so it reads, and costs, no more pages. The pages already read stay available through 'Check a crawl'.

**Inputs**

- Crawl (`crawl_id`, text, required): The crawl's id, as 'Crawl a site' gave it back.

**Outputs**

- `cancelled` (true/false)
- `crawl_id` (text)
- `status` (text)

**Example output**

```json
{
  "cancelled": true,
  "crawl_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "status": "cancelled"
}
```

### Cancel an agent run

Stop an agent run that is still working.

**Inputs**

- Agent run (`agent_id`, text, required): The run's id, as 'Start an agent run' gave it back.

**Outputs**

- `agent_id` (text)
- `cancelled` (true/false)

**Example output**

```json
{
  "agent_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "cancelled": true
}
```

### Check a batch scrape

See how far a batch scrape has got and get the pages it has read so far. 'is_finished' says whether more is still coming.

**Inputs**

- Batch scrape (`batch_id`, text, required): The batch scrape's id, as 'Scrape a list of pages' gave it back.

**Outputs**

- `batch_id` (text): The batch scrape checked.
- `completed_at` (text)
- `created_at` (text)
- `credits_used` (number): Credits spent so far.
- `expires_at` (text): When Firecrawl discards the results.
- `has_more_pages` (true/false): True when there were more pages than one step fetches.
- `is_finished` (true/false): True once nothing more will happen.
- `page_count` (number): How many pages are in this response.
- `pages` (list): The pages read so far.
- `pages_completed` (number): How many pages have been read.
- `pages_total` (number): How many pages the job knows about.
- `status` (text): scraping, completed, failed or cancelled.

**Example output**

```json
{
  "batch_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "completed_at": "2026-09-21T10:00:20Z",
  "created_at": "2026-09-21T10:00:00Z",
  "credits_used": 1,
  "expires_at": "2026-09-22T10:00:00Z",
  "has_more_pages": false,
  "is_finished": true,
  "page_count": 1,
  "pages": [
    {
      "answer": null,
      "description": "Plans and prices.",
      "error": null,
      "final_url": "https://example.com/pricing",
      "html": null,
      "images": [],
      "json": null,
      "language": "en",
      "links": [
        "https://example.com/signup"
      ],
      "markdown": "# Pricing\n\nStarter is $19 a month...",
      "metadata": {
        "statusCode": 200,
        "title": "Pricing"
      },
      "raw_html": null,
      "screenshot": null,
      "status_code": 200,
      "summary": null,
      "title": "Pricing",
      "url": "https://example.com/pricing",
      "warning": null
    }
  ],
  "pages_completed": 1,
  "pages_total": 1,
  "status": "completed"
}
```

### Check a crawl

See how far a crawl has got and get the pages it has read so far. 'is_finished' says whether more is still coming.

**Inputs**

- Crawl (`crawl_id`, text, required): The crawl's id, as 'Crawl a site' gave it back.

**Outputs**

- `completed_at` (text)
- `crawl_id` (text): The crawl checked.
- `created_at` (text)
- `credits_used` (number): Credits spent so far.
- `expires_at` (text): When Firecrawl discards the results.
- `has_more_pages` (true/false): True when there were more pages than one step fetches.
- `is_finished` (true/false): True once nothing more will happen.
- `page_count` (number): How many pages are in this response.
- `pages` (list): The pages read so far.
- `pages_completed` (number): How many pages have been read.
- `pages_total` (number): How many pages the job knows about.
- `status` (text): scraping, completed, failed or cancelled.

**Example output**

```json
{
  "completed_at": "2026-09-21T10:00:20Z",
  "crawl_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "created_at": "2026-09-21T10:00:00Z",
  "credits_used": 1,
  "expires_at": "2026-09-22T10:00:00Z",
  "has_more_pages": false,
  "is_finished": true,
  "page_count": 1,
  "pages": [
    {
      "answer": null,
      "description": "Plans and prices.",
      "error": null,
      "final_url": "https://example.com/pricing",
      "html": null,
      "images": [],
      "json": null,
      "language": "en",
      "links": [
        "https://example.com/signup"
      ],
      "markdown": "# Pricing\n\nStarter is $19 a month...",
      "metadata": {
        "statusCode": 200,
        "title": "Pricing"
      },
      "raw_html": null,
      "screenshot": null,
      "status_code": 200,
      "summary": null,
      "title": "Pricing",
      "url": "https://example.com/pricing",
      "warning": null
    }
  ],
  "pages_completed": 1,
  "pages_total": 1,
  "status": "completed"
}
```

### Check an agent run

See whether an agent run has finished and get its answer. Answers are kept for 24 hours.

**Inputs**

- Agent run (`agent_id`, text, required): The run's id, as 'Start an agent run' gave it back.

**Outputs**

- `agent_id` (text)
- `credits_used` (number)
- `effort` (text)
- `error` (text): Why the run failed.
- `expires_at` (text)
- `is_finished` (true/false)
- `model` (text)
- `result` (object): The agent's answer, once it has finished.
- `status` (text): processing, completed or failed.

**Example output**

```json
{
  "agent_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "credits_used": 15,
  "effort": "low",
  "error": null,
  "expires_at": "2026-09-22T10:00:00Z",
  "is_finished": true,
  "model": "spark-2",
  "result": {
    "founders": [
      {
        "name": "Ada Lovelace"
      }
    ]
  },
  "status": "completed"
}
```

### Check credit usage

See how many credits are left this billing period. Costs nothing, so it also makes a good first step for checking the connection.

**Inputs**: None.

**Outputs**

- `billing_period_end` (text)
- `billing_period_start` (text)
- `plan_credits` (number)
- `remaining_credits` (number)

**Example output**

```json
{
  "billing_period_end": "2026-10-01T00:00:00Z",
  "billing_period_start": "2026-09-01T00:00:00Z",
  "plan_credits": 1000,
  "remaining_credits": 940
}
```

### Check the job queue

See how many of the account's jobs are running or waiting, and how many can run at once.

**Inputs**: None.

**Outputs**

- `active_jobs` (number)
- `jobs_in_queue` (number)
- `max_concurrency` (number)
- `most_recent_success` (text)
- `waiting_jobs` (number)

**Example output**

```json
{
  "active_jobs": 1,
  "jobs_in_queue": 1,
  "max_concurrency": 2,
  "most_recent_success": "2026-09-21T10:00:20Z",
  "waiting_jobs": 0
}
```

### Crawl a site

Read a whole site by following its links, and get every page's content. The crawl keeps running after this step, so follow it with a Wait step and 'Check a crawl'.

**Inputs**

- Start at (`url`, text, required): Where the crawl begins. Only pages under this address are read unless 'Crawl the whole domain' is on.
- Stop after (`page_limit`, number): The most pages to read. Each page costs a credit, so start small and raise it once the results look right. From 1 to 10000. Default: `10`.
- Describe what to crawl (`prompt`, text): Say in plain words which pages you want, such as 'only the blog posts'. Firecrawl turns it into settings; any setting below overrides it.
- Only pages matching (`include_paths`, list): Patterns a page's path must match, such as ^/blog/.*. Leave empty to read everything found.
- Skip pages matching (`exclude_paths`, list): Patterns for paths to leave out, such as ^/tag/.*.
- Links deep (`max_discovery_depth`, number): How many links away from the start page to go. 0 reads only the start page and its sitemap. From 0 to 100.
- Sitemap (`sitemap`, text): How to use the site's sitemap. Firecrawl uses it and follows links if unset. One of: `include` (Use the sitemap and follow links), `skip` (Ignore the sitemap, follow links only), `only` (Use only the sitemap).
- Crawl the whole domain (`crawl_entire_domain`, true/false): Follow links anywhere on the site, not only under the starting address. Default: `false`.
- Follow subdomains (`allow_subdomains`, true/false): Follow links to subdomains such as blog.example.com. Default: `false`.
- Follow links to other sites (`allow_external_links`, true/false): Let the crawl leave the site. Keep the page limit small. Default: `false`.
- Treat ?query variants as one page (`ignore_query_parameters`, true/false): Read an address once, whatever follows its '?'. Default: `false`.
- Pause between pages (`delay_seconds`, number): Seconds to wait between pages, to go easy on a small site. Setting it reads one page at a time. From 0 to 60. Default: `0`.
- Pages at once (`max_concurrency`, number): The most pages to read at the same time. Leave empty for your plan's limit (2 on the free plan). From 1 to 100.
- Bring back (`formats`, list): What each page should come back as. Readable text is Markdown with the clutter stripped out, which is what most steps want. A summary or a screenshot costs extra credits. One or more of: `markdown` (Readable text (Markdown)), `summary` (A short summary), `html` (Tidied HTML), `rawHtml` (Raw HTML), `links` (Every link on the page), `images` (Every image on the page), `screenshot`, `screenshot@fullPage` (Full-page screenshot). Default: `["markdown"]`.
- Skip navigation and footers (`only_main_content`, true/false): Keep only the main body of each page. Turn this off when what you need lives in a header, a sidebar or a footer. Default: `true`.

**Outputs**

- `crawl_id` (text): Pass this to 'Check a crawl' to read the pages.
- `page_limit` (number): The most pages this crawl will read.
- `url` (text): Where the crawl started.

**Example output**

```json
{
  "crawl_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "page_limit": 10,
  "url": "https://example.com/docs/"
}
```

### List a batch scrape's errors

See which pages a batch scrape could not read and why, and which ones robots.txt kept it out of.

**Inputs**

- Batch scrape (`batch_id`, text, required): The batch scrape's id, as 'Scrape a list of pages' gave it back.

**Outputs**

- `batch_id` (text)
- `blocked_by_robots` (list): Addresses the site's robots.txt ruled out.
- `blocked_count` (number)
- `failed_count` (number)
- `failed_pages` (list): Each page that failed, with its address and reason.

**Example output**

```json
{
  "batch_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "blocked_by_robots": [
    "https://example.com/private"
  ],
  "blocked_count": 1,
  "failed_count": 1,
  "failed_pages": [
    {
      "error": "404 Not Found",
      "id": "9d1f0c2e-4b1a-4e8e-9d52-7b1c1c0e2a11",
      "timestamp": "2026-09-21T10:00:10Z",
      "url": "https://example.com/docs/old"
    }
  ]
}
```

### List a crawl's errors

See which pages a crawl could not read and why, and which ones the site's robots.txt kept it out of.

**Inputs**

- Crawl (`crawl_id`, text, required): The crawl's id, as 'Crawl a site' gave it back.

**Outputs**

- `blocked_by_robots` (list): Addresses the site's robots.txt ruled out.
- `blocked_count` (number)
- `crawl_id` (text)
- `failed_count` (number)
- `failed_pages` (list): Each page that failed, with its address and reason.

**Example output**

```json
{
  "blocked_by_robots": [
    "https://example.com/private"
  ],
  "blocked_count": 1,
  "crawl_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "failed_count": 1,
  "failed_pages": [
    {
      "error": "404 Not Found",
      "id": "9d1f0c2e-4b1a-4e8e-9d52-7b1c1c0e2a11",
      "timestamp": "2026-09-21T10:00:10Z",
      "url": "https://example.com/docs/old"
    }
  ]
}
```

### List agent runs

List the account's agent runs, newest first, twenty at a time.

**Inputs**

- Started before (`before`, date and time): Only runs started before this moment. Pass the previous step's 'next_before' to get the next twenty.

**Outputs**

- `has_more` (true/false)
- `next_before` (text): Pass this as 'Started before' to get the next twenty.
- `run_count` (number)
- `runs` (list): The runs, newest first.

**Example output**

```json
{
  "has_more": false,
  "next_before": null,
  "run_count": 1,
  "runs": [
    {
      "agent_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
      "created_at": "2026-09-21T10:00:00Z",
      "effort": "low",
      "label": null,
      "origin": "api",
      "prompt": "Find the founders of example.com",
      "status": "completed",
      "urls": []
    }
  ]
}
```

### List recent activity

List the account's scrapes, crawls, searches and other jobs from the last 24 hours, newest first.

**Inputs**

- Only (`endpoint`, text): Only this kind of job. Every kind if unset. One of: `scrape` (Page reads), `batch_scrape` (Batch reads), `crawl` (Crawls), `map` (Site maps), `search` (Searches), `agent` (Agent runs).
- At most (`limit`, number): The most jobs to return. From 1 to 100. Default: `50`.
- Continue from (`cursor`, text): The previous step's 'next_cursor', to get the next page.

**Outputs**

- `activities` (list): Jobs from the last 24 hours, newest first.
- `activity_count` (number)
- `has_more` (true/false)
- `next_cursor` (text): Pass this as 'Continue from' to get the next page.

**Example output**

```json
{
  "activities": [
    {
      "api_version": "v2",
      "created_at": "2026-09-21T10:00:00Z",
      "endpoint": "scrape",
      "job_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
      "target": "https://example.com"
    }
  ],
  "activity_count": 1,
  "has_more": false,
  "next_cursor": null
}
```

### List running crawls

List every crawl on the account that is still running.

**Inputs**: None.

**Outputs**

- `crawl_count` (number)
- `crawls` (list): The crawls still running.

**Example output**

```json
{
  "crawl_count": 1,
  "crawls": [
    {
      "crawl_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
      "options": {},
      "status": null,
      "url": "https://example.com/docs/"
    }
  ]
}
```

### Map a site

List every address on a website without reading the pages. Quick and cheap; use it to find the pages worth scraping, or search the list for a topic.

**Inputs**

- Site address (`url`, text, required): The website to map.
- Most relevant to (`search`, text): Order the addresses by how well they match this, such as 'pricing' or 'blog'.
- At most (`limit`, number): The most addresses to return. From 1 to 100000. Default: `100`.
- Sitemap (`sitemap`, text): How to use the site's sitemap. Firecrawl uses it and follows links if unset. One of: `include` (Use the sitemap and follow links), `skip` (Ignore the sitemap, follow links only), `only` (Use only the sitemap).
- Include subdomains (`include_subdomains`, true/false): Also list addresses on subdomains such as blog.example.com. Default: `true`.
- Treat ?query variants as one page (`ignore_query_parameters`, true/false): List an address once, whatever follows its '?'. Default: `true`.
- Give up after (`timeout_seconds`, number): Seconds to try for before giving up. From 1 to 300.
- Browse from (`country`, text): Load pages from this country, for sites that show different prices or content by location. Firecrawl uses the United States if unset. One of: `AR` (Argentina), `AU` (Australia), `AT` (Austria), `BD` (Bangladesh), `BE` (Belgium), `BR` (Brazil), `BG` (Bulgaria), `CA` (Canada), `CL` (Chile), `CN` (China), and 52 more.

**Outputs**

- `link_count` (number)
- `links` (list): Every address found, with its title where known.
- `url` (text)
- `urls` (list): The same addresses, as plain text.

**Example output**

```json
{
  "link_count": 1,
  "links": [
    {
      "description": "Plans and prices.",
      "title": "Pricing",
      "url": "https://example.com/pricing"
    }
  ],
  "url": "https://example.com",
  "urls": [
    "https://example.com/pricing"
  ]
}
```

### Preview crawl settings

Describe in plain words what to crawl and see the settings Firecrawl would use, without starting a crawl or spending page credits.

**Inputs**

- Start at (`url`, text, required): Where the crawl would begin.
- Describe what to crawl (`prompt`, text, required): Which pages you want, such as 'only the blog posts from 2025'.

**Outputs**

- `allow_external_links` (true/false)
- `allow_subdomains` (true/false)
- `crawl_entire_domain` (true/false)
- `delay_seconds` (number)
- `exclude_paths` (list): Pages matching these are skipped.
- `ignore_query_parameters` (true/false)
- `include_paths` (list): Only pages matching these.
- `max_discovery_depth` (number)
- `page_limit` (number)
- `settings` (object): Everything Firecrawl suggested, in its own words.
- `sitemap` (text)
- `url` (text)

**Example output**

```json
{
  "allow_external_links": false,
  "allow_subdomains": false,
  "crawl_entire_domain": false,
  "delay_seconds": null,
  "exclude_paths": [],
  "ignore_query_parameters": null,
  "include_paths": [
    "^/blog/.*"
  ],
  "max_discovery_depth": null,
  "page_limit": null,
  "settings": {
    "includePaths": [
      "^/blog/.*"
    ],
    "url": "https://example.com"
  },
  "sitemap": "include",
  "url": "https://example.com"
}
```

### Scrape a list of pages

Read a list of pages in the background, with the same options as 'Scrape a page'. Follow it with a Wait step and 'Check a batch scrape' to get the pages.

**Inputs**

- Page addresses (`urls`, list, required): The pages to read, up to 1,000. Feed this the addresses from 'Map a site'.
- Bring back (`formats`, list): What each page should come back as. Readable text is Markdown with the clutter stripped out, which is what most steps want. A summary or a screenshot costs extra credits. One or more of: `markdown` (Readable text (Markdown)), `summary` (A short summary), `html` (Tidied HTML), `rawHtml` (Raw HTML), `links` (Every link on the page), `images` (Every image on the page), `screenshot`, `screenshot@fullPage` (Full-page screenshot). Default: `["markdown"]`.
- Skip navigation and footers (`only_main_content`, true/false): Keep only the main body of each page. Turn this off when what you need lives in a header, a sidebar or a footer. Default: `true`.
- Ask about the page (`question`, text): A question to answer from the page's content, such as 'What does the cheapest plan cost?'. The answer comes back as 'answer'.
- Pull out data (`extract_prompt`, text): Describe the data to pull out of the page, such as 'every plan's name and monthly price'. It comes back as 'json'.
- Data shape (`extract_schema`, object): Optional JSON Schema the pulled-out data must follow, for results the next step can rely on field by field.
- Only these parts (`include_tags`, list): HTML tags, classes or ids to keep, such as article or .price. Leave empty to keep the whole page.
- Leave out these parts (`exclude_tags`, list): HTML tags, classes or ids to drop, such as nav or #cookie-banner.
- Wait before reading (`wait_seconds`, number): Seconds to let the page finish loading before it is read. Raise it for a page that fills itself in after it opens. From 0 to 60. Default: `0`.
- Give up after (`timeout_seconds`, number): Seconds to try for before giving up. Firecrawl's default is 60. From 1 to 300.
- Read as a phone (`mobile`, true/false): Load the page as a phone would see it. Default: `false`.
- Browse from (`country`, text): Load pages from this country, for sites that show different prices or content by location. Firecrawl uses the United States if unset. One of: `AR` (Argentina), `AU` (Australia), `AT` (Austria), `BD` (Bangladesh), `BE` (Belgium), `BR` (Brazil), `BG` (Bulgaria), `CA` (Canada), `CL` (Chile), `CN` (China), and 52 more.
- Way in (`proxy`, text): How Firecrawl reaches the page. Automatic tries Basic first and switches to Enhanced if the site blocks it. One of: `auto` (Automatic (recommended)), `basic` (Basic, the fastest), `enhanced` (Enhanced, for sites that block scrapers).
- Block ads and cookie pop-ups (`block_ads`, true/false): Strip ads and cookie banners before the page is read. Default: `true`.
- Accept a cached copy up to (`max_age_hours`, number): Hours old a cached copy of the page may be. Firecrawl reuses copies up to 48 hours old unless told otherwise; 0 always reads it fresh. From 0 to 720.
- Pages at once (`max_concurrency`, number): The most pages to read at the same time. Leave empty for your plan's limit (2 on the free plan). From 1 to 100.
- Skip bad addresses (`skip_invalid_urls`, true/false): Leave out addresses that are not valid and read the rest, rather than refusing the whole list. Default: `true`.

**Outputs**

- `batch_id` (text): Pass this to 'Check a batch scrape' to read the pages.
- `invalid_urls` (list): Addresses Firecrawl could not treat as pages.
- `url_count` (number): How many addresses were sent.

**Example output**

```json
{
  "batch_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "invalid_urls": [],
  "url_count": 2
}
```

### Scrape a page

Read a web page and get it back as clean Markdown, ready for an AI step. Can also summarise it, answer a question about it, pull out structured data, or take a screenshot.

**Inputs**

- Page address (`url`, text, required): The address of the page to read.
- Bring back (`formats`, list): What each page should come back as. Readable text is Markdown with the clutter stripped out, which is what most steps want. A summary or a screenshot costs extra credits. One or more of: `markdown` (Readable text (Markdown)), `summary` (A short summary), `html` (Tidied HTML), `rawHtml` (Raw HTML), `links` (Every link on the page), `images` (Every image on the page), `screenshot`, `screenshot@fullPage` (Full-page screenshot). Default: `["markdown"]`.
- Skip navigation and footers (`only_main_content`, true/false): Keep only the main body of each page. Turn this off when what you need lives in a header, a sidebar or a footer. Default: `true`.
- Ask about the page (`question`, text): A question to answer from the page's content, such as 'What does the cheapest plan cost?'. The answer comes back as 'answer'.
- Pull out data (`extract_prompt`, text): Describe the data to pull out of the page, such as 'every plan's name and monthly price'. It comes back as 'json'.
- Data shape (`extract_schema`, object): Optional JSON Schema the pulled-out data must follow, for results the next step can rely on field by field.
- Only these parts (`include_tags`, list): HTML tags, classes or ids to keep, such as article or .price. Leave empty to keep the whole page.
- Leave out these parts (`exclude_tags`, list): HTML tags, classes or ids to drop, such as nav or #cookie-banner.
- Wait before reading (`wait_seconds`, number): Seconds to let the page finish loading before it is read. Raise it for a page that fills itself in after it opens. From 0 to 60. Default: `0`.
- Give up after (`timeout_seconds`, number): Seconds to try for before giving up. Firecrawl's default is 60. From 1 to 300.
- Read as a phone (`mobile`, true/false): Load the page as a phone would see it. Default: `false`.
- Browse from (`country`, text): Load pages from this country, for sites that show different prices or content by location. Firecrawl uses the United States if unset. One of: `AR` (Argentina), `AU` (Australia), `AT` (Austria), `BD` (Bangladesh), `BE` (Belgium), `BR` (Brazil), `BG` (Bulgaria), `CA` (Canada), `CL` (Chile), `CN` (China), and 52 more.
- Way in (`proxy`, text): How Firecrawl reaches the page. Automatic tries Basic first and switches to Enhanced if the site blocks it. One of: `auto` (Automatic (recommended)), `basic` (Basic, the fastest), `enhanced` (Enhanced, for sites that block scrapers).
- Block ads and cookie pop-ups (`block_ads`, true/false): Strip ads and cookie banners before the page is read. Default: `true`.
- Accept a cached copy up to (`max_age_hours`, number): Hours old a cached copy of the page may be. Firecrawl reuses copies up to 48 hours old unless told otherwise; 0 always reads it fresh. From 0 to 720.

**Outputs**

- `answer` (text): The answer to the question asked about the page.
- `description` (text): The page's own one-line summary, where it has one.
- `error` (text): What went wrong with this page, if anything did.
- `final_url` (text): Where the address ended up after any redirects.
- `html` (text): The page's tidied HTML.
- `images` (list): Every image on the page, when asked for.
- `json` (object): The data extracted from the page, when a prompt or schema was given.
- `language` (text): The page's language.
- `links` (list): Every link on the page, when asked for.
- `markdown` (text): The page's readable text, as Markdown.
- `metadata` (object): Everything else the page declared about itself.
- `raw_html` (text): The page's HTML exactly as sent.
- `screenshot` (text): The address of a screenshot of the page, when asked for.
- `status_code` (number): The HTTP status the site answered with.
- `summary` (text): A short summary of the page, when asked for.
- `title` (text): The page's title.
- `url` (text): The address that was read.
- `warning` (text): Anything Firecrawl wants you to know about this read.

**Example output**

```json
{
  "answer": null,
  "description": "Plans and prices.",
  "error": null,
  "final_url": "https://example.com/pricing",
  "html": null,
  "images": [],
  "json": null,
  "language": "en",
  "links": [
    "https://example.com/signup"
  ],
  "markdown": "# Pricing\n\nStarter is $19 a month...",
  "metadata": {
    "statusCode": 200,
    "title": "Pricing"
  },
  "raw_html": null,
  "screenshot": null,
  "status_code": 200,
  "summary": null,
  "title": "Pricing",
  "url": "https://example.com/pricing",
  "warning": null
}
```

### Search the web

Search the web, news or images and get the results as data. Optionally read every result's page in the same step, so the next step gets the full text rather than a snippet.

**Inputs**

- Search for (`query`, text, required): What to search for. Operators such as site: and "quoted phrases" work.
- Search in (`sources`, list): Where to search. Web pages if unset. One or more of: `web` (Web pages), `news`, `images`. Default: `["web"]`.
- Results (`limit`, number): How many results to return from each place searched. From 1 to 100. Default: `5`.
- Only these kinds of site (`categories`, list): Narrow web results to these kinds of site. One or more of: `developer` (Developer sites and code), `research` (Research papers), `pdf` (PDFs).
- From the (`time_range`, text): Only results from this recent period. One of: `hour` (Past hour), `day` (Past 24 hours), `week` (Past week), `month` (Past month), `year` (Past year).
- Published on or after (`published_after`, date): Only results from this date on. Use instead of 'From the'.
- Published on or before (`published_before`, date): Only results up to this date. Use instead of 'From the'.
- Only these sites (`include_domains`, list): Only results from these domains, such as example.com.
- Not these sites (`exclude_domains`, list): Leave out results from these domains. Use this or 'Only these sites', not both.
- Search from (`country`, text): Get the results someone in this country would see. One of: `AR` (Argentina), `AU` (Australia), `AT` (Austria), `BD` (Bangladesh), `BE` (Belgium), `BR` (Brazil), `BG` (Bulgaria), `CA` (Canada), `CL` (Chile), `CN` (China), and 52 more.
- Search near (`location`, text): A place to search as if you were in it, such as San Francisco,California,United States.
- Hide explicit results (`safe_search`, true/false): Turn safe search on. Default: `false`.
- Also read each result as (`result_formats`, list): Read every result's page too, and return it in these formats. Each page read costs extra credits; leave empty for titles, links and snippets only. One or more of: `markdown` (Readable text (Markdown)), `summary` (A short summary), `html` (Tidied HTML), `rawHtml` (Raw HTML), `links` (Every link on the page), `screenshot`.
- Skip navigation and footers (`only_main_content`, true/false): When reading result pages, keep only their main body. Default: `true`.
- Give up after (`timeout_seconds`, number): Seconds to try for before giving up. Firecrawl's default is 60. From 1 to 300.

**Outputs**

- `credits_used` (number)
- `images` (list): Image results, when images were searched.
- `news` (list): News results, when news was searched.
- `query` (text)
- `result_count` (number)
- `search_id` (text)
- `warning` (text)
- `web` (list): Web results, best first.

**Example output**

```json
{
  "credits_used": 2,
  "images": [],
  "news": [],
  "query": "firecrawl",
  "result_count": 1,
  "search_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04",
  "warning": null,
  "web": [
    {
      "description": "Turn websites into LLM-ready data.",
      "title": "Firecrawl",
      "url": "https://www.firecrawl.dev"
    }
  ]
}
```

### Start an agent run

Give Firecrawl's research agent a task in plain words; it searches and browses on its own and returns the data. Runs in the background, so follow it with 'Check an agent run'. The free plan includes 5 runs a day.

**Inputs**

- Task (`prompt`, text, required): What to find, such as 'the founders of example.com and their LinkedIn profiles'.
- Start from (`urls`, list): Pages the agent should start from. Optional.
- Stay on those pages (`stay_on_urls`, true/false): Keep the agent to the pages under 'Start from'. Default: `false`.
- Answer shape (`output_schema`, object): Optional JSON Schema the answer must follow, for results the next step can rely on field by field.
- Effort (`effort`, text): How hard the agent should work. Higher effort costs more. One of: `low` (Low: quickest and cheapest), `medium`, `high` (High: most thorough).
- Spend at most (`max_credits`, number): The most credits this run may spend. Firecrawl's default is 2,500; a run that hits the cap fails and is refunded. From 1 to 100000.

**Outputs**

- `agent_id` (text): Pass this to 'Check an agent run' for the answer.

**Example output**

```json
{
  "agent_id": "3a6f1d90-2b4c-4f1e-9f3a-8c2d5e7b1a04"
}
```
