Back to Projects
AI Deal SourcingLiveBuilt on n8n

Acquisition Deal Radar

An unattended weekly sweep of business marketplaces that surfaces only pre-qualified candidates

Project Snapshot
Acquisition Deal Radar

Overview

Anyone shopping for an online business to buy has to check a dozen marketplaces by hand, re-read the same listings every week, and mentally discard everything overpriced, already sold, or too small to matter. It is exactly the kind of work that stops happening after a month. This system runs the sweep instead. It pulls live listings from three marketplaces, normalizes wildly different payloads into one shape, scores each against a configured thesis, and surfaces only what survives.

Approach & Architecture

Each run pulls from three listing APIs, advancing a rotating per-source page cursor held in workflow state so it sweeps deeper rather than re-reading the first page. Payloads collapse into a single schema, with margin and earnings multiple derived from whichever revenue fields the source happens to provide. Two dedup stages follow, one collapsing duplicates within the run and one checking a persistent fingerprint store across runs. A deterministic financial gate then drops anything that could not clear the alert bar even with a full model bonus, which is what bounds inference cost before it is spent.

Workflow Topology

FETCHNORMALIZEGATESCOREALERTsurvivorsno repeatsWeekly Sweep — Also callable as a sub-workflow with runtime overridesWeekly SweepMarketplaces — Three listing APIs, each with its own payload shapeMarketplacesPage Cursors — Rotating per-source cursors sweep deeper each runPage CursorsUnify Schema — Wildly different payloads collapse to one listing shapeUnify SchemaDerive Metrics — Margin and earnings multiple from whichever fields existDerive MetricsThesis Filter — Rejects anything outside the configured acquisition criteriaThesis FilterTwo-Stage Dedup — In-run collapse plus a persistent cross-run fingerprint storeTwo-Stage DedupPre-Score Floor — Drops listings that cannot reach the bar even with a full bonusPre-Score FloorLocal Model — Self-hosted, one call per surviving listing, JSON enforcedLocal ModelBounded Blend — Score computed in code; the model's influence is cappedBounded BlendCategory Router — Weighted keyword match across eight categoriesCategory RouterPost + Thread — Lands in the matching category channel and opens a threadPost + ThreadFunnel Summary — Reports exactly what was rejected and whereFunnel Summary1 workflow · 34 nodes · Schedule, Sub-workflown8n

A condensed view of the real node graph.

Outcome & Impact

The weekly manual sweep is gone. Across its production run the pipeline fingerprinted hundreds of distinct listings without ever repeating an alert, sweeping progressively deeper into each marketplace through its rotating cursors. Layered gating means only listings passing the financial criteria, then the score floor, then the combined threshold ever reach a human.

Challenges & Solutions

  • Bounding inference cost on a local model by proving mathematically which listings cannot reach the alert threshold, so the gate encodes the maximum possible bonus and drops everything below it
  • Correlating asynchronous model responses back to their source listings without index drift, by carrying a correlation key through every filtering and dedup stage
  • Rate limiting three third-party APIs inside a sandboxed code environment where the usual timer primitives are unavailable
  • Refusing to guess on failure, so an unparseable or unavailable model response scores zero and is dropped by the threshold filter rather than passing through unnoticed

Key Features

  • Aggregates three marketplace APIs into one normalized listing schema, deriving margin and multiple from whichever fields exist
  • Rotating per-source page cursors persisted in workflow state, sweeping deeper each run and wrapping at the end
  • Two-stage deduplication: in-run collapse on title and price, plus a persistent cross-run fingerprint store
  • Deterministic pre-score gate drops listings mathematically incapable of clearing the bar, bounding model inference
  • Hybrid scoring computed in code, with the model's influence capped at a bounded adjustment
  • Weighted keyword routing sends each candidate to its matching category destination and opens a discussion thread
  • Runtime overrides for sources, depth, and minimum score, plus a funnel summary of exactly what was rejected and where

Tech Stack

n8nOllamaJavaScriptDiscord APIDocker

Automation

Platform
n8n
Workflows
1
Nodes
34
Triggers
Schedule, Sub-workflow
Collection
Sweeps three marketplace APIs with rotating page cursors and normalizes every payload
Gating
Applies the thesis filter, two dedup stages, and the deterministic pre-score floor
Scoring and Routing
Scores survivors with a bounded model contribution and routes each to its category

Tags

AutomationLocal LLMData AggregationDeduplicationDeal SourcingREST APIs

Status

Live