AgentSkillsCN

firecrawl-scraper

在 ComfyUI 模板仓库中管理模板捆绑、分类与排序。可在不同捆绑之间移动模板,重新排序模板,创建或重命名分类。当用户提出以下需求时使用:移动模板、更改分类、重新排序模板、整理模板、重新排列模板、分组模板、分类、重新分类、更改捆绑、切换捆绑、对模板进行排序、改变模板顺序、重新组织、重构分类、重命名分类、创建分类、更新分类、精选模板、管理收藏。可通过“移动模板”、“更改分类”、“重新排序”、“整理模板”、“捆绑管理”、“模板顺序”、“分类管理”等短语触发。

SKILL.md
--- frontmatter
name: firecrawl-scraper
description: Extract property data from real estate listing URLs using Firecrawl AI. Use when scraping Zillow, Redfin, Realtor.com, or any property listing site. Returns structured data ready for video generation.
allowed-tools: Read, Grep, Glob, Bash

Firecrawl Property Extraction

Overview

Firecrawl transforms any real estate listing URL into structured JSON data for video generation. It handles JavaScript rendering, anti-bot measures, and image extraction automatically.

Quick Start

typescript
import Firecrawl from '@mendable/firecrawl-js';
import { z } from 'zod';

const firecrawl = new Firecrawl({
  apiKey: process.env.FIRECRAWL_API_KEY
});

const result = await firecrawl.extract({
  urls: [listingUrl],
  prompt: 'Extract property details for video generation',
  schema: PropertySchema
});

Supported Sites

SiteURL PatternData Quality
Zillowzillow.com/homedetails/*Excellent
Redfinredfin.com//home/Excellent
Realtor.comrealtor.com/realestateandhomes-detail/*Excellent
Truliatrulia.com/home/*Good
Homes.comhomes.com/property/*Good
MLS SitesVaries by regionGood
Broker SitesAnyVariable

Property Schema

See rules/property-extraction.md for complete schema.

typescript
const PropertySchema = z.object({
  address: z.string(),
  city: z.string(),
  state: z.string(),
  zipCode: z.string(),
  price: z.number(),
  bedrooms: z.number(),
  bathrooms: z.number(),
  sqft: z.number(),
  lotSize: z.string().optional(),
  yearBuilt: z.number().optional(),
  propertyType: z.string(),
  description: z.string(),
  features: z.array(z.string()),
  images: z.array(z.string()),
  agent: z.object({
    name: z.string(),
    phone: z.string().optional(),
    brokerage: z.string().optional(),
  }).optional(),
});

Advanced Extraction

Competitor Analysis

typescript
const CompetitorSchema = z.object({
  listings: z.array(z.object({
    address: z.string(),
    price: z.number(),
    daysOnMarket: z.number(),
    pricePerSqft: z.number(),
  })),
  marketTrends: z.object({
    medianPrice: z.number(),
    averageDaysOnMarket: z.number(),
    inventoryCount: z.number(),
  }),
});

Market Data

See rules/market-data.md

Best Practices

  1. Rate Limiting: Max 10 requests/minute on standard plan
  2. Error Handling: Always wrap in try/catch
  3. Image Quality: Request high-res images when available
  4. Caching: Cache results for 24 hours to save credits
  5. Validation: Always validate extracted data with Zod

API Integration

Next.js Route Handler

typescript
// /app/api/scrape/route.ts
export async function POST(request: Request) {
  const { url } = await request.json();

  const firecrawl = new Firecrawl({
    apiKey: process.env.FIRECRAWL_API_KEY!
  });

  const result = await firecrawl.extract({
    urls: [url],
    prompt: 'Extract property listing data',
    schema: PropertySchema,
  });

  return Response.json({
    success: true,
    data: result.data
  });
}

Credit Usage

OperationCredits
/scrape (single page)1
/crawl (per page)1
/extract (AI)Tokens-based
/map (URL discovery)1 per 100 URLs

Error Handling

typescript
try {
  const result = await firecrawl.extract({ ... });
} catch (error) {
  if (error.statusCode === 429) {
    // Rate limited - wait and retry
  } else if (error.statusCode === 403) {
    // Site blocked - try alternative approach
  } else {
    // Log and return fallback
  }
}