Sensabeauty Price Tracker avatar

Sensabeauty Price Tracker

Under maintenance

Pricing

Pay per usage

Go to Apify Store
Sensabeauty Price Tracker

Sensabeauty Price Tracker

Under maintenance

Comp prices

Pricing

Pay per usage

Rating

0.0

(0)

Developer

PayAI

PayAI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

a month ago

Last modified

Share

SensaBeauty Price Tracker - APIFY Actor

Automated competitor price tracking for SensaBeauty products.

Features

  • 3 Competitor Sites: Jomashop, FragranceNet, Maxaroma
  • Smart Filtering: Automatically scrapes 998 fragrance products (excludes skincare)
  • Intelligent Matching: Fuzzy search with SKU prioritization
  • Real-time Analytics: Automatic price statistics calculation
  • Supabase Integration: Direct database updates with confidence tracking
  • Match Quality Scores: Confidence scoring (0.00 - 1.00)
  • Statistics Logging: Scrape run performance metrics and analytics

Deployment

Prerequisites

  • APIFY account
  • APIFY CLI installed: npm install -g apify-cli
  • Supabase credentials

Deploy to APIFY

# Install dependencies
npm install
# Test locally
npm test
# Login to APIFY
apify login --token apify_api_1Z5ffM5PqQSRz2LOl5SWbdbsPvbkkg35ssUx
# Deploy
apify push

Environment Variables

Set these in APIFY Console:

  • SUPABASE_URL = https://iuyxjwgklxhxqtqjwvrq.supabase.co
  • SUPABASE_SERVICE_KEY = [your service role key]

Usage

Input Schema

{
"mode": "full", // "full", "sample", or "specific"
"productIds": [], // Array of product IDs (for "specific" mode)
"competitors": [ // Which sites to scrape
"jomashop",
"fragrancenet",
"maxaroma"
],
"maxConcurrency": 3, // Number of parallel pages
"updateDatabase": true // Whether to update Supabase
}

Run via API

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"sample"}'

Run via GitHub Actions

The actor is automatically triggered daily at 2 AM UTC by the GitHub Actions workflow in .github/workflows/price-sync.yml.

Output

Data Schema

Each product scrape outputs structured JSON:

{
"productId": "uuid", // Product UUID from Supabase
"productName": "Product Name", // SensaBeauty product name
"productSku": "SKU123", // Product SKU/UPC code
"competitor": "jomashop.com", // Competitor domain
"competitorName": "Jomashop", // Human-readable name
"price": 89.99, // Current price (USD)
"originalPrice": 89.99, // MSRP price
"currency": "USD", // Currency code
"availability": "in_stock", // Stock status
"url": "https://...", // Direct product URL
"matchedTitle": "...", // Matched product title
"matchConfidence": 0.85, // Match score (0.00-1.00)
"scrapedAt": "2025-10-24T...", // ISO 8601 timestamp
"status": "success" // success|not_found|error
}

Storage Destinations

  1. APIFY Dataset: All scraped price data (always saved)
  2. Supabase Tables (if updateDatabase: true):
    • competitor_prices: Individual price records
    • product_price_analytics: Calculated statistics
    • scrape_runs: Run statistics and performance metrics

Run Summary

Available via Actor.getValue('OUTPUT'):

{
"runId": "...",
"mode": "full",
"competitors": ["jomashop", "fragrancenet", "maxaroma"],
"productsAttempted": 100,
"productsMatched": 85,
"matchRate": 85.00,
"databaseUpdated": true,
"completedAt": "2025-10-24T...",
"status": "completed"
}

Product Filtering

The actor automatically filters products to only scrape fragrances:

  • 998 fragrance products (category = "all")
  • Excludes 2 skincare products (Serums, Cleansers)

This filtering ensures:

  • Higher match rates (fragrances are sold on competitor sites)
  • Faster run times (no wasted requests on skincare)
  • More accurate pricing data

Performance

  • Products: 998 fragrances (automatically filtered)
  • Estimated Match Rate: 40-60% (niche fragrances have lower availability)
  • Duration: ~20-25 hours for full catalog (998 × 3 competitors)
  • Concurrency: 3 pages (adjustable, recommended: 3)
  • Rate Limiting: Auto-adjusts based on CPU and response codes

Monitoring

Check scrape quality:

SELECT * FROM scrape_runs ORDER BY completed_at DESC LIMIT 5;

View price updates:

SELECT COUNT(*) FROM competitor_prices
WHERE scraped_at > NOW() - INTERVAL '24 hours';

Support

For issues or questions, contact support or check the integration documentation.