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/keyorBREVO_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