Comparison

Sendly vs SendGrid

SendGrid is the incumbent email service. Sendly is a smaller surface with the same jobs — and it speaks SendGrid's v3 mail/send, so the SDK you run stays where it is.

Last updated 2026-09-04

The short version

SendGrid has been the default answer to “how do I send email from my app” for well over a decade, and a great deal of production code points at it. If it is working for you, there is no urgency here.

The reasons people look are usually one of three. The bill is hard to predict because plans are shaped around contact counts and tiers rather than sends. Transactional and marketing live in what feel like two products. Or the account has accumulated more surface area than the team ever uses, and every question takes three screens to answer.

Sendly is deliberately a smaller product: transactional sends, campaigns, workflows, contacts, segments, inbound mail, and one metered price per email. Everything the dashboard does is in a published REST contract, and both official SDKs are generated from it.

Your @sendgrid/mail code does not change

Sendly speaks SendGrid's transactional-send dialect on a dedicated endpoint at /api/compat/sendgrid. Keep the SendGrid SDK you already run, point it at Sendly, and swap the key. There is no rewrite and no second client library.

The endpoint is a translator, not a side door. It parses the vendor request shape, maps it onto Sendly's native send, and runs it through the same pipeline your native API calls use — so verified-domain checks, sending limits, suppression and billing all still apply.

Where a dialect can express something Sendly does not support in this phase, the endpoint returns a clean error in that vendor's own error shape rather than dropping the field silently. Your existing error handling fires exactly as it would have.

Sendly implements SendGrid's POST /v3/mail/send, including the personalizations array, the content array, attachments with content IDs, and headers. A successful send answers 202 with an empty body and an X-Message-Id header, which is the exact semantic the SDK expects.

Node — set the base URL after setApiKey, which resets it
import sgMail from "@sendgrid/mail";
import sgClient from "@sendgrid/client";

sgClient.setApiKey(process.env.SENDLY_API_KEY);
sgClient.setDefaultRequest("baseUrl", "https://api.sendly.now/api/compat/sendgrid");
sgMail.setClient(sgClient);

// unchanged from here down
await sgMail.send({
  to: "customer@example.com",
  from: "you@yourdomain.com",
  subject: "Your receipt",
  html: "<p>Thanks for your order.</p>",
});

Two things return a clean SendGrid-shaped 400 rather than being silently accepted: dynamic template ids (the d-… ones), because a SendGrid template id cannot be mapped to a Sendly template, and send_at, because scheduled sends are not supported through the compat path in this phase. Both are the kind of thing you want to find in a test run, not in a delivery report.

What Sendly does

Sendly is one workspace for transactional email, marketing campaigns and automation, against one contact database. Everything below is in the product today, not on a roadmap.

AreaWhat you get
Transactional sendREST API with idempotent sends, batch send, scheduling and cancellation, template variables, attachments, and a delivery record you can read back.
CampaignsOne-off broadcasts to a list or a segment, with scheduling, pause and resume, and per-campaign stats.
WorkflowsA visual builder for automated sequences, with branching on contact data and on tracked events. Runs server-side, with an execution log per contact.
Contacts and segmentsCustom fields, CSV import, and dynamic segments that re-evaluate from contact data and behaviour. Built for millions of rows, with cursor pagination throughout.
DeliverabilityDomain verification with guided DNS setup that publishes the records for you and then watches them for drift. SPF, DKIM and DMARC alignment, suppression list, bounce and complaint handling.
InboundReal mailboxes on your own domain, reachable over IMAP and SMTP, with the messages also projected into the API.
Events and webhooksAn event stream you can query and subscribe to, signed webhook deliveries with retries, and tracked custom events that can trigger a workflow.
AI agentsA remote MCP server, so an agent can work in your account under permissions you tick yourself. Irreversible ones are never granted by default.
SDKsOfficial open-source clients for JavaScript and Python, both at 1.0.0, generated from the published OpenAPI contract.
Self-hostingDocumented Docker deployment, if you would rather run it yourself.

What Sendly costs

There is no monthly platform fee and there is no plan to outgrow. A free tier, metered usage that gets cheaper as volume rises, and a conversation for anything past that.

PlanPriceWhat it is
Free$0 / month · foreverEverything you need to get started. No credit card required. 5,000 emails / month · Transactional, campaigns & workflows · Full REST API, SDKs & webhooks · Powered-by-Sendly badge on sent email
Pay as you go$1.00 / 1,000 emailsVolume pricing that drops as you send more. No monthly fee and no plan to outgrow. $1.00 per 1,000 emails up to 50,000 · $0.70 per 1,000 above 50,000 · $0.50 per 1,000 above 250,000 · Badge removed from your email · Set your own limit per category · Billed in USD, EUR or GBP
CustomLet's talk tailored to your volumeHigh-volume or regulated sending that needs limits set by a human. Everything in Pay as you go · Custom sending limits · Higher daily throughput · Direct support from the team

The free tier is a real tier, not a trial: it does not expire, and nothing about it is time-limited. Its allowance is shared across transactional sends, campaigns, workflows and inbound mail, because Sendly meters emails rather than products.

What to check on SendGrid's side

We do not publish SendGrid's prices or limits here. They change without telling us, and a stale number on this page would be the one thing on it you could catch us being wrong about. These are the questions worth answering from their own documentation before you move anything.

  • What does the bill look like at your actual monthly volume, and at ten times it? Flat plans and metered curves cross over somewhere; find where.
  • Are transactional sends and marketing sends billed and rate-limited from the same allowance, or two?
  • Is there a contact-count charge on top of the send charge, and does an unsubscribed contact still count?
  • What happens on the day you exceed the plan — a hard stop, an overage rate, or an upgrade prompt?
  • Can you export your contacts, templates and suppression list in full, without asking support?
  • Is there an API for everything the dashboard can do, and is the contract published?

Questions people ask

Will my dynamic templates come across?
No, and the compat endpoint says so rather than guessing. A SendGrid dynamic template id refers to content stored in SendGrid, which Sendly has no way to resolve, so a request carrying template_id gets a 400 in SendGrid's own error shape. Rebuild the template in Sendly and send it by Sendly template id, or move the markup into the request body.
Do I lose per-message categories?
They map onto Sendly tags, sanitized, so you keep the ability to slice delivery data by category. It is a partial mapping rather than an identity: treat the tag values you get back as the source of truth once you have moved.
Can I run SendGrid and Sendly side by side while I move?
Yes. The compat endpoint is an ordinary API endpoint, so a single service, environment or message type can point at Sendly while everything else stays where it is. Nothing about the split is special-cased, and there is no cutover event.
Is marketing email billed separately from transactional?
No. Sendly meters emails, not products. Transactional sends, campaign sends, workflow sends and inbound mail all draw on the same free allowance and, past it, the same per-thousand curve.
Does Sendly have an IP warm-up story?
Sendly sends through AWS SES on shared, actively monitored infrastructure, and applies its own sending limits per project on top. If you need a dedicated IP with a warm-up schedule you control, that is a conversation rather than a self-serve setting today — say so before you migrate high volume.

Something on this page out of date, or missing the case you are in? Write to support@sendly.now — we answer our own email. The full technical detail lives in the documentation.