Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Firecrawl / Search the web and scrape results

Firecrawl tool firecrawl-search on looot: input fields, $0.001 per result, output shape, and code to run it with curl, JavaScript or Python.

Searches the web and can scrape each result. Send query; limit, location, tbs (time) and scrapeOptions refine it. Returns data.web with title, URL, description and position. Priced per result.

Inputs

Name Type Required Description
ignoreInvalidURLs boolean no Excludes URLs from the search results that are invalid for other Firecrawl endpoints. This helps reduce errors if you are piping data from search into other Firecrawl API endpoints.
limit integer no Maximum number of results to return
location string no Location parameter for search results
query string yes The search query
scrapeOptions string no Options for scraping search results
sources array no Sources to search. Will determine the arrays available in the response.
tbs string no Time-based search parameter. Supports predefined time ranges (qdr:h, qdr:d, qdr:w, qdr:m, qdr:y) and custom date ranges (cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY)
timeout integer no Timeout in milliseconds

Output

Shape of the run’s result, checked against 3 real answers:

{ id, data: { web: { url, title, position, description }[] }, success, creditsUsed }

Run it

Every call needs your API token in LOOOT_TOKEN; Sign in shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With wait: 30 the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll GET /v1/runs/<runId>.

Example input with placeholder values:

curl -X POST "https://api.looot.ai/v1/runs" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"endpointId":"firecrawl-search","input":{"query":"<query>"},"wait":30}'
const response = await fetch("https://api.looot.ai/v1/runs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    endpointId: "firecrawl-search",
    input: {
      query: "<query>",
    },
    wait: 30,
  }),
});
const run = await response.json();
console.log(run.status, run.result);
import os
import uuid

import requests

response = requests.post(
    "https://api.looot.ai/v1/runs",
    headers={
        "Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "endpointId": "firecrawl-search",
        "input": {
            "query": "<query>",
        },
        "wait": 30,
    },
    timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))

To let looot pick among every provider of this job instead, send job:web.search as endpointId; see the job page.

Was this page helpful?