Skip to content
Firecrawl Docs
Firecrawl Docs
Oficial

Ruby

El SDK de Ruby de Firecrawl es un wrapper de la API de Firecrawl que te permite convertir sitios web en Markdown fácilmente.

El SDK oficial de Ruby se mantiene en el monorepo de Firecrawl, en apps/ruby-sdk.

Para instalar el SDK de Ruby de Firecrawl, añádelo a tu proyecto:

Añádelo a tu Gemfile:

gem "firecrawl-sdk", "~> 1.0"

Luego, ejecuta:

bundle install
Requiere Ruby 3.0 o una versión posterior.
  1. Obtén una clave de API de firecrawl.dev
  2. Configura la clave de API como una variable de entorno llamada FIRECRAWL_API_KEY, o pásala directamente con Firecrawl::Client.new(api_key: ...)

Aquí tienes un ejemplo rápido con la API actual del SDK:

require "firecrawl"

client = Firecrawl::Client.from_env

doc = client.scrape(
  "https://firecrawl.dev",
  Firecrawl::Models::ScrapeOptions.new(formats: ["markdown"])
)

job = client.crawl(
  "https://firecrawl.dev",
  Firecrawl::Models::CrawlOptions.new(limit: 5)
)

puts doc.markdown
puts "Crawled pages: #{job.data&.size || 0}"

Para hacer scraping de una sola URL, usa el método scrape.

doc = client.scrape(
  "https://firecrawl.dev",
  Firecrawl::Models::ScrapeOptions.new(
    formats: ["markdown", "html"],
    only_main_content: true,
    wait_for: 5000
  )
)

puts doc.markdown
puts doc.metadata["title"]

Extrae JSON estructurado a través del endpoint scrape incluyendo el formato json junto con un prompt y un schema:

doc = client.scrape(
  "https://example.com/product",
  Firecrawl::Models::ScrapeOptions.new(
    formats: [
      {
        "type" => "json",
        "prompt" => "Extract the product name and price",
        "schema" => {
          "type" => "object",
          "properties" => {
            "name" => { "type" => "string" },
            "price" => { "type" => "number" }
          }
        }
      }
    ]
  )
)

puts doc.json

Para rastrear un sitio web y esperar a que finalice, usa crawl. Realiza sondeos automáticamente hasta que el trabajo termine.

job = client.crawl(
  "https://firecrawl.dev",
  Firecrawl::Models::CrawlOptions.new(
    limit: 50,
    max_discovery_depth: 3,
    scrape_options: Firecrawl::Models::ScrapeOptions.new(
      formats: ["markdown"]
    )
  )
)

puts "Status: #{job.status}"
puts "Progress: #{job.completed}/#{job.total}"

job.data&.each do |page|
  puts page.metadata["sourceURL"]
end

Inicia un trabajo sin esperar con start_crawl.

response = client.start_crawl(
  "https://firecrawl.dev",
  Firecrawl::Models::CrawlOptions.new(limit: 100)
)

puts "Job ID: #{response.id}"

Consulta el progreso del rastreo con get_crawl_status.

status = client.get_crawl_status(response.id)
puts "Status: #{status.status}"
puts "Progress: #{status.completed}/#{status.total}"

Cancela un rastreo en curso con cancel_crawl.

result = client.cancel_crawl(response.id)
puts result

Descubre enlaces en un sitio web utilizando map.

data = client.map(
  "https://firecrawl.dev",
  Firecrawl::Models::MapOptions.new(
    limit: 100,
    search: "blog"
  )
)

data.links&.each do |link|
  puts "#{link["url"]} - #{link["title"]}"
end

Busca con opciones de configuración opcionales utilizando search.

results = client.search(
  "firecrawl web scraping",
  Firecrawl::Models::SearchOptions.new(limit: 10)
)

results.web&.each do |result|
  puts "#{result["title"]} - #{result["url"]}"
end

Realiza scraping de varias URL en paralelo con batch_scrape.

job = client.batch_scrape(
  ["https://firecrawl.dev", "https://firecrawl.dev/blog"],
  Firecrawl::Models::BatchScrapeOptions.new(
    options: Firecrawl::Models::ScrapeOptions.new(
      formats: ["markdown"]
    )
  )
)

job.data&.each do |doc|
  puts doc.markdown
end

Ejecuta un agente con IA mediante agent.

result = client.agent(
  Firecrawl::Models::AgentOptions.new(
    prompt: "Find the pricing plans for Firecrawl and compare them"
  )
)

puts result.data

Con un esquema JSON para salida estructurada:

result = client.agent(
  Firecrawl::Models::AgentOptions.new(
    prompt: "Extract pricing plan details",
    urls: ["https://firecrawl.dev"],
    schema: {
      "type" => "object",
      "properties" => {
        "plans" => {
          "type" => "array",
          "items" => {
            "type" => "object",
            "properties" => {
              "name" => { "type" => "string" },
              "price" => { "type" => "string" }
            }
          }
        }
      }
    }
  )
)

puts result.data

Consulta la concurrencia y los créditos restantes:

concurrency = client.get_concurrency
puts "Concurrency: #{concurrency.concurrency}/#{concurrency.max_concurrency}"

credits = client.get_credit_usage
puts "Remaining credits: #{credits.remaining_credits}"

El SDK de Ruby incluye utilidades para el sandbox del navegador.

Usa un ID de trabajo de scraping para ejecutar código adicional de browser en el mismo contexto reproducido:

  • interact(...) ejecuta código en la sesión de browser vinculada al scraping (y la inicializa la primera vez que se usa).
  • stop_interactive_browser(...) detiene explícitamente la sesión interactiva cuando terminas.
scrape_job_id = "550e8400-e29b-41d4-a716-446655440000"

run = client.interact(
  scrape_job_id,
  "console.log(page.url());",
  language: "node",
  timeout: 60
)

puts run["stdout"]

deleted = client.stop_interactive_browser(scrape_job_id)
puts "Deleted: #{deleted["success"]}"

Firecrawl::Client.new admite las siguientes opciones:

OpciónTipoPredeterminadoDescripción
api_keyStringvariable de entorno FIRECRAWL_API_KEYTu clave de la API de Firecrawl
api_urlStringhttps://api.firecrawl.dev (o FIRECRAWL_API_URL)URL base de la API
timeoutInteger300Tiempo de espera de la solicitud HTTP en segundos
max_retriesInteger3Reintentos automáticos ante fallos transitorios
backoff_factorFloat0.5Factor de backoff exponencial en segundos
client = Firecrawl::Client.new(
  api_key: "fc-your-api-key",
  api_url: "https://api.firecrawl.dev",
  timeout: 300,
  max_retries: 3,
  backoff_factor: 0.5
)

El SDK lanza excepciones dentro del módulo Firecrawl.

begin
  doc = client.scrape("https://example.com")
rescue Firecrawl::AuthenticationError => e
  puts "Auth failed: #{e.message}"
rescue Firecrawl::RateLimitError => e
  puts "Rate limited: #{e.message}"
rescue Firecrawl::JobTimeoutError => e
  puts "Job #{e.job_id} timed out after #{e.timeout_seconds}s"
rescue Firecrawl::FirecrawlError => e
  puts "Error (#{e.status_code}): #{e.message}"
end

¿Eres un agente de IA que necesita una clave de API de Firecrawl? Consulta firecrawl.dev/agent-onboarding/SKILL.md para ver las instrucciones de incorporación automática.

Was this page helpful?Suggest editsRaise issue