Loop B2B-L2 · Marketing — B2B pipeline · reports to B2B owner (TBD)

Precise audiences from lists we already own.

Builds matched advertising audiences from our own CRM — GCC hotel chains for Hospitality account-based campaigns, big-box buyer roles for OEM — and uploads them to LinkedIn, every batch human-reviewed first.

Design on the shelfOn decision · last🕐 Per batch⚙️ Design on the shelf — goes last
Part 1 — the plain-english view

The most powerful B2B targeting is our own customer knowledge — handled with the most care.

What it watches
  • Nothing continuously — it runs per campaign request: build audience → review → upload
  • List quality upstream: it refuses to build from a dirty CRM (which is why it goes last)
When & how it speaks

Per batch: the full list contents to the B2B owner for review, then — on approval — the upload confirmation with match rates.

Why it exists

This is both an edit and a data export, which is why it's deliberately last in the sequence: every upload approved batch-by-batch after the list is reviewed; business contacts only, never consumer data; and a UAE data-privacy (PDPL) posture check with Rajiv before the very first upload — flagged, not assumed.

100%
of uploads human-reviewed, list contents first — no exceptions
0
consumer records ever — business contacts only, by rule
Last
in the B2B sequence, by design: highest care, most preconditions
📝

Campaign request

The B2B owner defines the audience

🧮

Builds the list

From CRM segments — business contacts only

👀

Human review

Full list contents, before anything leaves

Approve upload

Per batch

📤

Matched audience

Uploaded; match rates reported

What it will never doNever uploads a list that hasn't been human-reviewed, and never touches consumer/customer personal data.
Where it stands today · July 2026Design on the shelf, last in the activation queue. Hard preconditions: CRM-1's cleanup (audiences from a dirty CRM aim at the wrong people), B2B-L1 proving itself, and the PDPL consent-posture check with Rajiv.
Part 2 — under the hood

How it's wired: systems, models, and the path a number takes.

For implementers and the technically curious. The full build sheet — verified queries, thresholds, and build notes — lives on the specs page.

ReadsOdoo CRM (read-only)
Business-contact segments
StepAudience build
Dedup, normalise, business-domain filter
Human gateList review
The B2B owner reads the actual list
Human gatePDPL check (first run)
Rajiv/legal confirm posture before upload #1
StepPlatform upload
Matched audience to LinkedIn/Meta
DeliversMatch report
Rates + audience sizes back to the owner
System we read Automated step State / memory Human decision
SystemRole in this loop
Odoo 19 CRMread-only connectionThe live CRM. The loop reads deals, activities and teams through a read-only connection — writes are technically impossible on this credential.
LinkedIn / Metamatched audiencesThe upload targets — hashed-list matching on the platforms' standard mechanisms.
Agent Vaultcredential storeWhere API keys live. Loops get read-only credentials from the vault; nothing is hardcoded in scripts.
Hermesagent runtime on our serverThe scheduler that wakes the loop up. Each loop is a cron job under a Hermes profile; the planned bizops profile will host the business digests (IT loops run under vpsops).
Email renderer + gwsrender_email.pyAll digests pass through one shared renderer: Huxberry-branded HTML, tables for repeated rows, a coral 'needs your response' box when the loop has questions, and an arrow link on every record. Sent from the loops mailbox via the Google Workspace CLI.
Model / brainWhat it does here
None at run timedeterministic scriptA normal cycle is a plain Python script — no AI tokens are spent unless a diagnosis or judgment step is actually needed. AI wrote the script; the script does the rounds.
GPT-5.5 via Codexthe bulk-work modelWrote and maintains the mechanical parts — SQL, diffing, digest assembly. Effectively free on our existing subscription, so routine cycles cost almost nothing.
State & memory

Uploaded-audience registry: what was built, from which segment, approved by whom, uploaded when.

Delivery

Per-batch review + confirmation reports.

Safety rails

Batch-gated, human-reviewed, business-contacts-only, PDPL-checked. The most safeguarded loop in the portfolio because it exports data — that's why it earns its place last.

Before it can run for real
  • CRM-1 hygiene sustained (dup rate <5%)
  • B2B-L1 proving itself
  • PDPL consent posture confirmed with Rajiv/legal
Full build sheet →