Skip to Content
Email MarketingTroubleshooting

Email Troubleshooting

Hit something unexpected? Find your symptom below.

”Email Marketing requires an active plan”

Shown when you visit /email, /email/templates, /email/campaigns, or /settings/email-domain.

Cause: your plan doesn’t have the Email Marketing feature flag enabled.

Fix:

  • If you’re on a trial, the feature is free during the trial window. Confirm trial isn’t expired in Settings → Manage Subscriptions 
  • If you’re on a paid plan, ask the platform admin to enable Email Marketing on your plan via Admin → Plans → [your plan] → Bundled Features → Email Marketing
  • Refresh after enabling

”from_email domain is not verified”

Shown when you try to send a campaign or call the public API.

Cause: the from_email you specified is on a domain you haven’t completed DNS verification for.

Fix:

  1. Go to Settings → Email Domain 
  2. Find the domain in question
  3. If status is Pending, click Verify now. Per-record errors (SPF / DKIM / DMARC) tell you which DNS record is missing
  4. If the domain isn’t there at all, click Add domain and publish the 3 DNS records — see Sender Domain →

“domain not verified” on send (sprint 1+)

Same root cause as above, surfaced from the email-sender worker. Check the campaign detail page or outbox row’s last_error for the exact failure.

DNS records published but verification fails

Cause: DNS propagation lag, wrong hostname, or value mismatch.

Fixes in order of likelihood:

  1. Wait 15 minutes. We auto-recheck pending domains every 15 min via Cloudflare 1.1.1.1 / Google 8.8.8.8 directly (bypassing system caches). Most resolve themselves
  2. Confirm the record exists by querying any external DNS checker (e.g. dnschecker.org ) — paste the exact hostname (e.g., _spf.acme-store.com)
  3. Check “Found” vs “Expected” in the verify result on Email Domain . If Found is blank, the record isn’t published yet. If Found has a value but doesn’t match Expected, you have a typo
  4. Double-suffix issue: some DNS providers (DigitalOcean, etc.) auto-append your zone to the hostname. If you typed _spf.acme-store.com as the hostname, the provider stored it at _spf.acme-store.com.acme-store.com. Fix: re-enter the hostname as just _spf (the provider adds your domain automatically)
  5. Cloudflare proxy: if your DKIM CNAME is showing the orange-cloud (proxied) icon, switch it to grey (DNS-only). Cloudflare flattens proxied CNAMEs to A records, breaking the chain

”daily_free_limit_exceeded”

Cause: you hit 100 emails for the day across all sources (campaigns + public API). The counter resets at 00:00 UTC.

Fix:

  • Wait until midnight UTC for the counter to reset, or
  • Wait for sprint 6 (wallet billing) — beyond the free limit, additional sends will charge ₹0.10 (marketing) / ₹0.05 (transactional) per email from your wallet. Currently still in dev

”insufficient_balance”

Cause (post sprint 6): wallet doesn’t have enough to cover a paid send.

Fix: recharge at Wallet  — minimum top-up varies by plan.

Email landed in spam

Causes in rough order:

  1. Sender domain not yet verified → verify it
  2. Brand new domain or IP → reputation takes 4-8 weeks to build. Send small volumes (50/day → 200/day → 1k/day) for the first 6 weeks
  3. Spam-trigger words in subject or body → “FREE!!!”, “100% guaranteed”, excessive caps, !!!! style punctuation
  4. No unsubscribe → impossible since the Footer block auto-injects, but if you removed Footer from the template, restore it
  5. Image-only email → ratio of images to text matters. Keep at least 60% of body as readable text
  6. Too many links → 1 primary CTA + 2 secondary is fine. 10 links per email looks like phishing
  7. Bounce rate above 5% → your list has invalid addresses, hurting reputation. Suppress hard bounces, remove obvious typos before sending

Use mail-tester.com  to score your template — aim for 9+/10.

”Renderer service unavailable” in template editor

Cause: the email-renderer Node sidecar is unreachable.

Fix: should auto-recover within seconds. If it persists, refresh the page; if still broken, raise a support ticket — this is platform-side, not on you.

High bounce rate on a campaign

Cause: list quality. Common patterns:

  • Imported from a CSV with old contacts — emails go stale. ~10% of B2B emails decay/year
  • Imported from a public source (LinkedIn, etc.) — opt-in is questionable, addresses unreliable
  • Wrong format — typos like gmial.com, missing TLD, etc.

Fix:

  1. Stop the campaign if bounce rate > 5% on the first batch
  2. Use a list-cleaning service (NeverBounce, ZeroBounce, etc.) before the next send
  3. Build segments based on engagement — only send to contacts who interacted in the last 90 days

Variable showing as {{first_name}} literally in the email

Cause: variable substitution didn’t fire. Two reasons:

  1. You changed the template but didn’t save — sends use the last-saved version. Click Save, then send again
  2. Variable name doesn’t match the contact attribute{{first_name}} looks for an attribute literally named first_name. Check the attribute spelling at Settings → Attributes . Common: firstName vs first_name

For the public API, {{var}} looks up var in the variables object you sent. Mismatched key = empty replacement.

Recipients say they didn’t unsubscribe but still got marked

Cause: gmail’s native “Unsubscribe” button (powered by RFC 8058 List-Unsubscribe-Post) is one click — sometimes accidental. Or someone reported as spam, which counts as unsubscribe.

Fix: admin can manually remove from the suppression list at Admin → Email System → Suppression. But only do this with explicit confirmation from the recipient — re-mailing a suppressed address damages your reputation.

Public API: Invalid API key.

Cause:

  • Key revoked or regenerated since last use
  • Wrong header format (Authorization: Basic <key> is correct; Bearer is wrong for our public API)
  • Key copied with leading/trailing whitespace

Fix: regenerate at Settings → Developer . Test with curl:

curl -X POST https://apis.splashifypro.com/api/v1/public/email/send \ -H "Authorization: Basic sk_live_xxxx" \ -H "Content-Type: application/json" \ -d '{"to":"you@example.com","subject":"test","html":"<p>test</p>","from_email":"hello@your-verified-domain.com"}'

Public API: Rate limit exceeded

Cause: per-plan rate limit (e.g., 40 requests/minute on starter plans).

Fix:

  • Reduce send rate
  • Implement exponential backoff in your code on 429 responses
  • Upgrade your plan for a higher limit
  • See Rate Limits 

Status endpoint returns “queued” forever

Cause: the email-sender worker isn’t processing your queue. Either it’s down (rare) or your specific message hit a permanent error early.

Fix:

  1. Wait 30 seconds — most queued messages reach sent within 5 sec
  2. If still queued after 60 sec, check Settings → Track Expenses to see if any deduction happened (suggests it actually sent)
  3. If genuinely stuck, raise a support ticket with the message_id

Still stuck?

  • Try the Public API Live API Tester  for API issues
  • Ask Maya — the in-app AI assistant has the full email-marketing knowledge base loaded. Open Maya from the headset icon
  • Raise a support ticket from Settings → Support  — include the message_id if it’s a delivery issue

See also