Etsy Scraper — Search, Categories, Prices, Sales & Ads avatar

Etsy Scraper — Search, Categories, Prices, Sales & Ads

Pricing

from $1.95 / 1,000 product scrapeds

Go to Apify Store
Etsy Scraper — Search, Categories, Prices, Sales & Ads

Etsy Scraper — Search, Categories, Prices, Sales & Ads

Scrape Etsy search results and category pages: titles, prices, sale discounts, shops, ratings, review counts, free shipping and Etsy Ads flags. Several keywords per run, large searches split by price. From $0.0027 per listing.

Pricing

from $1.95 / 1,000 product scrapeds

Rating

5.0

(2)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

7

Bookmarked

1.2K

Total users

149

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Etsy Scraper

Scrape Etsy product listings for handmade, vintage, and creator-marketplace research. Search by keyword or paste category URLs, and get titles, prices, sale discounts, shops, exact ratings, review counts, free shipping and Etsy Ads flags — no API keys, no login, no manual copying. Prices start at $0.0027 per listing on the Starter plan.

This actor searches Etsy through query-specific market URLs, bypassing DataDome anti-bot protection that blocks standard /search endpoints. It uses lightweight HTTP requests with Cheerio (no browser) and parses structured data and listing cards embedded in Etsy pages, giving you clean, structured product data in seconds.

What does Etsy Scraper do?

Etsy Scraper extracts product listing data from Etsy search results and category pages. Use it for handmade and vintage marketplace price monitoring, competitor listing research, ad tracking and niche assortment tracking. You provide one or more search queries (like handmade leather wallet or vintage engagement ring) or Etsy category URLs, and the scraper returns structured data for matching products — ready to export in JSON, CSV, or Excel.

🔍 Search many Etsy queries in one run — from boho wedding decor to custom pet portrait, or paste /c/ category and /market/ URLs 📦 Large searches, no duplicates — Etsy shows about 200 listings per search view, so bigger requests are read across price ranges, reaching 1,500+ listings for a popular search 📣 See who is advertising — isAd marks paid Etsy Ads placements on each row 🏷️ Filter by price, shipping, and sale status — you only pay for rows that match ⚡ Fast and lightweight — HTTP-only with Cheerio, no browser overhead 🛡️ Bypasses DataDome — uses query-specific market URL patterns that avoid anti-bot blocks 💰 Pay per result — from $0.0027 per product on the Starter plan, no monthly subscription

Who is it for?

🛒 Handcraft sellers and Etsy shop owners You're running your own Etsy shop and need competitive intelligence to price and position your products.

  • Monitor competitor pricing in your niche (jewelry, decor, apparel, etc.)
  • Track which keywords and product titles competitors are ranking for
  • Identify pricing sweet spots and gaps in the market

📊 Dropshippers and product sourcers You're building a store and looking for trending handmade or vintage products to resell.

  • Find top-selling products by scraping with sort: recently_listed or sort: most_relevant
  • Identify prolific shops to approach as suppliers
  • Track which product niches have the best sale-to-stock ratio

📈 Market researchers and competitive analysts You're studying Etsy as a handmade/vintage marketplace — pricing trends, niche demand, or market saturation.

  • Extract pricing distributions across Etsy niches and specific search terms
  • Measure listing density and competition for handmade, vintage, digital, or craft-supply searches
  • Build time-series datasets by scheduling daily runs

🤖 Data engineers and developers You need Etsy product data piped into your application, database, or analytics pipeline.

  • Integrate via Apify API with Node.js, Python, or cURL
  • Schedule automated daily or weekly runs without writing any scraping code
  • Feed results into Google Sheets, Airtable, Notion, or any webhook endpoint

Why use Etsy Scraper?

🚫 No Etsy API limitations — Etsy's official API requires OAuth approval, has strict rate limits, and restricts access to search results. This scraper extracts the same data directly from public pages with no API key needed.

⚙️ No browser required — unlike Playwright-based scrapers, Etsy Scraper uses pure HTTP requests with Cheerio parsing. Lower compute costs, faster execution, and higher reliability.

🛡️ DataDome bypass built in — Etsy's /search endpoint is protected by DataDome bot detection. This scraper routes through query-specific /market/{query} paths that return product data without triggering blocks.

📋 Structured extraction — product data comes from Google-structured LD+JSON and Etsy's listing cards together, so a page yields every listing it shows.

🔄 Automatic retry and rotation — failed requests are retried with fresh residential proxy sessions, and a stalled request is cut off instead of holding up the run.

📝 An honest result — every run ends with a status message such as "Got 100 of 100 products", or how many you got and why it stopped.

🌐 Small footprint — an HTTP-only actor with minimal memory use, keeping runs fast.

💵 Transparent pay-per-result pricing — you pay only for products actually delivered, plus a tiny startup fee charged with the first row. A search with no results costs nothing.

What data can you extract from Etsy?

Each scraped product includes base fields covering listing identity, pricing, seller info, shipping status, and product type. Enable enrichListingDetails to append nullable listing-page intelligence fields:

FieldTypeDescription
listingIdStringUnique Etsy listing identifier
nameStringProduct title as shown on Etsy
urlStringDirect link to the product listing
imageUrlStringMain product image URL
shopStringSeller shop name
shopIdStringUnique shop identifier
priceStringCurrent listing price in the selected currency
originalPriceStringPre-sale price (if discounted), else null
discountPercentNumber/nullSale discount shown on the card, for example 25
currencyStringPrice currency code (e.g., USD, EUR, AUD)
onSaleBooleanWhether the item is currently on sale
freeShippingBooleanWhether free shipping is offered
shipsFromString/nullOrigin shown on the card ("Ships from GA"), when Etsy shows it
isAdBooleanWhether the card is a paid Etsy Ads placement
ratingNumberExact star rating shown on the card (for example 4.84), null if unrated
reviewCountNumber/nullReview count shown beside the search-card rating, null when unavailable
availabilityStringStock status (e.g., "In Stock")
isDigitalDownloadBooleanWhether the listing is a digital download (e.g., printable, STL, pattern)
hasVariationsBooleanWhether the listing appears to have selectable variants
priceMayBeMinimumVariantBooleanWhether the shown price appears to be the lowest variant price (for example Etsy's "from $12" cue)
variantDetectionStatusStringlisting_page when confirmed from the listing page, otherwise search_card_fallback
detailEnrichmentStatusStringenriched or unavailable; present only when detail enrichment is enabled
sellerSalesNumber/nullPublic seller sales count when available
sellerReviewCountNumber/nullPublic seller review count when available
inCartCountNumber/nullCurrent public in-cart social-proof count when available
boughtInLast24HoursNumber/nullPublic recent-purchase count when available
tagsArray/nullListing tags when available
materialsArray/nullListed materials when available
shippingString/nullPublic delivery/shipping text when available
personalizationString/nullPersonalization instructions when available
positionNumberResult position in search results
queryStringThe search query or category that produced this listing
pageNumberResults page this listing came from (within its price range on large searches)
scrapedAtStringISO 8601 timestamp of extraction

How much does it cost to scrape Etsy listings?

Etsy Scraper uses pay-per-event pricing — you pay only for what you scrape. No monthly subscription. All platform costs are included.

For large scrapes, set Maximum charge per run in Apify before starting. The actor checks the limit before every charge and stops once it is reached. The per-run fee is charged with the first delivered row, so a search with no results costs nothing.

FREEBRONZESILVERGOLDPLATINUMDIAMOND
Per run$0.005$0.00475$0.00425$0.00375$0.003$0.0025
Per product$0.003$0.0027$0.0024$0.00195$0.0015$0.0012
1,000 products$3.005$2.705$2.405$1.954$1.503$1.203

Tier discounts are applied automatically based on your Apify subscription plan. Higher tiers receive lower per-product rates.

From November 22, 2026 the price will be $0.00475 per run on every plan, and per product $0.0027 on FREE and BRONZE, $0.00243 on SILVER and $0.00216 on GOLD, PLATINUM and DIAMOND.

Cost examples (BRONZE plan):

Use caseProductsCost
Quick niche check20~$0.06
Single niche query64~$0.18
Competitor analysis200~$0.55
Market research snapshot500~$1.36
Large-scale extraction1,000~$2.71

How to scrape Etsy products step by step

  1. Go to Etsy Scraper on Apify Store and click "Try for free". Sign up for an Apify account if you don't have one — the free tier includes $5 of monthly usage.

  2. Enter your search query in the "Search Query" field. Use the same terms you'd type into Etsy's search bar, for example: handmade leather journal, vintage gold ring, or custom pet portrait.

  3. Use a specific query that includes the niche you need, such as handmade silver necklace or personalized wedding gift. Etsy market pages use the query itself for relevance.

  4. Set the maximum number of products you want per search. The default is 64. Etsy shows about 200 listings per search view, so large requests are read across price ranges and reach 1,500+ for a popular search; the run's status message tells you how many you got.

  5. Apply optional filters — set a price range with minPrice / maxPrice, restrict to free shipping only, or filter to on-sale items only. Choose a sort order: Most Relevant, Lowest Price, Highest Price, or Recently Listed. On large requests the sort holds within each price range, not across the whole run: Etsy sorts about 100 listings per view, so a Highest Price run steps down through price ranges, and a price sort delivers about 100 listings per range.

  6. Configure proxy settings. Residential proxy is pre-selected and recommended. Etsy prices follow the proxy's country, so when you pick another currency the scraper exits from a country that uses it (for example Germany for EUR) and the log says so.

  7. Click "Start" and wait for the run to complete. A typical 64-product run finishes in under 30 seconds.

  8. Download your data from the Dataset tab in JSON, CSV, Excel, or other formats. You can also connect results directly to Google Sheets, Slack, Airtable, or any webhook endpoint.

Example input for a basic search:

{
"searchQuery": "handmade necklace",
"maxItems": 100,
"sort": "most_relevant"
}

Example input for sale + free shipping filter:

{
"searchQuery": "vintage leather bag",
"maxItems": 200,
"sort": "lowest_price",
"onSale": true,
"freeShipping": true,
"maxPrice": 80,
"enrichListingDetails": true
}

Input parameters

ParameterTypeRequiredDefaultDescription
searchQueryStringOne of the three—What to search for on Etsy (e.g., handmade necklace)
searchQueriesArrayOne of the three—Several searches in one run. A listing found twice is saved and charged once
startUrlsArrayOne of the three—Etsy category (/c/jewelry/necklaces), market (/market/ceramic_mug) or search URLs. Single listing and shop URLs are not supported
maxItemsIntegerNo64Maximum products per search or URL (1–5,000). Etsy's own limits may end a search sooner
sortStringNomost_relevantSort order: most_relevant, lowest_price, highest_price, recently_listed
minPriceNumberNo—Minimum price filter in the selected currency
maxPriceNumberNo—Maximum price filter in the selected currency
freeShippingBooleanNofalseOnly return products with free shipping
onSaleBooleanNofalseOnly return products currently on sale
currencyStringNoUSDISO 4217 currency code for prices (e.g., USD, EUR, GBP, CAD, AUD). All prices in results will be in this currency: listings Etsy prices in another one are skipped, and a run short for that reason says so. With a residential proxy, the country follows this currency.
localeStringNoen-USBCP 47 locale code for the language of results (e.g., en-US, de-DE, fr-FR). Affects listing titles and labels.
excludeDigitalDownloadsBooleanNofalseRemove listings Etsy's search card marks as digital or instant downloads. Combine with excludeKeywords, because not every card carries the mark.
excludeKeywordsArrayNo—Skip any listing whose title contains one of these keywords (case-insensitive). Example: ["STL", "digital", "download"]. Applied before includeKeywords.
includeKeywordsArrayNo—Only keep listings whose title contains at least one of these keywords (case-insensitive). Example: ["handmade", "vintage"]. Applied after excludeKeywords.
enrichListingDetailsBooleanNofalseTry each listing page for seller sales, cart and recent-purchase signals, tags, materials, shipping and personalization. Etsy blocks most listing pages, so expect many null values and a slower run
proxyConfigurationObjectNoResidential (prefilled)Proxy settings. Residential proxy strongly recommended for Etsy

Output example

Each product in the dataset looks like this:

{
"listingId": "1284957302",
"name": "Handmade Gold Filled Necklace, Dainty Chain Necklace, Gift for Her",
"url": "https://www.etsy.com/listing/1284957302/handmade-gold-filled-necklace-dainty",
"imageUrl": "https://i.etsystatic.com/12345678/r/il/abc123/4567890123/il_300x300.4567890123_example.jpg",
"shop": "GoldenChainCo",
"shopId": "34521890",
"price": "24.99",
"originalPrice": null,
"discountPercent": null,
"currency": "USD",
"onSale": false,
"freeShipping": true,
"shipsFrom": null,
"isAd": false,
"rating": 4.84,
"reviewCount": 1234,
"availability": "In Stock",
"isDigitalDownload": false,
"hasVariations": true,
"priceMayBeMinimumVariant": true,
"variantDetectionStatus": "search_card_fallback",
"position": 1,
"query": "handmade necklace",
"page": 1,
"scrapedAt": "2026-03-22T14:30:00.000Z"
}

Sale item with original price:

{
"listingId": "4428738695",
"name": "Orchid Pearl Necklace, Real Orchid Pendant, Handmade Botanical Jewellery",
"url": "https://www.etsy.com/listing/4428738695/orchid-pearl-necklace-real-orchid",
"imageUrl": "https://i.etsystatic.com/63062527/r/il/d7e81d/7578438711/il_fullxfull.7578438711_7a2q.jpg",
"shop": "ZivaJewelleryArt",
"shopId": "63062527",
"price": "49.64",
"originalPrice": "62.05",
"discountPercent": 20,
"currency": "AUD",
"onSale": true,
"freeShipping": false,
"shipsFrom": null,
"isAd": true,
"rating": 4.97,
"reviewCount": 412,
"availability": "In Stock",
"isDigitalDownload": false,
"hasVariations": false,
"priceMayBeMinimumVariant": false,
"variantDetectionStatus": "search_card_fallback",
"position": 3,
"query": "handmade necklace",
"page": 1,
"scrapedAt": "2026-03-23T00:50:47.547Z"
}

Tips for best results

🏷️ Use a specific niche query — the scraper uses Etsy's /market/ URL, where the query determines relevance. vintage leather messenger bag produces a more focused dataset than bag, and available result depth varies by query.

🔑 Use specific search terms — vintage leather messenger bag returns far more relevant results than just bag. Etsy's search engine rewards specificity with better product matches.

💰 Combine price filters with sort order — to find the cheapest items in a niche, set sort: lowest_price and maxPrice: 50. This is the most effective setup for competitive pricing analysis.

📦 Filter free shipping for buyer-perspective research — many Etsy shoppers filter for free shipping. Use the freeShipping: true filter to see exactly what those buyers see — useful for optimizing your own listings.

🔄 Schedule daily runs for price monitoring — use Apify Schedules to run this scraper automatically. Export to Google Sheets and track price changes over time in any niche.

⚠️ Start small to validate your query — run 20–100 products first to confirm the search term returns what you expect. Then scale up once you're satisfied with the data quality.

🌐 Keep the residential proxy — Etsy blocks datacenter and shared proxy IPs. The actor is pre-configured with the RESIDENTIAL proxy group, which is the reliable route.

📅 Use recently_listed sort for trend spotting — set sort to recently_listed to catch new products for a query as soon as they appear. Combine with a scheduled run to monitor emerging trends.

Integrations

Etsy Scraper works with Apify's full integration ecosystem. Here are concrete workflow patterns:

📊 Google Sheets price tracker — connect the dataset output to Google Sheets via Apify's native integration. Run the scraper on a daily schedule to build a rolling price history for any Etsy niche. Spot price trends without touching a spreadsheet.

💬 Slack alerts for new listings — combine sort: recently_listed with a Slack notification. Get automatically pinged when new products appear for your target query — useful for dropshippers and sourcing teams.

📧 Email reports to your team — use Apify's email integration to send a daily CSV export of competitor product data directly to stakeholders — no manual downloads.

🗄️ Database sync — push results to PostgreSQL, MySQL, MongoDB, or Airtable via Apify webhooks. Build a product intelligence database that updates on a schedule.

📁 Amazon S3 / Google Cloud Storage — archive datasets automatically to cloud storage for long-term trend analysis or compliance.

🔗 Zapier and Make — trigger downstream workflows in 5,000+ apps. Examples: automatically add new Etsy products to a Notion database, update a CRM with competitor listings, or push data to a Slack channel on schedule.

🐍 Python and Node.js — use the Apify SDK to call this actor programmatically and process results in your own pipeline (see API usage below).

Using the Apify API

You can call Etsy Scraper programmatically using the Apify API. Here are examples in Node.js, Python, and cURL.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('automation-lab/etsy-scraper').call({
searchQuery: 'handmade ceramic mug',
maxItems: 100,
sort: 'most_relevant',
freeShipping: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} products`);
items.forEach((item) => {
console.log(`${item.name} — $${item.price} by ${item.shop}`);
});

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/etsy-scraper").call(run_input={
"searchQuery": "vintage engagement ring",
"maxItems": 200,
"sort": "lowest_price",
"minPrice": 50,
"maxPrice": 500,
})
dataset = client.dataset(run["defaultDatasetId"]).list_items().items
for product in dataset:
print(f"{product['name']} — ${product['price']} ({product['shop']})")

cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~etsy-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQuery": "custom wedding invitation",
"maxItems": 50,
"sort": "most_relevant"
}'

Retrieve results after the run completes:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_APIFY_TOKEN&format=json"

Use with AI agents via MCP

Etsy Scraper is available as a tool for AI assistants that support the Model Context Protocol (MCP).

Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/etsy-scraper"

Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/etsy-scraper"
}
}
}

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

Example prompts

Once connected, try asking your AI assistant:

  • "Use automation-lab/etsy-scraper to find the 50 most relevant handmade silver rings under $100 with free shipping and export results as a table."
  • "Search Etsy for vintage denim jackets, sorted by lowest price, and summarize the price range and top shops."
  • "Find the 20 most recently listed custom wedding invitations on Etsy and list each product name, shop, and price."

Learn more in the Apify MCP documentation.

Etsy Scraper accesses only publicly available product listing data from Etsy search results — the same information any visitor sees when browsing etsy.com. No login, no authentication, and no private data access is involved.

Scraping publicly available web data is generally legal based on the 2022 US Ninth Circuit ruling in hiQ Labs v. LinkedIn, which established that scraping public data does not violate the Computer Fraud and Abuse Act (CFAA). The European Court of Justice has similarly held that publicly available data can be lawfully collected.

However, you should:

⚖️ Review Etsy's Terms of Service before scraping at scale — while public data extraction is broadly legal, Etsy's ToS may restrict automated access. Compliance with ToS is your responsibility.

🔒 Never collect personal data without lawful basis — this actor extracts only product and shop data, not buyer or payment information.

📏 Be respectful with volume — the scraper reads only a few pages at a time. Avoid running dozens of concurrent large-scale scrapes.

🏢 Consult legal counsel if you plan to use scraped data commercially at scale, especially across jurisdictions with varying data protection regulations.

For more details, see Apify's guide on web scraping legality.

Data handling

  • What is collected: the search words and URLs you enter, and public listing data from Etsy, including shop names and IDs. No login, buyer data or contact details are used.
  • Who sees what: Etsy sees the requests, through Apify's proxy network. No AI service receives your input or results.
  • Storage and deletion: your input, dataset and run logs stay in your Apify account under its retention settings, and you can delete them there. The Actor keeps nothing between runs. Do not put secrets in search words or URLs.
  • Error reports: failed operations send sanitized diagnostic input, exceptions and actor/build/run IDs to our private GlitchTip service for repair; secret fields and URL queries are removed and reports are retained for 30 days.
  • Not affiliated: this Actor is not affiliated with or endorsed by Etsy.
  • Support: use the Issues tab on this Actor's page.

FAQ

Why did the run return fewer products than maxItems? Etsy controls how many listings it exposes for each query: about 200 per search view, and fewer for narrow searches. The scraper reads across price ranges to go further, reaching 1,500+ on a popular search. Read the run's status message for what you got and why it stopped. Filters also reduce the count: when they match too few listings, the run stops rather than reading every page.

Why are results not in strict price order across a large run? Etsy sorts about 100 listings per view and then serves unsorted ones, which the scraper does not read in a price sort. Large requests continue in the next price range, so the order holds within a range; a few rows can step back up where a new range starts. recently_listed has the same limit.

Why does a run with a non-USD currency return nothing? Etsy prices listings by where the request comes from, so a residential proxy normally follows your currency automatically. If rows are still skipped (no proxy, a non-residential proxy, or a country that uses another currency), the status message names the cause: use a RESIDENTIAL proxy with its country empty or set to a country that uses your currency.

Why does a search for "wall art" read a page called wall_arts? Etsy has a results page for only one wording of many searches. When your exact wording has none, the scraper tries its singular or plural form and then the reversed word order. If none exist, you get a clear status message and no charge.

Which rows does isAd mark? Listings that Etsy shows as "Ad by Etsy seller" on the results page. Ads repeat across pages; each listing is saved once.

What happened to the old category input? It was removed from the input form because Etsy's working market route cannot apply it and the field did not change results. Existing saved integrations that still send category remain query-based; remove that property and include the niche in searchQuery instead.

Can I scrape individual Etsy product detail pages or whole shops? Not reliably. Etsy protects listing and shop pages much more aggressively than search pages. The optional enrichListingDetails setting tries listing pages, but most of them are blocked, so those fields are often null. Rows are charged the same with or without it.

Why do some products have null for rating or reviewCount? Products that have not yet received reviews do not display rating signals on Etsy. The scraper returns null instead of a misleading zero. Etsy can also omit a review count even when a rating is visible, so reviewCount independently remains null whenever the search card does not expose it.

How reliable are hasVariations and priceMayBeMinimumVariant? The scraper first tries to confirm variants from the listing page. Etsy sometimes blocks listing-detail pages more aggressively than search pages, so the scraper falls back to search-card signals such as Etsy's "from $12" minimum-price label and title cues like "choose", "customizable", "colors", or "sizes". variantDetectionStatus tells you which source was used. The fields are always boolean so false means "no variant signal found" rather than an ambiguous null.

The scraper returned "blocked" warnings. What should I do? Ensure you're using residential proxies (the default configuration). If blocks persist, try reducing maxItems or waiting a few minutes before retrying. Etsy's anti-bot detection can be more aggressive during peak traffic hours. If Etsy blocks every results page, the run fails with a clear message and no charge. The scraper automatically retries each request up to 5 times with fresh proxy sessions — occasional blocks are handled transparently.

How is this different from the official Etsy API? The official Etsy API requires an approved OAuth application, enforces strict rate limits, and does not expose search result pages. This scraper extracts the same data any browser visitor sees from public search pages, with no API key required, no rate limit approvals, and no OAuth setup.

How often can I run this scraper? There's no run frequency limit from the scraper side. Use Apify Schedules to run hourly, daily, or weekly. For price monitoring, daily runs are typically sufficient and keep costs low. You can also trigger runs via API as part of a larger pipeline.

🛒 Amazon Scraper — Extract product data, prices, ratings, and seller info from Amazon search results

🏷️ eBay Scraper — Scrape eBay product listings, prices, bids, and seller information

🛒 Walmart Scraper — Scrape Walmart product data, prices, and availability

📋 Craigslist Scraper — Scrape Craigslist listings by keyword and city

🛍️ Shopify Store Scraper — Monitor direct-to-consumer Shopify competitor catalogs, prices, availability, and reviews

👗 Poshmark Scraper — Extract fashion and resale listings from Poshmark

💻 Newegg Scraper — Scrape electronics and tech products from Newegg

🔎 Google Shopping Scraper — Scrape Google Shopping results for cross-marketplace price comparison

🎯 Fiverr Scraper — Extract Fiverr gig listings, seller info, and pricing for service marketplace research

⌂ 换网址