← Back to Skills Marketplace
nicemaths123

ecommerce-price

by nicemaths123 · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
99
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install ecommerce-price
Description
Monitor and compare product prices across major marketplaces in real time to detect drops, promotions, stock changes, and get AI-driven repricing recommendat...
README (SKILL.md)

E-Commerce Price Monitor and Competitive Intel: Track Prices, Detect Opportunities and Outsmart Every Competitor

Display Name: E-Commerce Price Monitor and Competitive Intel
Version: 2.0.0 Author: @g4dr

Overview

Monitor product prices across Amazon, eBay, Walmart, AliExpress, Zalando and Google Shopping in real time. This skill detects price drops, competitor promotions, stock changes and marketplace trends, then scores every opportunity and generates repricing recommendations so you always stay competitive.

One automated run replaces what pricing intelligence tools like Prisync ($99/mo), Competera ($500/mo) and Price2Spy ($24/mo) charge for manually.

Powered by: Apify + Claude AI


What This Skill Does

  • Monitor product prices on Amazon, eBay, Walmart, AliExpress, Zalando and Google Shopping simultaneously
  • Track price history and detect drops, spikes, promotions and out-of-stock events
  • Compare the same product across all retailers to find the best margin opportunities
  • Calculate your competitive position score (are you cheapest, mid-range or overpriced?)
  • Detect when competitors run flash sales, coupons or bundle deals
  • Generate AI repricing recommendations based on market position and margin targets
  • Trigger instant alerts when a competitor changes price below your threshold
  • Build historical price datasets for trend analysis and seasonal planning
  • Schedule automated daily or hourly price surveillance runs
  • Export everything as CSV, JSON or direct webhook to your repricing tool

Step 1: Set Up Your Price Engine

This skill uses Apify to scrape pricing data across all major marketplaces.

  1. Create your free account at Apify
  2. Go to Settings > Integrations and copy your Personal API Token
  3. Store it securely:
    export APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx
    

Free tier includes $5/month of compute. Enough to monitor 100+ products daily across multiple platforms.


Step 2: Install Dependencies

npm install apify-client axios

Apify Actors by Platform

Actor Platform Data Extracted
Apify Amazon Product Scraper Amazon Price, rating, ASIN, seller, stock status, deal badge
Apify Amazon Search Scraper Amazon Search results with prices, bestseller rank
Apify Amazon Reviews Scraper Amazon Reviews, star distribution, verified purchases
Apify eBay Scraper eBay Listings, sold prices, seller ratings, bid count
Apify Walmart Scraper Walmart Prices, availability, pickup/delivery options
Apify AliExpress Scraper AliExpress Product data, shipping cost, seller rating
Apify Zalando Scraper Zalando Prices, sizes, brands, discounts
Apify Google Shopping Scraper Google Shopping Aggregated prices from all retailers

Examples

Monitor Specific Products by URL

import ApifyClient from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

async function monitorProducts(productUrls) {
  const run = await client.actor("apify/amazon-product-scraper").call({
    productUrls: productUrls.map(url => ({ url })),
    maxReviews: 0
  });

  const { items } = await run.dataset().getData();

  return items.map(p => ({
    name: p.title,
    asin: p.asin,
    currentPrice: p.price,
    originalPrice: p.originalPrice,
    discount: p.originalPrice ? Math.round((1 - p.price / p.originalPrice) * 100) : 0,
    currency: p.currency || 'USD',
    rating: p.rating,
    reviewCount: p.reviewsCount,
    availability: p.availability,
    seller: p.seller,
    hasDealBadge: p.deal || false,
    url: p.url,
    scrapedAt: new Date().toISOString()
  }));
}

const products = await monitorProducts([
  "https://www.amazon.com/dp/B09G9HD6PD",
  "https://www.amazon.com/dp/B08N5WRWNW",
  "https://www.amazon.com/dp/B09XS7JWHH"
]);

products.forEach(p => {
  console.log(`${p.name}: $${p.currentPrice} ${p.discount > 0 ? `(${p.discount}% off)` : ''} ${p.hasDealBadge ? '[DEAL]' : ''}`);
});

Cross-Platform Price Comparison

async function compareAcrossPlatforms(searchQuery) {
  const [amazonRun, ebayRun, walmartRun, googleRun] = await Promise.all([
    client.actor("apify/amazon-search-scraper").call({
      searchQueries: [searchQuery],
      maxResultsPerQuery: 10,
      country: "US"
    }),
    client.actor("apify/ebay-scraper").call({
      searchQueries: [searchQuery],
      maxResults: 10
    }),
    client.actor("apify/walmart-scraper").call({
      searchQueries: [searchQuery],
      maxResults: 10
    }),
    client.actor("apify/google-shopping-scraper").call({
      queries: [searchQuery],
      maxResults: 10,
      country: "US"
    })
  ]);

  const [amz, ebay, wm, gs] = await Promise.all([
    amazonRun.dataset().getData(),
    ebayRun.dataset().getData(),
    walmartRun.dataset().getData(),
    googleRun.dataset().getData()
  ]);

  const all = [
    ...amz.items.map(i => ({ ...i, source: 'amazon', price: i.price })),
    ...ebay.items.map(i => ({ ...i, source: 'ebay', price: i.price })),
    ...wm.items.map(i => ({ ...i, source: 'walmart', price: i.price })),
    ...gs.items.map(i => ({ ...i, source: 'google_shopping', price: i.price }))
  ].filter(i => i.price && i.price > 0).sort((a, b) => a.price - b.price);

  const cheapest = all[0];
  const mostExpensive = all[all.length - 1];
  const avgPrice = Math.round(all.reduce((s, i) => s + i.price, 0) / all.length * 100) / 100;

  return {
    query: searchQuery,
    totalResults: all.length,
    cheapest: { source: cheapest.source, price: cheapest.price, title: cheapest.title },
    mostExpensive: { source: mostExpensive.source, price: mostExpensive.price },
    avgPrice,
    priceSpread: Math.round((mostExpensive.price - cheapest.price) / cheapest.price * 100),
    allResults: all,
    comparedAt: new Date().toISOString()
  };
}

const comparison = await compareAcrossPlatforms("Sony WH-1000XM5");
console.log(`Cheapest: $${comparison.cheapest.price} on ${comparison.cheapest.source}`);
console.log(`Price spread: ${comparison.priceSpread}% between cheapest and most expensive`);

Competitive Position Scoring

function scoreCompetitivePosition(yourPrice, marketData) {
  const prices = marketData.allResults.map(r => r.price).sort((a, b) => a - b);
  const rank = prices.filter(p => p \x3C yourPrice).length + 1;
  const percentile = Math.round((1 - rank / prices.length) * 100);

  let position, recommendation;

  if (percentile >= 80) {
    position = 'OVERPRICED';
    recommendation = `You are more expensive than ${percentile}% of competitors. Consider dropping to $${marketData.avgPrice} or adding value to justify premium.`;
  } else if (percentile >= 50) {
    position = 'MID-RANGE';
    recommendation = `You are in the middle of the pack. Differentiate with bundles, faster shipping, or better reviews to win at this price.`;
  } else if (percentile >= 20) {
    position = 'COMPETITIVE';
    recommendation = `Good position. You are cheaper than ${100 - percentile}% of competitors. Maintain and focus on conversion.`;
  } else {
    position = 'CHEAPEST';
    recommendation = `You are the cheapest option. Consider raising price by 5-10% to capture more margin without losing rank.`;
  }

  return {
    yourPrice,
    marketAvg: marketData.avgPrice,
    cheapestInMarket: prices[0],
    rank: `${rank} of ${prices.length}`,
    percentile,
    position,
    recommendation,
    priceToMatch: prices[0],
    priceToWin: Math.max(prices[0] - 0.01, 0)
  };
}

const position = scoreCompetitivePosition(299.99, comparison);
console.log(`Position: ${position.position} (${position.rank})`);
console.log(`Recommendation: ${position.recommendation}`);

Price Alert System with Webhook

async function priceAlertCheck(watchlist) {
  const alerts = [];

  for (const item of watchlist) {
    const run = await client.actor("apify/amazon-product-scraper").call({
      productUrls: [{ url: item.url }],
      maxReviews: 0
    });

    const { items } = await run.dataset().getData();
    const product = items[0];

    if (!product) continue;

    const priceChange = item.lastKnownPrice
      ? Math.round((product.price - item.lastKnownPrice) / item.lastKnownPrice * 100)
      : 0;

    if (product.price \x3C item.alertBelow) {
      alerts.push({
        type: 'PRICE_DROP_BELOW_TARGET',
        product: product.title,
        currentPrice: product.price,
        targetPrice: item.alertBelow,
        savings: Math.round((item.alertBelow - product.price) * 100) / 100,
        url: item.url,
        detectedAt: new Date().toISOString()
      });
    }

    if (Math.abs(priceChange) >= 10) {
      alerts.push({
        type: priceChange \x3C 0 ? 'MAJOR_PRICE_DROP' : 'MAJOR_PRICE_INCREASE',
        product: product.title,
        oldPrice: item.lastKnownPrice,
        newPrice: product.price,
        changePercent: priceChange,
        url: item.url,
        detectedAt: new Date().toISOString()
      });
    }

    if (product.availability && product.availability.includes('Out of Stock')) {
      alerts.push({
        type: 'OUT_OF_STOCK',
        product: product.title,
        lastPrice: product.price,
        url: item.url,
        detectedAt: new Date().toISOString()
      });
    }
  }

  // Send alerts via webhook
  if (alerts.length > 0) {
    await axios.post(process.env.WEBHOOK_URL || 'https://hooks.slack.com/your-webhook', {
      text: `Price Alerts (${alerts.length}):\
${alerts.map(a =>
        `${a.type}: ${a.product} - $${a.currentPrice || a.newPrice} ${a.changePercent ? `(${a.changePercent}%)` : ''}`
      ).join('\
')}`
    });
  }

  return alerts;
}

// Example watchlist
const watchlist = [
  { url: "https://www.amazon.com/dp/B09XS7JWHH", alertBelow: 250, lastKnownPrice: 279.99 },
  { url: "https://www.amazon.com/dp/B09G9HD6PD", alertBelow: 100, lastKnownPrice: 129.99 }
];

const alerts = await priceAlertCheck(watchlist);
console.log(`${alerts.length} alerts triggered`);

AI Repricing Recommendations

import axios from 'axios';

async function getRepricingAdvice(product, marketData) {
  const competitorPrices = marketData.allResults
    .map(r => `${r.source}: $${r.price}`)
    .join(', ');

  const prompt = `You are a pricing strategist. Analyze this product's market position and recommend an optimal price.

PRODUCT: ${product.name}
YOUR CURRENT PRICE: $${product.currentPrice}
YOUR COST: $${product.costPrice || 'Unknown'}
YOUR RATING: ${product.rating}/5 (${product.reviewCount} reviews)

COMPETITOR PRICES: ${competitorPrices}
MARKET AVERAGE: $${marketData.avgPrice}
CHEAPEST: $${marketData.cheapest.price} (${marketData.cheapest.source})
PRICE SPREAD: ${marketData.priceSpread}%

PROVIDE:
1. Recommended price (specific number)
2. Reasoning (2 sentences max)
3. Expected impact on sales volume (increase/decrease/stable)
4. Margin impact vs current price
5. Alternative strategy if you want to stay premium

Keep it data-driven and concise.`;

  const { data } = await axios.post('https://api.anthropic.com/v1/messages', {
    model: "claude-sonnet-4-20250514",
    max_tokens: 400,
    messages: [{ role: "user", content: prompt }]
  }, {
    headers: {
      'x-api-key': process.env.CLAUDE_API_KEY,
      'anthropic-version': '2023-06-01'
    }
  });

  return data.content[0].text;
}

Full Pipeline: Monitor, Compare, Score, Alert, Export

import { writeFileSync } from 'fs';

async function fullPriceIntelPipeline(products, searchQuery) {
  console.log('Starting Price Intelligence Pipeline...');

  // STEP 1: Monitor your products
  const monitored = await monitorProducts(products);
  console.log(`Step 1: ${monitored.length} products monitored`);

  // STEP 2: Compare across platforms
  const comparison = await compareAcrossPlatforms(searchQuery);
  console.log(`Step 2: ${comparison.totalResults} competitor prices found`);

  // STEP 3: Score position for each product
  const scored = monitored.map(product => ({
    ...product,
    position: scoreCompetitivePosition(product.currentPrice, comparison)
  }));

  // STEP 4: Generate repricing advice for overpriced items
  for (const product of scored.filter(p => p.position.position === 'OVERPRICED')) {
    product.repricingAdvice = await getRepricingAdvice(product, comparison);
    await new Promise(r => setTimeout(r, 500));
  }

  // STEP 5: Export
  const report = {
    generatedAt: new Date().toISOString(),
    query: searchQuery,
    products: scored,
    marketOverview: {
      avgPrice: comparison.avgPrice,
      cheapest: comparison.cheapest,
      priceSpread: comparison.priceSpread,
      totalCompetitors: comparison.totalResults
    }
  };

  const filename = `price-intel-${Date.now()}.json`;
  writeFileSync(filename, JSON.stringify(report, null, 2));
  console.log(`Report exported to ${filename}`);

  // CSV export
  const headers = ["name","currentPrice","originalPrice","discount","rating","reviewCount","availability","position","recommendation"];
  const csv = [
    headers.join(","),
    ...scored.map(p => [
      `"${p.name}"`, p.currentPrice, p.originalPrice || '', p.discount,
      p.rating, p.reviewCount, `"${p.availability}"`,
      `"${p.position.position}"`, `"${p.position.recommendation}"`
    ].join(","))
  ].join("\
");

  writeFileSync(`price-intel-${Date.now()}.csv`, csv);
  return report;
}

await fullPriceIntelPipeline(
  ["https://www.amazon.com/dp/B09XS7JWHH"],
  "wireless noise cancelling headphones"
);

Normalized Price Schema

{
  "name": "Sony WH-1000XM5 Wireless Headphones",
  "asin": "B09XS7JWHH",
  "source": "amazon",
  "currentPrice": 279.99,
  "originalPrice": 349.99,
  "discount": 20,
  "currency": "USD",
  "rating": 4.5,
  "reviewCount": 12847,
  "availability": "In Stock",
  "seller": "Amazon.com",
  "hasDealBadge": false,
  "competitivePosition": "MID-RANGE",
  "positionPercentile": 55,
  "url": "https://www.amazon.com/dp/B09XS7JWHH",
  "scrapedAt": "2025-02-25T10:00:00Z"
}

What Makes This Different

Feature Basic Price Tracker This Skill
Platforms 1 marketplace 6+ marketplaces in parallel
Price comparison Same platform only Cross-platform with spread analysis
Competitive scoring None Position percentile + actionable advice
Repricing Manual AI-generated recommendations per product
Alerts Basic threshold Price drops + stock changes + deal badges
Historical tracking None Timestamped data for trend analysis
Export Raw data CRM-ready CSV + JSON + webhook

Scheduling Automated Monitoring

Use Apify Schedules for hands-free monitoring:

  1. Go to https://console.apify.com/schedules
  2. Create a new schedule (daily at 8am or every 6 hours)
  3. Select your actor and saved input configuration
  4. Enable webhook notifications for price change alerts
  5. Connect to Slack, email or your repricing tool via webhook

Pro Tips

  1. Monitor by ASIN (not URL) for consistent Amazon tracking across regions
  2. Track competitor sold prices on eBay to understand actual market clearing price, not just listing price
  3. Use Google Shopping as a meta-comparison since it aggregates prices from hundreds of retailers
  4. Set alerts at 10%+ change to catch real moves and filter out normal fluctuations
  5. Run price checks during off-peak hours (2am to 6am) for fastest results and lowest cost
  6. Cross-reference price drops with review count drops to detect competitors clearing inventory before discontinuation
  7. Build a 30-day price chart per product to identify seasonal patterns and time your promotions

Cost Estimate

Action Apify CU Cost
Monitor 10 products (1 platform) ~0.05 CU ~$0.02
Cross-platform comparison (4 platforms) ~0.20 CU ~$0.08
Full pipeline (monitor + compare + alerts) ~0.30 CU ~$0.12
Daily monitoring (100 products, 4 platforms) ~3.0 CU/day ~$1.20/day
Monthly automated surveillance ~90 CU/month ~$36/month

Compare that to Prisync at $99/month or Competera at $500/month. Scale with Apify as you grow.


Error Handling

try {
  const run = await client.actor("apify/amazon-product-scraper").call(input);
  const dataset = await run.dataset().getData();
  return dataset.items;
} catch (error) {
  if (error.statusCode === 401) throw new Error("Invalid Apify token. Get yours at https://www.apify.com?fpr=dx06p");
  if (error.statusCode === 429) throw new Error("Rate limit. Reduce batch size or add delays.");
  if (error.statusCode === 404) throw new Error("Product page not found. Check the URL or ASIN.");
  if (error.message.includes("timeout")) throw new Error("Scrape timed out. Try fewer products per run.");
  throw error;
}

Requirements

  • An Apify account with API token
  • Node.js 18+ with apify-client and axios
  • Claude API key for repricing recommendations (optional but recommended)
  • A repricing tool, dashboard or spreadsheet to receive data (Prisync, Wiser, Excel, Airtable)
  • Optional: Slack or email webhook for real-time alerts
Usage Guidance
This skill appears to do what it says (using Apify to scrape prices) but the package registry metadata left out the APIFY_TOKEN requirement and the documentation asks you to run npm install locally. Before installing or using it: 1) Verify with the publisher why the registry shows no required env vars while SKILL.md requires APIFY_TOKEN. 2) Only provide an Apify Personal API Token if you trust the skill and understand what data will be scraped and where results/webhooks will be sent. 3) Be cautious about scheduling automated runs or webhooks to external endpoints—review what data will be exported. If you need higher assurance, ask the author to publish correct metadata (declaring APIFY_TOKEN) and to clarify webhook endpoints and scheduling behavior.
Capability Analysis
Type: OpenClaw Skill Name: ecommerce-price Version: 1.0.0 The skill is a comprehensive e-commerce price monitoring tool that utilizes the Apify platform and Claude AI to track prices across multiple marketplaces like Amazon and eBay. The SKILL.md file provides functional code examples for price comparison, competitive scoring, and automated alerts via webhooks, all of which align with the stated purpose. While the documentation contains numerous affiliate links for Apify (e.g., ?fpr=dx06p), there is no evidence of malicious intent, unauthorized data exfiltration, or prompt injection designed to compromise the agent.
Capability Assessment
Purpose & Capability
The skill claims to monitor prices across marketplaces and its instructions use Apify actors and apify-client — that matches the description. However, the registry metadata lists no required environment variables or credentials while the instructions explicitly require an APIFY_TOKEN and npm packages (apify-client, axios). The missing declarations are an inconsistency.
Instruction Scope
SKILL.md provides concrete code examples that call Apify actors, fetch datasets, and export data or send webhooks — all within the advertised scope. There are no instructions to read unrelated system files or harvest unrelated credentials. The instructions do tell the user to export APIFY_TOKEN and to run npm install, and they include vague features (scheduling, webhooks) without concrete safety/permission guidance, which could be clarified.
Install Mechanism
This is an instruction-only skill with no install spec or bundled code. That is lower risk. The SKILL.md suggests running 'npm install apify-client axios' locally; that is typical for the described JavaScript examples and is not performed automatically by the platform.
Credentials
The runtime instructions require an APIFY_TOKEN (Personal API Token) and implicitly rely on an Apify account/billing, but the skill metadata does not declare any required env vars or a primary credential. That mismatch (unreported credential requirement) reduces transparency and is a security/operational concern. No other unrelated secrets are requested.
Persistence & Privilege
The skill is not always-enabled and does not request system paths or persistent privileges. It does not attempt to modify other skills or global agent config according to the provided files.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install ecommerce-price
  3. After installation, invoke the skill by name or use /ecommerce-price
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Major update with expanded platform coverage, new analytics, and smarter repricing. - Monitors product prices in real time across Amazon, eBay, Walmart, AliExpress, Zalando, and Google Shopping. - Detects price drops, flash sales, promotions, and stock changes for maximum market awareness. - Adds competitive position scoring (cheapest, mid-range, overpriced) with AI-driven repricing recommendations. - Supports historical price datasets, automated runs, and multi-format exports (CSV, JSON, webhook). - Runs via Apify using your API token; includes setup and usage examples for rapid deployment.
Metadata
Slug ecommerce-price
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is ecommerce-price?

Monitor and compare product prices across major marketplaces in real time to detect drops, promotions, stock changes, and get AI-driven repricing recommendat... It is an AI Agent Skill for Claude Code / OpenClaw, with 99 downloads so far.

How do I install ecommerce-price?

Run "/install ecommerce-price" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is ecommerce-price free?

Yes, ecommerce-price is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does ecommerce-price support?

ecommerce-price is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created ecommerce-price?

It is built and maintained by nicemaths123 (@nicemaths123); the current version is v1.0.0.

💬 Comments