Skip to content
BlackNode App
Sign in Start workspace

Email outreach

Brevo-backed cold email sender with template variables, suppression list, EU footer (company + IČO + unsubscribe), bounce handling and per-jurisdiction segmentation. Built so you can run cold email without ÚOOÚ trouble.

Quickstart

claude
# > "send the printara-v3 template to the 50 leads in
#    /workspace/leads.json. EU jurisdiction. Stop on first bounce."

Environment variables

BREVO_API_KEY=...                  # required; never inline the key
SENDER_NAME=Ondrej from BlackNode
SENDER_EMAIL=hello@blacknode.tech
COMPANY_NAME=BlackNode s.r.o.
COMPANY_ADDRESS=Slovakia
COMPANY_REGISTRATION=IČO 12345678
Compliance hard rule. Recipients must be one of: existing customer (soft opt-in) OR explicit opt-in. EU/CZ users without consent = ÚOOÚ fines up to 7.7M Kč (real precedent, 2023). The skill enforces a consent_basis field on every lead — missing = the send aborts.

Required lead JSON shape

{
  "email": "shop@example.com",
  "name": "John",
  "consent_basis": "b2b_business_contact",   // or "opt_in" or "existing_customer"
  "jurisdiction": "EU",
  "variables": { "first_name": "John", "shop_name": "Example 3D" }
}

Footer (auto-appended)

--
BlackNode s.r.o. · IČO 12345678 · Slovakia
You're getting this because you publish your shop email on Etsy.
Unsubscribe: https://app.blacknode.tech/unsub?t={hash}
Privacy: https://app.blacknode.tech/privacy

Suppression list

Persisted in /workspace/email-suppressions.json and synced to Brevo. One unsubscribe click → permanent suppression across every workspace template. Bounce handling drops the address after the first hard bounce.

Brevo gotchas

  • to: [{email, name}]name is required and must be non-empty. Brevo silently drops empty-name sends.
  • API key lives in ~/.brevo/key or BREVO_API_KEY. We never ask you to inline it.
  • Rate limit is 400/hour on the free plan, 10 req/sec sustained.
Last updated 2026-05-21 Edit on GitHub soon