from pydantic import BaseModel, Field
from typing import List, Optional
from decimal import Decimal
from scrapegraph_py import Client
# Schema for product pricing data
class ProductPrice(BaseModel):
name: str = Field(description="Name of the product")
price: Decimal = Field(description="Current price")
original_price: Optional[Decimal] = Field(description="Original price if on sale")
currency: str = Field(description="Currency code (e.g., USD)")
seller: str = Field(description="Seller/retailer name")
availability: str = Field(description="Product availability status")
updated_at: str = Field(description="Last update timestamp")
# Schema for price monitoring results
class PriceMonitorResult(BaseModel):
products: List[ProductPrice] = Field(description="List of product prices")
total_products: int = Field(description="Total number of products monitored")
source_url: str = Field(description="URL of the monitored page")
client = Client()
# Monitor competitor prices
response = client.smartscraper(
website_url="https://competitor-store.com/category/products",
user_prompt="Extract pricing information for all products including name, current price, original price if available, and availability status",
output_schema=PriceMonitorResult
)
# Process and analyze the data
for product in response.products:
if product.original_price and product.original_price > product.price:
discount = ((product.original_price - product.price) / product.original_price) * 100
print(f"Product: {product.name}")
print(f"Current Price: {product.price} {product.currency}")
print(f"Original Price: {product.original_price} {product.currency}")
print(f"Discount: {discount:.1f}%")
print(f"Availability: {product.availability}\n")