Bulk fetches FF&E product specs from URL lists or files/Google Sheets, extracting name, brand, dimensions, materials, price, images into a standardized 33-column schema for design/procurement.
npx claudepluginhub alpacalabsllc/skills-for-architects --plugin 06-materials-researchThis skill is limited to using the following tools:
Extract structured FF&E data from a list of product page URLs. Outputs a standardized schedule ready for design specs, procurement, or import into Canoa.
Extracts structured FF&E product specs from PDFs like price books, fact sheets, and spec sheets using PyMuPDF, structuring into standardized Google Sheets, CSV, or markdown schedules.
Extracts structured data like tables, lists, and prices from web pages using multi-strategy scraping with pagination, validation, transforms, and CSV/JSON export.
Generates CSI MasterFormat 2020 outline specifications from materials lists, product schedules, or project descriptions, with divisions, performance criteria, and manufacturers.
Share bugs, ideas, or general feedback.
Extract structured FF&E data from a list of product page URLs. Outputs a standardized schedule ready for design specs, procurement, or import into Canoa.
The user provides product URLs in one of these ways:
.txt, .csv, or .md file containing URLs (one per line)If the input format is unclear, ask.
Products are written to the master Google Sheet — the same 33-column schema used by all product skills. When writing to CSV, use the same column order.
Read ../../schema/product-schema.md (relative to this SKILL.md) for the full column reference, field formats, and category vocabulary. Read ../../schema/sheet-conventions.md for CRUD patterns with MCP tools.
Skill-specific column values:
savedbulk-fetchFor each URL:
Use this prompt (or close variant) for each URL:
Extract structured product/furniture specification data from this page. Return a JSON object with these exact fields:
- product_name: Full product name (Title Case)
- description: Short description or tagline (1-2 sentences), or null
- sku: Product ID, SKU, model number, or catalog number, or null
- brand: Manufacturer name (Title Case)
- designer: Designer or design studio name if attributed, or null
- vendor: The retailer/website selling the product (may differ from brand), or null
- collection: Product line or collection name, or null
- category: One of: Chair, Table, Sofa, Bed, Light, Storage, Desk, Shelving, Rug, Mirror, Accessory, Tabletop, Kitchen, Bath, Window, Door, Outdoor Furniture, Textile, Acoustic, Planter, Partition, Other
- width: Numeric width value only (no units), or null
- depth: Numeric depth value only (no units), or null
- height: Numeric height value only (no units), or null
- seat_height: Numeric seat height for seating products, or null
- unit: "in", "cm", or "mm" — whichever the page uses
- weight: Weight as stated with unit (e.g. "45 lbs"), or null
- materials: Comma-separated list of primary materials
- colors_finishes: Comma-separated list of ALL available colors or finish options
- list_price: Numeric price (no currency symbol, no commas), or null
- sale_price: Discounted/sale price if shown, or null
- currency: "USD", "EUR", "GBP", etc.
- lead_time: Delivery estimate as stated, or null
- warranty: Warranty info as stated, or null
- certifications: Comma-separated certifications (GREENGUARD, FSC, BIFMA, etc.), or null
- com_col: "COM", "COL", "COM/COL" if mentioned, or null
- indoor_outdoor: "Indoor", "Outdoor", or "Indoor/Outdoor" if specified, or null
- image_url: URL of the primary product image (largest/hero image)
If this is NOT a product page, return: {"error": "not_a_product_page"}
If dimensions use a combined format like "32 x 24 x 30 in", split them into W x D x H.
If price says "Contact for pricing" or similar, set price to null.
Return ONLY the JSON object, no other text.
Extract all URLs from the user's input. Report count: "Found N product URLs."
Process URLs using WebFetch. Use parallel tool calls — fetch up to 5 URLs simultaneously to maximize speed. Report progress after each batch.
Build a results table. Group into:
Show a summary table in markdown with all successful + partial results. Flag any issues:
Ask the user: "Where should I save this?" Options:
./ffe-fetch-YYYY-MM-DD.csv)Write the output in the chosen format using the 33-column master schema. For Google Sheets, use mcp__google-sheets__update_cells to append rows. Set Clipped At to current timestamp and Source to bulk-fetch.
When saving to CSV, use the CSV header from ../../schema/product-schema.md.
After the batch completes, always report:
Fetched: X/Y successful, Z partial, W failed
List any failed URLs with the reason.