Go to file
Talha Ahmed 6a0ce38546 Untrack the Apify runtime cache
It is regenerated on demand and rewritten on every scrape, so it only churns
history. 462 KB and the largest file in the repo.
2026-07-31 19:53:48 +05:00
.streamlit first commit 2026-07-31 19:42:26 +05:00
competetor first commit 2026-07-31 19:42:26 +05:00
config first commit 2026-07-31 19:42:26 +05:00
dashboard first commit 2026-07-31 19:42:26 +05:00
data Untrack the Apify runtime cache 2026-07-31 19:53:48 +05:00
scripts first commit 2026-07-31 19:42:26 +05:00
src/pricing_agent first commit 2026-07-31 19:42:26 +05:00
tests first commit 2026-07-31 19:42:26 +05:00
.env.example first commit 2026-07-31 19:42:26 +05:00
.gitignore Untrack the Apify runtime cache 2026-07-31 19:53:48 +05:00
ARCHITECTURE.md first commit 2026-07-31 19:42:26 +05:00
COSMOS_API.postman_collection.json first commit 2026-07-31 19:42:26 +05:00
README.md first commit 2026-07-31 19:42:26 +05:00
app.py first commit 2026-07-31 19:42:26 +05:00
claude.md first commit 2026-07-31 19:42:26 +05:00
legacy_app.py first commit 2026-07-31 19:42:26 +05:00
ppt.md first commit 2026-07-31 19:42:26 +05:00
pyproject.toml first commit 2026-07-31 19:42:26 +05:00
requirements.txt first commit 2026-07-31 19:42:26 +05:00

README.md

Pricing & Profitability Analyst — AI Agent (Pilot)

The first buildable agent from the Amazon 1000+ product launch team. It automates the Pricing Analyst's gate: for each SKU it builds the full fee stack, computes contribution margin / break-even / MAP, checks competitive price + Buy Box / suppression, then proposes a price and an APPROVED / BLOCKED / NEEDS_REVIEW decision. A human approves before anything is written back to the master tracker.

Built on LangGraph (stateful, gated, auditable) + OpenAI (narrative only — never arithmetic). All money math lives in a pure, unit-tested module.

Architecture

enrich ─▶ compute_margin ─▶ fetch_competitive ─▶ evaluate ─▶ human_review (interrupt) ─▶ write_back
   │ provider │  │ margin_engine │  │ provider │  │ gate │        │ HITL │            │ tracker │
  • providers.py — market-data seam: cosmos (live) ↔ mock (offline). Nodes are backend-agnostic.
  • cosmos/ — real COSMOS integration: client.py (auth + token refresh + retries), service.py (products, take-home fee quote, invp sales-trend + inventory, bulk calculator, price read, guarded price-write stub), models.py (typed responses).
  • analyze.py — the price verdict: combines per-unit margin (takehome-calculator), the 6-month sales trend (invp-insight: averageSale6Months vs 7/30-day), and total economics (bulk-calculator: volume storage on current inventory) → GOOD / CAUTION / POOR.
  • tools/margin_engine.py — pure formulas. stack_from_quote() builds the fee stack from COSMOS's real dollar fees; worst_case_stack() is the synthetic mock path. Golden values (mock): break-even $16.76, MAP $19.00, CM ~28%.
  • tools/gate.py — deterministic APPROVED/BLOCKED/NEEDS_REVIEW (playbook §13).
  • tools/tracker.py — SKU list in / decisions out: csvgsheets.
  • llm.py — OpenAI structured output; falls back to a template if no key.
  • graph.py — LangGraph wiring + interrupt() for human approval.

Competitive price / Buy Box / suppression comes from Apify (junglee/Amazon-crawler) when APIFY_TOKEN is set: SKU → COSMOS ASIN → scrape amazon.com/dp/{ASIN}. Without the token the competitive gate stays UNKNOWN (COSMOS has no Buy Box data).

For a covered product line the comparison workbook takes precedence over the per-ASIN scrape — see Coverage in ARCHITECTURE.md, which also documents which of the two scrapers is authoritative for Buy Box state and why.

Setup

pip install -e ".[dev]"
cp .env.example .env      # then fill COSMOS_EMAIL / COSMOS_PASSWORD
# Optional Buy Box: set APIFY_TOKEN (and APIFY_SELLER_ID for WON vs LOST_PRICE)

.env (git-ignored) holds secrets. Defaults: DATA_BACKEND=cosmos, TRACKER_BACKEND=csv. Set DATA_BACKEND=mock to run fully offline (tests + local dev, no credentials).

Dashboard UI

pip install -r requirements.txt   # streamlit + plotly + pandas + numpy
streamlit run app.py

One-page pricing dashboard in the Utopia/CRAI design system (cream paper, teal primary, coral accent, navy chrome): stat tiles, action pills (↑ Raise / ↓ Lower / → Hold / 🔍 Check), and a recommendation queue where each SKU expands into Approve / Modify / Reject plus seven analysis tabs — price & demand, inventory outlook, scenarios, competitors, PPC, costs, and AI reasoning.

Two ways to analyze (sidebar):

  • Single product — enter one SKU for a full price analysis.
  • Product line — enter a SKU prefix and a product-count slider to analyze a whole line at once.

Live COSMOS data only: every number comes from the real pipeline (take-home fees, 6-month history, elasticity, actual profit, optional competitor Buy Box prices).

The previous analyst UI is still available: streamlit run legacy_app.py.

Run (CLI)

# ANALYZE a price — full breakdown + 6-month trend + AI narrative + suggested price:
python -m pricing_agent.cli --sku <REAL_SKU> --price 24.99 --analyze

# BULK — scan a product line, ranked worst-first with suggested prices:
python -m pricing_agent.cli --bulk --sku-prefix UBMICRO --limit 15

# Live COSMOS, one real SKU at a candidate price (interactive approval):
python -m pricing_agent.cli --sku <REAL_SKU> --price 24.99

# Non-interactive (approve healthy, reject the rest):
python -m pricing_agent.cli --sku <REAL_SKU> --price 24.99 --auto smart

# Offline demo on the sample tracker:
python -m pricing_agent.cli --all --backend mock --auto smart

# Live COSMOS read-only health check:
python scripts/cosmos_smoke.py <REAL_SKU> 24.99

Outputs: data/sample_skus_out.csv (pricing columns + status) and data/audit_log.csv.

Test

pytest      # margin engine, gate, COSMOS mapping, end-to-end graph (all offline)

Going live

Switch What you need
DATA_BACKEND=cosmos COSMOS_EMAIL / COSMOS_PASSWORD in .env (already wired)
Price write-back to COSMOS Confirm the price_adjustment.edit_price POST/PUT endpoint, then fill CosmosPricingService.submit_price_approval()
TRACKER_BACKEND=gsheets Google service-account JSON + TRACKER_SHEET_ID
Live LLM rationale OPENAI_API_KEY in .env
Buy Box / competitor gate APIFY_TOKEN in .env (scrapes ASIN PDP via junglee/Amazon-crawler)
Confirm Buy Box owner Set APIFY_SELLER_ID to your Amazon merchant id

Every configurable value lives in .env.example (credentials, tokens, paths) or config/pricing_rules.yaml (thresholds and policy). The COSMOS endpoints themselves are catalogued in COSMOS_API.postman_collection.json.