Skip to main content
ProjectsSignal (ACIA)

Project 07 / 12

Autonomous Competitive Intelligence

Signal (ACIA)

Checking a competitor's pricing page by hand means opening ten tabs and comparing numbers every week. This pipeline scrapes those pages on a schedule and only calls an LLM when a price moves past a threshold from the stored baseline, so token cost doesn't scale with how often you check.

signal-frontend-production-df2d.up.railway.app
Signal (ACIA) preview
Stack
SupabaseNode.jsBright DataReact
Modules
4
Key decisions
2

01Problem

What was broken

Checking competitor pricing by hand doesn't scale past a handful of companies, and it's easy to miss a change. Scraping the pages instead is fragile: pricing UIs change their DOM often, and running an LLM over every scrape to read the price back out gets expensive fast once you check on a schedule.

02Impact

What it does now

Competitor pricing checks run on their own now. The delta engine only calls an LLM when a price actually moves, so token cost stays close to flat as the list of tracked competitors grows.

03Architecture

How it is built

Bright Data proxies fetch the page and hand the raw DOM to a parser. The delta engine compares the extracted price against a baseline stored in Supabase, keeps history in a memory layer, and only calls Gemini when the price crosses the threshold.

Modules

  • Proxy Fallback Router
  • Delta Engine
  • Acontext Memory
  • ActionBook Agent

04Intelligence

Where the AI sits

ActionBook agents navigate client-side rendered tabs, like Monthly vs Annual pricing toggles, that a static scraper would miss, before the delta engine compares the extracted price against the stored baseline.

05Decisions

Trade-offs I chose

  1. 01

    Cost-Aware Delta Engine

    Instead of running every scrape through Gemini, a text-delta check compares the new scrape against the stored baseline first. Gemini only runs when that check finds a real change, so an unchanged competitor costs a string comparison instead of a model call.

  2. 02

    Bright Data Waterfall Setup

    Residential proxies with fallback logic keep scrapes from getting blocked by bot detection like Cloudflare and DataDome. When one proxy gets flagged, the next request in the waterfall tries a different one.