Etsy is a global marketplace for unique and creative goods. This guide shows you how to extract product listings, shop information, reviews, and trending items using Firecrawl.
Setup
npm install firecrawl zod
Overview
When scraping Etsy, you’ll typically want to:
- Extract product listings and variations
- Get shop information and ratings
- Monitor trending items and categories
- Track pricing and sales data
- Extract customer reviews
Scrape with JSON Mode
Extract structured listing data using Zod schemas.
import { Firecrawl } from 'firecrawl';
import { z } from 'zod';
// Define Zod schema
const ListingSchema = z.object({
title: z.string(),
price: z.string(),
shopName: z.string(),
rating: z.number()
});
const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const result = await firecrawl.scrape('https://www.etsy.com/listing/1844315896/handmade-925-sterling-silver-jewelry-set', {
formats: [{
type: 'json',
schema: z.toJSONSchema(ListingSchema)
}],
});
// Parse and validate with Zod
const jsonData = typeof result.json === 'string' ? JSON.parse(result.json) : result.json;
const validated = ListingSchema.parse(jsonData);
console.log('✅ Validated listing data:');
console.log(validated);
Search
Find products on Etsy marketplace.
import { Firecrawl } from 'firecrawl';
const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const searchResult = await firecrawl.search('handmade jewelry site:etsy.com', {
limit: 10,
sources: [{ type: 'web' }], // { type: 'news' }, { type: 'images' }
scrapeOptions: {
formats: ['markdown']
}
});
console.log(searchResult);
Scrape
Scrape a single Etsy product listing.
import { Firecrawl } from 'firecrawl';
const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const result = await firecrawl.scrape('https://www.etsy.com/listing/1844315896/handmade-925-sterling-silver-jewelry-set', {
formats: ['markdown'], // i.e. html, links, etc.
onlyMainContent: true
});
console.log(result);
Map
Discover all available URLs in an Etsy shop or category. Note: Map returns URLs only, without content.
import { Firecrawl } from 'firecrawl';
const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const mapResult = await firecrawl.map('https://www.etsy.com/shop/YourShopName');
console.log(mapResult.links);
// Returns array of URLs without content
Crawl
Crawl multiple pages from Etsy shop or category.
import { Firecrawl } from 'firecrawl';
const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const crawlResult = await firecrawl.crawl('https://www.etsy.com/c/jewelry', {
limit: 10,
scrapeOptions: {
formats: ['markdown']
}
});
console.log(crawlResult.data);
Batch Scrape
Scrape multiple Etsy listing URLs simultaneously.
import { Firecrawl } from 'firecrawl';
const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
// Wait for completion
const job = await firecrawl.batchScrape([
'https://www.etsy.com/listing/1844315896/handmade-925-sterling-silver-jewelry-set',
'https://www.etsy.com/market/handmade_jewelry',
'https://www.etsy.com/market/jewelry_handmade'],
{
options: {
formats: ['markdown']
},
pollInterval: 2,
timeout: 120
}
);
console.log(job.status, job.completed, job.total);
console.log(job);