Foldnine See how it works

Foldnine · autonomous sales pipeline

Your sales team,
running itself.

AI agents that discover, research, qualify and engage your next customers — reading the public record at a scale a person cannot, and stopping at a draft a person signs off.

The premise

The useful signal
is already public.

A company that posted a Senior DevOps Engineer role sixty days ago and wrote about a Kubernetes migration last month has told you what it needs, when it needs it, and in its own words.

Systems rarely act on that, because reading it at scale is tedious rather than hard. That is the whole job Foldnine does. Everything else — the schema, the workflows, the approval queue — exists to make that judgement repeatable and to stop it turning into spam.

The pipeline

From signal
to conversation.

Six stages, each a scheduled job with its own contract and its own row in the database. Every stage is named for the workflow that runs it.

  1. 01

    Discover

    Specified

    Candidate companies enter the pipeline and are deduplicated on domain. Until this job exists, companies are inserted by hand — the rest of the pipeline does not care where a row came from.

    Workflow
    WF-01
    Writes
    companies.status = new
    Trigger
    Daily
  2. 02

    Research

    Live

    Six conventional paths on the company's own site, then the public JSON of seven hiring boards. robots.txt is honoured longest-match. A cheap local model triages; only survivors reach the research model, which separates facts from inference and never invents.

    Workflow
    WF-02
    Agent
    triage → research
    Measured
    171 s · 0 cost
  3. 03

    Score

    Live

    One hundred points across six components. The model proposes and the workflow enforces: three components are capped in code and the decision-maker score is replaced outright from the contact table. Absent evidence scores zero.

    Workflow
    WF-04
    Bands
    IGNORE → HOT
    Measured
    15 s
  4. 04

    Enrich

    Live

    People come from the company's own pages and from public commit metadata on its GitHub organisation. Every row carries a source_url and a discovery_method, so "where did you get my details" always has an answer. Blind guessing is deliberately not implemented.

    Workflow
    WF-03
    Provenance
    published_page · pattern_inferred
    Measured
    30 s
  5. 05

    Outreach

    Live

    One hundred and twenty words at most, one concrete observation, one small ask. The greeting and signature are assembled in code, never written by the model. A draft that breaks a rule is stored with the reason, not quietly corrected.

    Workflow
    WF-05
    Stops at
    pending_approval
    Measured
    15 s · 73 words
  6. Human approval

    Gate

    Approval is a state in the database, not a setting in a config file. No row reaches approved without a person, and a suppressed address is rejected by a trigger before any workflow gets a say.

    Enforced by
    Postgres constraint
    Default
    OUTREACH_PAUSED = true
    Autosend
    disabled
  7. 06

    Conversation

    Specified

    Inbound mail is matched to its thread and classified into one of eight outcomes; questions and pricing route to a reply, anything that commits to a date or a contract routes to a person. The contract and the schema exist; the jobs that run them do not yet.

    Workflow
    WF-08 · WF-09
    Classes
    POSITIVE · QUESTION · PRICE · NOT_NOW
    Escalates
    on commitment

One company, end to end

Watch it think.

A worked example, with invented inputs. Nothing here is a Foldnine customer and no number on this page is a production statistic.

01 · Company

Acme Robotics

  • Domainacme-robotics.example
  • Sourcemanual
  • Statusnew → researching

02 · Signals found

  • Hiring four engineers, two infrastructure
  • Kubernetes migration written up on the blog
  • Expanding into a second region
  • New VP of Engineering announced

Each stored as a signals row with the URL it came from.

03 · Score

92/100

HOT

  • Company fit18/20
  • Technology fit19/20
  • Hiring signal17/20
  • Pain evidence19/20
  • Decision maker7/10
  • Commercial9/10

04 · Contact

Sarah Mitchell

  • RoleVP Sales
  • Methodpublished_page
  • Statusvalid

Verified verbatim against the fetched page before it was written.

05 · Draft

pending_approval

Sarah — Acme's engineering blog describes moving to Kubernetes in March, and there are four engineering roles open now, two of them infrastructure.

That combination usually means the platform work lands on whoever has capacity that week, and nobody owns it.

I do two-week infrastructure audits that end in a written report. Worth a look, or is someone already on it?

  • 73 / 120 words
  • Hook cites a fetched URL
  • No banned phrase
  • One question
  • No calendar link

Held here. The job that would send it is specified, not built.

Architecture

Six agents.
No agent framework.

An agent here is a prompt, an input/output contract, and a place in the pipeline. There is no agent runtime: a scheduler calls a model, the response is validated against a JSON schema, and the result is written to Postgres. The hard problem was scheduling and state, and that was already solved.

Runtime

  • Orchestrationn8n
  • System of recordPostgreSQL 16
  • Queue & limitsRedis 7
  • ModelsOllama, on the host
  • TLSCaddy 2

Models

  • Triagellama3.1:8b
  • Researchqwen3.5:9b · 64k ctx
  • Scoringqwen3.5:9b · 64k ctx
  • Enrichmentllama3.1:8b
  • API costnone — all local

Enforced in the database

  • Suppressioninsert trigger
  • Total scoregenerated column
  • Score bandgenerated column
  • Deduplicationunique index
  • QueuePostgres, not a broker

Live activity

A replay of one pass through the built stages. Timestamps and volumes are illustrative.

Every step leaves a row behind.

Not another
lead database.

A list tells you a company exists. None of the rest of it is on the list.

  • 01Company signals
  • 02Sourced research
  • 03People, with provenance
  • 04Context and timing
  • 05A score that can be argued with
  • 06A message about one of them

Everything above collapses into one row a person can approve in five seconds — or reject, with the reason kept.

Traditional workflow compared with Foldnine

The usual loop

  1. Search
  2. Copy
  3. Paste
  4. Research
  5. Spreadsheet
  6. Write
  7. Follow up
  8. Repeat

Eight steps, one person, every company.

Foldnine

  1. Discover
  2. Research
  3. Qualify
  4. Engage
  5. Conversation

Five stages, scheduled, one human gate.

Controls

A prompt is a request.
A check is a control.

  1. The model proposes, the workflow enforces

    Scores the model returns are capped in code, and the decision-maker component is replaced from the database rather than trusted. A model talked into something can produce a bad row; it cannot execute anything.

  2. Fetched pages are data, never instructions

    Nothing an agent returns is used to build SQL, a shell command, or a URL to fetch. Every response is validated against a schema before a row is written.

  3. Suppression is permanent, and enforced below the code

    A database trigger rejects any message to a suppressed address outright. There is no removal path in the workflows, by design.

  4. Provenance on every person

    An address is stored only when the company published it, or when it follows a pattern that company itself published — marked as the inference it is. Blind guessing produces more addresses and no evidence, so it is not implemented.

Build state

What is running,
and what is not.

Nine of fourteen workflows are built. The five that are not are the five that touch a mailbox. This page would be easier to write without this section; it would also be worth less.

Workflow build state
IDWorkflowState
WF-02Company Research Built
WF-03Contact Enrichment Built
WF-04Lead Scoring Built
WF-05Outreach Generation Built
WF-10Telegram Dispatch Built
WF-99Error Handler Built
WF-100Daily Report Built
WF-101Agent Health Built
WF-01Lead DiscoverySpecified
WF-06Outreach DispatcherSpecified
WF-07Follow-up EngineSpecified
WF-08Inbox ClassifierSpecified
WF-09Conversation AgentSpecified

Stop building lead lists.
Start building pipeline.

Written in English or Serbian. A description of what is slow or breaking is enough to start.