groundmail

Features

Automations for transactional sequences

Send one event from your app and let Groundmail run the follow-ups: welcome mail, trial reminders, dunning notices. No cron jobs, no queue to babysit.

Steps

A small set of steps that cover most flows

Build in the dashboard canvas or create automations over the API. Every run starts from an event.

Send email

Inline subject and HTML, or a published template with variables. Sends take the same path as POST /emails, so suppressions and domain rules apply.

Delay

Wait a set number of seconds before the next step.

Condition

Check the event data and stop the run when the check is false.

Wait for event

Pause until another event arrives for the same user, with an optional timeout that continues or fails the run.

Cancel on events

List events that end active runs for that recipient. A user who upgrades stops getting trial reminders.

Event placeholders

Use {{event.email}}, {{event.user_id}} and {{event.data.*}} anywhere in a step.

Example

Define the flow once, trigger it from anywhere

Create the automation as a draft, activate it, then send events from your app with any SDK or plain HTTP.

POST /automations

{
  "name": "Trial ending",
  "trigger": {
    "type": "event",
    "event": "trial.started",
    "cancel_on_events": ["subscription.created"]
  },
  "steps": [
    { "type": "delay", "seconds": 950400 },
    {
      "type": "send_email",
      "email": {
        "from": "billing@yourdomain.com",
        "to": "{{event.email}}",
        "template": {
          "id": "trial-ending",
          "variables": { "name": "{{event.data.name}}" }
        }
      }
    }
  ]
}

POST /events

curl -X POST https://api.groundmail.dev/events \
  -H "Authorization: Bearer gm_…" \
  -H "Idempotency-Key: evt_trial_started_123" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "trial.started",
    "user_id": "user_123",
    "email": "user@example.com",
    "data": { "name": "Ada" }
  }'

Operate

See every run

When a flow misbehaves in production, you can see where and why.

  • Run history with per-step status in the dashboard and over the API
  • Cancel or retry a run with one call
  • Pause an automation without deleting it
  • Webhooks for automation.started, step_completed, completed and failed
  • The event response tells you how many automations matched

FAQ

Common questions

Is this a marketing automation tool?

No. Automations are for transactional sequences tied to something a user did: onboarding steps, trial and billing notices, verification follow-ups. Groundmail does not send marketing or cold email.

How do conditions work?

A condition step checks the event data. If it is true the run continues; if it is false the run stops there. It is a gate, not an if/else branch.

What happens if my app sends the same event twice?

Send an Idempotency-Key header with the event. A retry with the same key and body returns the original response instead of starting a second run.

Can I test a flow before turning it on?

Yes. From the dashboard you can dry-run a draft automation with a test event. Delays and waits are skipped and sends are stubbed.

Put your transactional email on solid ground.

Start free on our transactional pool. Move to dedicated IPs or a dedicated server when you need the isolation. Same API either way.