# Etsy Marketplace Scraper

> Etsy Marketplace Scraper is a paid API for AI agents from api.scrapeforagents.tech, paid per call via x402, $0.16/call, status unknown (last checked 2026-10-02).

Scrapes structured product listing data from Etsy's public marketplace pages based on search queries, returning titles, prices, shop info, and listing URLs.

## Facts

- Endpoint: POST https://api.scrapeforagents.tech/v1/etsy?utm_source=zero.xyz
- Price: $0.16/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/etsy-marketplace-scraper-b4d697d7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_ziluM4ZkWJiEtCoZP_JQ1

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability etsy-marketplace-scraper-b4d697d7 -d '<json body>'
```

Example prompt: Search Etsy for 'personalized leather wallet' in the US, sorted by highest reviews, only showing items with free shipping and priced between $20 and $80 — pull up to 3 pages and give me the titles, prices, and shop links.

## When to prefer this

Choose this endpoint when you need structured, filterable Etsy marketplace data — product titles, prices, shop info, listing URLs — across multiple search queries and pages, especially when you want server-side filtering by price range, sale status, free shipping, or country, without managing browser automation yourself. Prefer it over generic web scrapers when targeting Etsy specifically with Etsy-native sort options.

## Known failure modes

- Empty results if search phrases return no listings matching filters
- Null fields (image, price, title) if Etsy page structure changes
- No charge on failed or empty runs
- Rate limiting or blocking by Etsy's anti-scraping measures
- Invalid enum values for sort or country result in validation errors

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count of matched listings and an array of items, each containing the listing title, current price, listing URL, listing ID, shop name, shop URL, shop ID, and an image URL. The 'product' field is set to 'etsy'.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "sort": {
   "enum": [
    "score",
    "created",
    "price-asc",
    "price-desc",
    "highest-reviews"
   ],
   "type": "string",
   "default": "score",
   "description": "Order listings using a sort supported by the public market pages."
  },
  "country": {
   "enum": [
    "US",
    "GB",
    "CA",
    "AU",
    "NZ",
    "DE",
    "FR",
    "IT",
    "ES",
    "NL",
    "IE",
    "BE",
    "AT",
    "PT",
    "JP",
    "BR",
    "MX",
    "CH",
    "SE",
    "NO",
    "DK",
    "PL"
   ],
   "type": "string",
   "default": "US",
   "description": "Destination country filter. Prices remain in the currency returned by the page."
  },
  "queries": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "One or more shopper phrases; each phrase opens its public market page. Short phrases work best."
  },
  "maxPages": {
   "type": "integer",
   "default": 5,
   "maximum": 30,
   "minimum": 1,
   "description": "Number of market pages per phrase. These pages showed about eight listing cards each during testing."
  },
  "maxPrice": {
   "type": "number",
   "minimum": 0,
   "description": "Keep listings whose current price is at most this amount in the returned currency."
  },
  "minPrice": {
   "type": "number",
   "minimum": 0,
   "description": "Keep listings whose current price is at least this amount in the returned currency."
  },
  "includeAds": {
   "type": "boolean",
   "default": true,
   "description": "Include sponsored placements and report their visible page positions."
  },
  "maxResults": {
   "type": "integer",
   "default": 0,
   "minimum": 0,
   "description": "Stop after this many saved listings across all phrases. Set to 0 for no total cap."
  },
  "onSaleOnly": {
   "type": "boolean",
   "default": false,
   "description": "Keep listings with a visible reduced price."
  },
  "freeShippingOnly": {
   "type": "boolean",
   "default": false,
   "description": "Keep listings marked with free shipping on the market page."
  },
  "dedupeAcrossQueries": {
   "type": "boolean",
   "default": true,
   "description": "Save each listing once when it appears under multiple phrases. The first phrase is retained."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "image": null,
    "price": null,
    "title": null,
    "shopId": null,
    "shopUrl": null,
    "shopName": null,
    "listingId": null,
    "listingUrl": null
   }
  ],
  "product": "etsy"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/etsy-marketplace-scraper-b4d697d7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scrapeforagents.tech](https://www.zero.xyz/host/api.scrapeforagents.tech/llms.txt)
