252 Singapore DTC prospects, one evidence-gated pipeline: 146 near-term A+/A targets flow through nine stages before a single email sends

Asked (summary)

Acting as a principal outbound GTM engineer and RevOps specialist: design an automated, hyper-personalized outbound pipeline for a11studio.pro over a 252-prospect list — Keenable MCP enrichment architecture, a 1–100 ICP model with three buyer personas, technical trigger mapping, sub-75-word emails with guarded dynamic variables and fallbacks, and a deliverability/execution plan for Smartlead, Instantly, or Clay — as a structured, execution-ready master guide.

This blueprint is built from 31 evidence rows across 13 independent hosts: the supplied 252-prospect Singapore report (28 Tier A+, 118 A, 57 B, 49 C; 147 with public contacts; 102 secondary discoveries needing recheck), a11 Studio's live offer page, official Smartlead and Instantly API docs, Google sender requirements, Singapore IMDA/PDPC guidance, and W3C/Chrome/web.dev audit standards. The 252 per-prospect records were described by the source report but were not available as structured rows here — this is the execution architecture; persona and score columns are produced after enrichment, not pre-assigned.

The pipeline, end to end

Nine stages left to right. Blue = evidence work inside Keenable; orange = hard gates that can suppress a prospect; dark = external execution (scanners, verification, sequencer). Hover a stage for detail.

What a11 actually sells — and why the fit model must be redesigned

a11 Studio's current offer (a11studio.pro) is 16 static ads per month, four per week, copy included, unlimited revisions, delivered through WhatsApp — plus a free redesign of one stale ad and a 72-hour CTR refund test. No video, no ad management, no engineering remediation. The source report's creative-service fit model and the user's examples (engineering hires, design stacks, WCAG, UI performance) therefore shift to supporting conversion context. The principal commercial signals become: observable paid-social creative need, promotion/launch cadence, visual-product suitability, repeat-purchase economics, contactability, and evidence quality.

The 100-point model: evidence in, score out

Weights of the eight components; a component scores above zero only when a sourced, dated evidence quote exists. Engineering hires and accessibility gaps live inside the friction/capacity components, never as primary weight.

Hard gates before scoring
  • Live Singapore-serving DTC shop
  • Physical visual product
  • Business contact or named decision maker
  • No exclusion category
  • Valid evidence (URL + quote + observed_at)
Bands
  • 80–100 · P1 — human-reviewed, immediate
  • 65–79 · P2 — trigger-led
  • 50–64 · P3 — nurture / monitor
  • <50 — suppress
Penalties / suppression
  • Inactive or dead site; no e-commerce
  • Secondary-only, unverified source
  • Invalid email; catch-all in P1
  • Opt-out / DNC / suppression list
  • High-risk medical claims

Three persona routes

Route 1 · Founder / CEO

Founder-led and small brands

Cares about speed, risk, and cash efficiency. Default route when no growth or marketing title exists.

  • Hook: milestone or launch → weekly angles without one-creative dependence
  • Proof: free stale-ad redesign + 72-hour CTR refund
Route 2 · Growth / E-commerce / Product lead

Testing-velocity buyers

Cares about weekly creative testing, promotions, CTR and conversion.

  • Hook: active promotion with too few angle/format variants; creative fatigue
  • Proof: four mapped angles (hook, anatomy, comparison, offer), no ad-account access needed
Route 3 · Marketing / Creative — or Engineering/Product only where actually present

Production and consistency buyers

Cares about production bottlenecks, asset consistency, landing-page/creative handoff and measurable experiments. Never force a Head of Engineering onto a small DTC brand; each account keeps a primary persona and a fallback role.

  • Hook: measured friction (LCP/INP/CLS, contrast, layout shift) framed as creative/landing continuity
Route 3 is used only when both the title and a measured hook exist; otherwise the account falls back to Growth, then Founder. Observations from automated scans open conversation — cautious wording only (“automated scan found”, “appears”, “I noticed”), never “non-compliant”; WCAG automation cannot establish conformance (w3.org) and a11 does not provide engineering remediation.

Keenable MCP enrichment patterns

Keenable SELECT is read-only DuckDB over WEB_SEARCH/WEB_FETCH and saved result sets — the evidence and extraction layer. Lighthouse/PageSpeed, axe-core, email verification and sequencer writes all run outside it, then merge in the warehouse or Clay.

-- Stage 2–3: identity + commercial signals, ≥6 diverse queries per WEB_SEARCH, batched by company
SELECT url, title, snippet FROM WEB_SEARCH(queries => [
  '"{company}" site:{domain}', '{company} Singapore promotion sale',
  '{company} new launch product', '{company} subscription bundle',
  '{company} careers hiring marketing', '{company} founder OR "head of growth" linkedin']);

-- Stage 3b: fetch official pages, extract one company-level object
SELECT SEM_EXTRACT(content, 'offer, promotions, subscription_or_bundle,
  decision_maker_name, title, public_business_email, public_whatsapp,
  recent_company_milestone — null when absent') AS company_obj
FROM WEB_FETCH(urls => [home, product, promo, careers, accessibility]);

-- Repeated facts: launches, jobs, products
SELECT SEM_EXTRACT_ALL(content, 'each product launch: name, date, url') FROM WEB_FETCH(...);
-- Relevance gate  WHERE SEM_MATCH(snippet, 'DTC physical visual product sold online in Singapore')
-- Canonical dedupe: SEM_NORM only inside GROUP BY; final GROUP BY yields one row per company
GROUP BY SEM_NORM(company_name)
-- Stage 7: one gated company row out
SELECT prospect_id, company_name, canonical_domain, icp_score, score_band, persona,
       specific_pain_hook, evidence_url_1, evidence_quote_1, confidence_1, ready_to_send
FROM merged WHERE evidence_url_1 IS NOT NULL AND observed_at >= freshness_floor
  AND suppress_reason IS NULL;
Stages 1–3 · Keenable

Ingest the 252-row table; verify identity on official domains; batched search for offers, launches, subscriptions, bundles, promotions, careers, decision makers.

Stage 4 · External scanners

BuiltWith/Wappalyzer-like detection, PageSpeed Insights/Lighthouse, axe-core; push scanner JSON into the warehouse/Clay (developers.google.com, web.dev).

Stages 5–7 · Merge & export

Keenable contextualizes scanner output against official/news/careers sources; cross-source merge with freshness/evidence gates; export CSV/JSON or webhook into Clay → sequencer.

Payload schema — every claim carries URL, quote, date, confidence

{ "prospect_id":"sg-0001", "company_name":null, "canonical_domain":null, "website_url":null,
  "source_tier":"A", "original_score":null, "niche":null, "country":"SG", "source_url":null,
  "verification_status":null, "observed_at":null,
  "ecommerce_platform":null, "cms":null, "analytics_tags":null, "ad_pixels":null,
  "page_builder":null, "checkout_provider":null, "design_system_evidence":null,
  "lighthouse_mobile_performance":null, "LCP_ms":null, "INP_ms":null, "CLS":null,
  "wcag_automated_fail_count":null, "wcag_issue_types":null, "tech_stack_gap":null,
  "recent_launch":null, "recent_promotion":null, "subscription_or_bundle":null,
  "product_count":null, "recent_hiring_signal":null, "funding_or_revenue_signal":null,
  "meta_ad_activity":null, "active_ad_count":null, "latest_ad_date":null,
  "decision_maker_name":null, "title":null, "persona":null, "linkedin_url":null,
  "public_business_email":null, "public_business_phone":null, "public_whatsapp":null,
  "email_validation_status":null, "recent_company_milestone":null, "specific_pain_hook":null,
  "evidence_url_1":null, "evidence_quote_1":null, "confidence_1":null,
  "score_components":{}, "icp_score":null, "score_band":null,
  "suppress_reason":null, "ready_to_send":false }

Null is required when absent. Never inferred: employee count, revenue, ad spend, compliance status, personal email. active_ad_count only when directly observed.

Dynamic-variable contract

Variable
Max
Source priority
Validation → fallback
first_name
—
Named decision maker (official page / LinkedIn)
Real first name only → omit greeting name
company_name
—
Canonical domain record
Brand casing → suppress if uncertain
persona
—
Observed title / company structure
Route 3→2→1 fallback ladder
recent_company_milestone
18 words
Official site → news → careers
≤180 days (labeled if older) → fallback 1
observed_campaign_or_product
—
Promo page → ad library observation
Promotion evidence ≤90 days → fallback 1
tech_stack_gap
—
External scanner JSON only
Measured value required → route 2 template
specific_pain_hook
22 words
Scanner + Keenable evidence quote
URL + verbatim quote must survive → fallback 2
evidence_url / source_date
—
Row-level evidence fields
Missing either → do not send
offer_angle / proof_or_risk_reversal
—
a11 offer page (static)
Free redesign + 72-hour CTR refund
Guardrails: no sentence-ending punctuation inside variables; strip HTML/newlines/quotes; never begin with pronoun fragments; reject unsupported superlatives, revenue/ad-spend estimates, health claims, “WCAG compliant/non-compliant”, competitor comparisons; no raw null/NA; render then lint for repeated words, braces, doubled punctuation, broken grammar, and total under 75 words; human QA all P1 and the first 20 per persona. Fallback 1: category/product observation from the official site. Fallback 2: relevant visual-category statement + the free-redesign offer. Company/category uncertain → suppress, never send.

Three templates, under 75 words rendered

Base lengths 58, 55 and 56 words; variable budgets (milestone ≤18 words, hook ≤22) keep rendered totals under 75. Lint after render; route 3 falls back to route 2, then 1.

Execution: Clay orchestrates, one sequencer sends

Clay is the orchestration/QA table. Pick one sequencer — Smartlead or Instantly — not both initially. Sync only ready_to_send=true rows; prospect_id is the idempotency key; one campaign per persona × priority; upload as drafts; seed-test; activate only after QA; webhook replies/bounces/unsubscribes back to the master suppression table. Append-only audit fields; never overwrite source evidence. Confirm current account-specific docs and rate limits before production.

Smartlead (api_key as query parameter)
POST /campaigns/create?api_key=KEY               -- create campaign
POST /campaigns/{id}/sequences?api_key=KEY       -- save sequences: [{seq_number, email_body, delay:{days}}]
   body supports double-curly custom fields: {{first_name}}, {{specific_pain_hook}} ...
GET  /campaigns/{id}/leads?api_key=KEY           -- leads return custom-fields object, max 100/page

Instantly API v2 (Bearer / API key)
POST  /api/v2/leads                               -- create lead
PATCH /api/v2/leads/{id}                          -- update custom variables payload
POST  /api/v2/campaigns · PATCH /api/v2/campaigns/{id} · POST /api/v2/campaigns/{id}/activate
POST  /api/v2/campaigns/{id}/variables            -- campaign variables

Deliverability and Singapore compliance

Infrastructure
  • Separate, brand-adjacent sending domains
  • SPF, DKIM, DMARC p=none → monitor → tighten
  • Custom tracking domain, or disable open/click tracking initially
  • TLS, valid forward and reverse DNS
  • Verify every mailbox and address; never catch-all/unverified in P1
Ramp & cadence
  • Warm operationally; ramp on positive delivery data, no fixed warmup formula
  • Start ~10–15/day/mailbox → cautiously 25–35 only if bounce <2%, complaints <0.1%, stable replies, no provider warnings
  • Randomized weekday Singapore business-hour windows
  • 2–3 plain-text touches over 10–14 business days; one short spintax block at most — never spintax facts or evidence
  • Stop on reply, bounce, opt-out or complaint
Rules of the road
  • Google: bulk senders need SPF/DKIM/DMARC, one-click unsubscribe for promotional bulk, complaints ideally <0.1%, never ≥0.3%
  • Singapore IMDA/PDPC: <ADV> identification for unsolicited bulk commercial messages, contact/opt-out facility, removal within 10 business days; DNC for calls/text/fax
  • Public WhatsApp is not blanket permission: one-to-one, identify sender, explain relevance, honor opt-out
  • Advise local counsel review; no legal conclusions beyond cited official guidance

Measurement loop

Track delivery, bounce, complaint, unsubscribe, positive reply, meeting, opportunity and client — sliced by persona, score band, hook and source confidence. Hold out 10–15% per high-volume segment, or A/B exactly one element at a time; never claim significance on tiny samples. Feed reply labels and outcomes into the weights monthly with versioned scoring_model_version and message_version.

Two-week sprint and launch checklist

Week 1 — build
  • D1–2: ingest 252 rows; identity/website validation; exclusion pass
  • D3–4: Keenable batched search/fetch + semantic extraction on validated domains
  • D4–5: external scanners (PSI/Lighthouse, axe-core, stack detection); merge JSON into Clay
  • D5: scoring v1, persona routing, evidence gates; human QA of all P1
Week 2 — launch
  • D6–7: email verification, suppression build, DNS (SPF/DKIM/DMARC), tracking domain
  • D8: campaigns per persona × priority uploaded as drafts; seed tests
  • D9: QA first 20 per persona; lint all rendered copy <75 words
  • D10: activate P1 at 10–15/day/mailbox; webhooks live; daily bounce/complaint watch
Go/no-go checklist: DNS authenticated and verified · suppression and DNC lists loaded · every queued row has evidence URL + quote + date · no catch-all in P1 · unsubscribe facility live · webhooks writing back · scoring_model_version and message_version stamped.
The source report deduplicated to 252 prospects — 28 Tier A+, 118 A, 57 B, 49 C — with public contacts on 147 and 102 secondary discoveries needing recheck; its fit model is creative-service oriented and is redesigned here around a11's static-ads offer. select.keenable.ai
a11's live offer — 16 static ads monthly with copy, WhatsApp delivery, a free stale-ad redesign and a 72-hour CTR refund — is the proof and risk-reversal in every template. a11studio.pro
Smartlead saves sequences per campaign with double-curly custom fields and api_key query auth; Instantly v2 uses Bearer auth with POST/PATCH lead and campaign activate endpoints — pick one, confirm current docs and rate limits first. api.smartlead.ai · developer.instantly.ai
Google's bulk-sender rules (SPF/DKIM/DMARC, one-click unsubscribe, spam rate below 0.3%) and Singapore's <ADV>/opt-out/DNC regime set the hard ceiling on volume and wording. support.google.com · imda.gov.sg

Evidence base — all 31 source rows

SectionDocumentSource

Several rows are duplicate official URL variants of the same document; treat those as corroborating documentation, not separate independent sources. No URL backs more than half the rows.

Method: 31 shaped evidence rows across 13 independent hosts, gathered via Keenable SELECT web search and fetch over the supplied prospect-universe report, a11studio.pro, Smartlead and Instantly API documentation, Google sender guidance, Singapore IMDA/PDPC publications and W3C/Chrome/web.dev audit standards. Counts (252/28/118/57/49/147/102) are taken from the source report's own aggregates. Per-prospect records were not available as structured input; scores and personas are produced after enrichment. Some duplicate URL variants were kept as corroboration. Long findings truncated for space.

This report was generated automatically by Keenable SELECT at a user's request, from publicly available web sources linked herein. Keenable does not review, verify, or endorse its contents and makes no representation as to accuracy, completeness, or timeliness; AI-based extraction may contain errors. Nothing in this report is investment, legal, financial, or other professional advice. All trademarks and referenced content remain the property of their respective owners; no affiliation or endorsement is implied. To report an error, rights concern, or request removal: legal@keenable.ai.

Keenable SELECTAsk your own question
Made with Keenable SELECT