Platform ·DarDev Team · 4 min read

20.tn outreach automation: what shipped vs what is next

CRM import for ~969 Tunisian schools is done; bus routes, engagement sync, and Twenty workflows are live. Scale and live cold sends remain gated.

Roadmap milestones for 20.tn outreach showing completed bus routes and pending scale phase

As of June 2026, DarDev's 20.tn school outreach program has a populated CRM, a working platform-bus executor, and active Twenty workflows—but it has not launched live cold mail to hundreds of private schools yet. This article states plainly what shipped, what remains gated, and what comes next so operators and partners are not surprised by the gap between automation code and production volume.

Where we started

The goal is cold outreach to Tunisian private schools sourced from ecoles.com.tn, with tracked mail, CRM status fields, Twenty workflow orchestration, and follow-up automation—all API-first from operator PCs without SSH for daily sends. Product marketing lives at 20.dardev.net; CRM prospects carry targetSolution OPT20TN. Planning began as PoC design; the CRM import phase is now complete.

  • Scrape and staging: ~982 school records processed
  • CRM import: ~969 schools successfully in Twenty with school custom fields
  • Consent default: consentEmail UNKNOWN—cold scale awaits policy lock
  • Ops pipeline ecoles-import marked done in DarDev Ops

What shipped (T-O0 through T-O8)

Documentation and API contracts landed first—the outreach roadmap, implementation guide, and workflow orchestration doc define how Twenty and platform-bus split responsibility. On the executor side, Go handlers now cover the full PoC-to-production path except deliberate scale throttling.

  • T-O1 PoC endpoint: POST /api/20tn/outreach/poc with validate, dry-run, CRM PATCH
  • T-O2 CRM fields: outreachStatus, lastOutreachAt, outreachPhase via setup_20tn_crm_fields.py
  • T-O3 Workflow chain: intro, follow-up, and simulated-open workflows active in CRM (IDs in data/20tn-outreach/workflows.json)
  • T-O4 Listmonk: 20tn HTML templates and product:20tn:marketing list in product manifest
  • T-O5 Send API: sync, bulk send, and send-one routes with test-mode gates—no real school mail until ALLOW_LIVE
  • T-O6 Engagement: POST /api/20tn/outreach/sync-engagement maps Listmonk views/clicks to OPENED, CLICKED, OPT_OUT
  • T-O7 Replies: POST /api/20tn/outreach/sync-replies scans outreach Reply-To inbox for REPLIED
  • T-O8 Ops: 20tn-outreach pipeline in solution manifest plus run_e2e_test.py for operator verification

What is not done yet (T-O9 and policy)

Scale and warm-up (T-O9) remain open. Production batch sending with mail-jobs delayMs, MAIL_SEND_PROFILE warmup caps (~333 messages per day on the shared sender), and Ops Run actions for confirmed bulk send are designed but not the default operating mode. Legal and consent review for cold mail at scale is explicitly outstanding—PoC paths use dry-run and staff test recipients.

Optional hardening also remains: FILTER steps in Twenty UI for SENT and SIMULATED_OPEN branches, webhook-driven engagement instead of polling, and marketing opt-in forms before any Listmonk subscribe without consent change. None of these block internal e2e tests; they block confident public-scale outreach.

Architecture recap

Twenty workflows trigger on Manual, Record updated, or Schedule events, filter OPT20TN private schools with email, and call HTTPS steps on mail.dardev.net. Platform-bus sends tracked mail through Listmonk and Stalwart on send.dardev.net—documented in why-send-dardev-subdomain—then writes CRM fields and timeline Notes. SSH and Fabric are for deploying bus code on dardev-vps, not for triggering daily outreach.

Reverse-path webhooks from bus into Twenty when engagement is detected are planned to reduce polling latency but are not required for the current field-driven workflow branches.

Phases ahead

  1. Phase 2 completion: staff test sends via send-one testTo override, SPF/DKIM verification, then one real school with ALLOW_LIVE
  2. Phase 3 steady state: engagement and reply crons on VPS, follow-up workflows on OPENED, manual or inbox REPLIED confirmation
  3. Phase 4 production batch: throttled sync CRM to Listmonk, Ops Run dry-run counts, warmup profile before raising volume
  4. Phase 5 marketing opt-in: public subscribe when policy allows—never cold-add schools to Listmonk without consent change

Risks we are watching

Cold email without opt-in carries legal and deliverability risk—mitigated today by dry-run defaults and staff inboxes. Twenty HTTP steps time out at five minutes, so bulk brain stays in bus queues, not one giant workflow. LOGIC_FUNCTION_TYPE disabled on our VPS means workflows use HTTP Request steps only. Unicode edge cases on a handful of school imports are documented with UTF-8 re-import guidance.

We will update this roadmap and DarDev News when T-O9 scale ships or when consent policy unlocks live cohorts. Until then, operators should use run_e2e_test.py, the test cohort JSON, and CRM See Runs—not undeclared bulk send.

For the full executor catalog and curl examples, read the implementation guide and inside-unified-mailer-stack overview on news.dardev.net. Questions about 20.tn outreach land in Twenty like any DarDev Services lead.

Get company news

Releases and announcements — confirm from your inbox.

Subscribe to updates