Skip to content

Scraper Code and Methodology

Цель: документировать как собраны данные чтобы можно было воспроизвести или расширить scrape в будущем.

Расположение scraper-проекта

Section titled “Расположение scraper-проекта”

Корень: /Users/ivanprotsko/upready/projects/fiverr-research/

Важно: не путать с этим docs site (/Users/ivanprotsko/upready/projects/fiverr/). Scraper — отдельный TypeScript/Playwright проект.

  • patchright — fork playwright с undetectable patches (обходит PerimeterX)
  • Chrome channel — реальный установленный Chrome, не headless
  • TypeScript + tsx — типизированный код без build step
  • persistent context — один и тот же browser profile между запусками
  • parallel workers — несколько профилей для parallel scraping

Fiverr использует PerimeterX / HUMAN Security challenge (“It needs a human touch”). Результаты попыток обхода:

МетодРаботает?Почему
curl + user-agentFiverr детектит
curl + Googlebot UAIP-based detection, not UA
playwright headlessWebdriver detected
playwright headedAutomation signals detected
rebrowser-playwrightUpdated detection
patchright + Chrome channelUndetected patches + real browser
Public sitemapsНе защищены (static XML files)
Wayback Machine⚠️Few gig URLs archived

Главный инсайт: public sitemaps (sitemap_gigs.xml.gz, sitemap_users.xml.gz etc.) не защищены — обычный curl работает. Они дают static map всех публичных URLs.

Файл: /Users/ivanprotsko/upready/projects/fiverr-research/scripts/parse-sitemaps.ts

Парсит gzipped sitemap XML → JSONL. Превращает 308K gig URLs в structured data без посещения Fiverr.

Output:

  • /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/gigs.jsonl — 307 985 gig URLs
  • /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/sellers.jsonl — 310 422 seller URLs
  • /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/categories.jsonl — 945 category URLs

Файл: /Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-listings.ts

Посещает category listing pages через patchright. Извлекает perseus-initial-props JSON embedded в HTML каждой страницы — это hydration payload React app который содержит все структурированные данные гигов.

Output: /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/gigs-raw.jsonl (incremental append)

Key trick: вместо парсинга HTML — читаем <script id="perseus-initial-props"> который содержит полностью typed JSON со всеми полями (price, rating, seller info, metadata). Это намного надёжнее чем selector-based scraping.

Файлы:

  • /Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-listings-2.ts
  • /Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-listings-3.ts

Те же скрипты но с разными Chrome profiles (не конфликтуют). Это даёт 3x speedup через parallelization.

Targeting different category ranges через env vars.

Файл: /Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-keywords.ts

Вместо walk по category listings — делает search queries по 42 modern-stack keywords. Собирает top гиги по каждому поисковому запросу.

Output: /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/keyword-gigs.jsonl

Все analysis scripts не touch Fiverr — работают с локальными JSONL файлами.

Строит taxonomy tree из 945 category URLs.

Output:

  • /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/categories-tree.json
  • /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/categories-tree.md

Основной analyzer: pricing distribution, country split, seller levels. Output — несколько JSON/TSV файлов в /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/analysis/. Запускается много раз через итерацию анализа.

Per-keyword statistics: medians, Pro rates, top countries.

Western vs cheap-country split per subcategory. Identifies Western-friendly ниши.

Competition tier breakdown (low/medium/high based on total gig count).

analyze-premium-dev.ts (главный скрипт для нашей стратегии)

Section titled “analyze-premium-dev.ts (главный скрипт для нашей стратегии)”

Фильтрует к premium dev ($1K+) — 104 гига.

Output: /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/analysis/premium-dev-analysis.json

Этот скрипт создал данные которые подкрепляют всю нашу стратегию. Без него мы бы полагались на общую статистику (median $30), которая скрывает premium сегмент.

Как запустить (если нужно re-scrape)

Section titled “Как запустить (если нужно re-scrape)”
Terminal window
cd /Users/ivanprotsko/upready/projects/fiverr-research
npm install
npx patchright install chromium

Sitemaps уже скачаны в /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/sitemaps/. Запустить parser:

Terminal window
npx tsx scripts/parse-sitemaps.ts
Terminal window
SCRAPE_CATEGORIES=programming-tech,business,data \
MAX_PAGES_PER_SUBCAT=10 \
MIN_DEPTH=2 MAX_DEPTH=2 \
DELAY_MS=2500 \
npx tsx scripts/scrape-listings.ts
Terminal window
npx tsx scripts/scrape-keywords.ts
Terminal window
npx tsx scripts/analyze-gigs.ts
npx tsx scripts/analyze-premium-dev.ts
  • 2-3 секунды между запросами (DELAY_MS env var)
  • Parallel workers — 3 max одновременно (больше = suspicious patterns)
  • Persistent Chrome profile — хранит cookies, fingerprint, history (выглядит как real user)

Data scope ограничен publicly visible без login:

  • ❌ Buyer Requests feed (нужен login)
  • ❌ Private messages / seller inbox
  • ❌ Fiverr Business pool (отдельный authenticated section)
  • ❌ Pro application flow (login required)
  • ❌ Historical price changes / review growth over time
  • ❌ Orders in queue counts (иногда показываются публично, но не всегда)

Chat conversations, seller contact details, buyer identities — всё это hidden.