Product
Changelog
What we shipped, release by release. New features, raised limits, and the bugs we fixed along the way.
v3.4.0
September 14, 2026Opens and clicks, sorted from privacy fetches and automated activity
Apple Mail loads every email in the background whether or not anyone reads it, and corporate mail scanners click every link before the recipient sees it. GoodPostal now records every open and click request and sorts it: observed, privacy-protected, unverified, or automated. The campaign page, exports, the API, and the connected AI tools all report the same numbers, and only observed activity counts as opened or clicked. Clicks are the more reliable signal.
- The Opened card counts people, with the number of opens they made, the Apple Mail auto-downloads, and the bots beside it
- The Clicked card counts people, with the number of clicks they made and the bots beside it
- A "Show all activity" switch that shows every request instead, labelled as requests, and remembered for you in your browser
- Each request in the activity feed says what it was: Apple privacy fetch, unverified, or bot with its reason, and the hover explains the label
- The device chart reads observed clicks only and says so, because Apple, Gmail, and Yahoo hide the device on opens; the client chart names the proxies
- Industry benchmarks rebuilt from the Brevo 2026 report, which publishes open rates without Apple privacy opens, with the source named under every figure; nonprofits also see the M+R 2026 newsletter click rate
- The activity export lists observed opens and clicks with Assessment and Reason columns; an "Include all activity" checkbox exports every request
- An engagement block on every campaign in the API and the connected AI tools: observed, privacy, unverified, automated, and raw counts, so an assistant reports the honest numbers
- Campaigns sent before this release keep their current numbers and say so until their history is classified
- Open Rate and Click Rate no longer carry a grade against the industry figure; the bars and numbers stay, and the footnote says what each side leaves out
- Sending services that offer a bot signal (SES, SendGrid, Mailgun) now have it read on every open and click
- A delivery report arriving after someone unsubscribed from a campaign could move that person back to delivered in the campaign's recipient list
- Two delivery reports for the same email counted the person as delivered twice
- A Postmark unsubscribe delivered twice was counted twice
v3.3.0
August 28, 2026Custom fields, merge tags, and a subscribe API
Your website, donation page, or checkout can now add and update contacts directly, carrying whatever extra details you keep about each person. You can name those fields in Settings, filter your list by them, include them in exports, and write them into your emails with fallbacks and if/else sections.
- Custom fields on every contact, for details like a giving level, a program name, or the date someone first gave
- Merge tags for custom fields: write {{ sponsor_count }} in a subject line or email and each person gets their own value
- Fallbacks for any tag, so {{ first_name | "friend" }} never sends a blank greeting
- If/else sections: wrap a paragraph in {% if sponsor_count > 0 %} and only the people it applies to receive it, with an optional {% else %} for everyone else
- Date, number, and plural formats per tag, plus a display format per field in Settings so a currency or date prints the same way in every email
- The Merge Tags button in the editor lists your own custom fields next to the built-in ones
- A send is held with a plain message when a tag is malformed, so an unfinished {% if %} never reaches your list
- A Settings page for naming and describing each field so your team knows what it holds, up to 50 fields per workspace
- A subscribe endpoint so your own site can add a contact and update them on every later visit
- A batch version of the same endpoint that accepts up to 500 people in one call
- A permanent record of each opt-in, including when it happened and where it came from
- Filter your contact list by any custom field: equals, does not equal, contains, greater than, less than, empty, or not empty
- Custom field columns in CSV exports
- Filter by custom field when adding people to a group
- An opt-in through the API lifts an earlier unsubscribe only when it was given in the last 24 hours and after the unsubscribe was recorded, so an old form submission can never quietly resubscribe someone
- Someone whose address hard bounced is never resubscribed by an opt-in
- The subscribe endpoint has its own budget of 300 requests per minute for each API key, so one integration cannot crowd out another
- API keys were limited to 50 requests per hour, the ceiling meant for callers with no key at all; a key on a paid workspace now gets its full 10,000 per hour
- Paging through a large imported list could skip or repeat people, so a list of 5,546 contacts showed only 4,117
- Searching contacts for text containing a percent sign, an underscore, or a backslash returned nothing
- The time zone picker in Settings showed nothing for a workspace still on the default time zone
- The campaign editor pushed the page sideways on tablets and phones; long values in dropdowns spilled outside their box
v3.2.0
August 21, 2026Bringing your list over
Moving from another email marketing platform now carries your unsubscribes and your bounces across, not just the people still on your list. Drop in the export files you already have and GoodPostal reads them as they come.
- Import a file as subscribed, unsubscribed, or bounced, so your old platform's opt-out export becomes real opt-outs here
- Opt-outs imported this way are permanent, so a later import that includes those people never mails them
- A bounced import marks the address as a hard bounce, carrying your delivery history across instead of starting over
- Drop several export files in at once; each one is detected and set up on its own
- Column names from Mailchimp and Constant Contact exports are recognized automatically, so nothing has to be renamed first
- An address split across several columns is put back together, and a country written out in full is shortened to its two-letter code
- Searching contacts by name found nothing unless the capitalization matched exactly
- Searching a first and last name together now finds the person, matching each word against every name field instead of looking for the whole phrase in one
- The import success dialog stretched off screen when a filename was long
v3.1.0
August 11, 2026Faster pages and dark mode fixes
An email section you already designed dark is no longer lightened when the reader has dark mode on, which had been making some unsubscribe links unreadable. The homepage went from 35 to 98 out of 100 on desktop page speed.
- The homepage scores 98 out of 100 on desktop page speed, up from 35, mostly by no longer shipping the code editor bundle to every page
- Public pages arrive from the server already rendered, so they show up sooner and search engines read them without running any JavaScript
- Newsletter signups were being discarded because browsers were autofilling the hidden field that catches spam robots; every signup now goes through
- An unsubscribe link or footer on an already-dark section could be lightened into unreadability when the reader had dark mode on
- Icons in emails kept their light-mode colors in dark mode, and dark versions of gradient images were being dropped before they shipped
- Cropping an image in the email builder produced the wrong crop whenever the image was shown at a different size than its original
- Choosing an image from your library sometimes inserted nothing
- Template thumbnails failed to render on the server, so previews came back blank
- A malformed sign-in request from an AI connector returned a server error instead of a clear message
v3.0.0
July 30, 2026GoodPostal is live
GoodPostal opened to the public on July 30, 2026. You connect your own email sending service and pay that bill directly, and GoodPostal charges $19 a month plus $0.05 per 1,000 emails.
- A 14-day free trial with no credit card, then $19 a month or $190 a year, and $9.50 a month or $114 a year for verified nonprofits, plus $0.05 per 1,000 emails sent
- Press and hold to send, so a campaign never leaves on a stray click
- Automatic HTTPS on your tracking domain, with the certificate issued and renewed for you
- One place to connect GoodPostal to AI tools: sign in from Claude, connect coding and terminal tools with no key at all, or use an API key for your own scripts
- A summary of what a campaign will cost, shown before you send it
- Unsubscribes are now kept permanently and independently of your contact list, so re-importing an older file never mails someone who already opted out
- Editing a campaign that started from a template no longer changes the template: your first real edit splits the two, and a note in the editor tells you the moment it happens
- The Save button in the campaign editor now always answers, either that it saved or that everything was already saved
- Emails were running wider than a phone screen because headings and footer addresses could not wrap; 22 of 24 test emails now fit a 390 pixel screen, up from 13
- Previews of an unsent campaign showed the template as it was when the campaign was created rather than what would actually be mailed
- Scrolling the homepage on a phone could return a "Too many requests" error while the email examples loaded
v2.6.0
July 25, 2026Automatic dark mode and annual billing
GoodPostal now works out a dark mode version of every email you build, so what you design in light mode still reads on a phone set to dark. Annual plans can pay the software fee once a year and the send fees monthly.
- A dark mode version of each email, worked out from your design, leaving any section you already made dark alone instead of lightening it
- A gallery of ready-made starter emails you can recolor to your own brand in one step
- 90 building blocks across 13 categories, including new ones for engagement
- Nonprofit verification without leaving the app: send your documents, get a decision, and move to the nonprofit price with the difference prorated
- Annual plans can pay the software fee once a year and the send fees monthly
- Four free tools anyone can use: a DNS checker, an email address checker, an Amazon SES access request generator, and an index of email sending prices
- Documentation at /docs, and a blog at /post with an RSS feed
- Your workspace name, logo, and brand colors flow into every new email you start
- An email counts as sent only once your email sending service confirms it, with a check every five minutes for anything still unconfirmed
- AI assistants can change one part of a template, preview the result, and ask you for an image, instead of rewriting the whole design every time
- A retry inside the Amazon SES client could mail the same person twice
- Emails built while several campaigns were being prepared at once could come out with the wrong styling
v2.5.0
June 27, 2026One plan, one price
Pricing is now one plan instead of four, with no contact limit and no charge for the size of your list. Every email is billed at $0.05 per 1,000 from the first one.
- One plan at $19 a month or $190 a year, and $9.50 a month or $114 a year for verified nonprofits
- Sending billed at $0.05 per 1,000 emails from the first email, with no bundled allowance to keep track of
- A 14-day free trial with no credit card, 5,000 sends, 10,000 contacts, 25 seats, and 10 GB of storage
- Trial reminders on day 2 and day 7, and a warning well before an unused trial workspace is removed
- Ask to join a workspace that already exists on your organization's domain; the owner approves or declines from an email
- Alerts at 100,000, 500,000, and 1,000,000 emails in a billing period, and an automatic pause at 1,000,000
- When a trial ends without a card, you keep your account and everything in it, in view-only form, instead of losing the workspace
v2.4.0
June 14, 2026One unsubscribe everywhere
An unsubscribe link now behaves the same whichever email sending service delivered the message, and no service adds a second one of its own. GoodPostal also connects to Claude and to the coding tools you already use.
- Connect GoodPostal to Claude as a custom connector, and to coding and terminal tools, each at its own address so the cards and menus match the tool you are in
- API keys carry real permissions now: read, write, delete, and webhooks, chosen per key
- A team member can be given permission to manage API keys without being made an owner or an admin
- Sending capacity is checked before every send, and a campaign is stopped only when your email sending service gives a definite no
- Choose what happens when you reach your email sending service's included volume: block the send, warn and let you confirm, or send and accept the charge
- Each plan's daily send cap is shown while you compare email sending services, and the campaign review step warns when your audience is larger than that cap
- Move a paused campaign to a different email sending service and resume it, keeping the results already recorded and re-sending only what is still pending
- Emails when a campaign pauses because a limit was reached, credentials stopped working, or a service was disconnected
- Contact details shown to an AI assistant are masked, so an assistant can work with your list without reading full addresses
- 85 fonts in the email builder, up from 26
- Only one unsubscribe link appears in an email now: the link you designed is rewritten to the one your email sending service understands, instead of that service appending its own below it
- Opens and clicks are counted once: when GoodPostal does the tracking, it turns your email sending service's own tracking off
- Webhook addresses use an unguessable token, and reconnecting replaces only GoodPostal's own webhook, never one you set up yourself
- Changing credentials in a way that moves where results are delivered now raises a notice instead of quietly reconfiguring anything
- Removing or replacing a tracking domain now asks you to confirm first, because it can break the unsubscribe links in recently sent campaigns
- Dark mode styling set on an individual block never reached recipients
- Autosave could lock up after you published or saved a version, so later edits stopped saving
- Text edits were lost when you clicked away from a field instead of tabbing out of it
- Dragging a container into something inside itself deleted it
- Images pulled in from a web page came back incomplete, and a logo with no fixed size came out broken
v2.3.0
May 31, 2026Six email sending services, checked end to end
You can connect Amazon SES, SendGrid, Mailgun, Postmark, SMTP2GO, or Mailtrap, and GoodPostal creates the webhooks for you when you say yes. Tracking now belongs either to GoodPostal or to your email sending service, never to both at once.
- Six email sending services to choose from: Amazon SES, SendGrid, Mailgun, Postmark, SMTP2GO, and Mailtrap, with plain SMTP available on request
- Webhooks created for you at connect time, with your consent, so delivery, open, click, bounce, and complaint results start arriving without you pasting a URL anywhere
- Amazon SES can host your unsubscribe page and track delivery, opens, and clicks without you setting up a tracking domain at all
- Send a test email from any verified sender, either from the sender list or from the service page
- A setup guide for each email sending service that names the exact account permissions it needs
- One default sender decides which email sending service new campaigns use, so the two can no longer disagree with each other
- A campaign locks in its email sending service when it starts, so a change made mid-send cannot split the results
- Someone who resubscribes at your email sending service is reactivated in GoodPostal too, without rewriting your past unsubscribe numbers
- Delivery, open, and click results from SMTP2GO were being discarded, leaving campaign statistics at zero
- SendGrid webhook signatures were rejected because of how the signing key was formatted
- Test emails went out through the workspace default rather than the sender's own email sending service, which could reject the address as unverified
- Draft campaigns whose sender needed a tracking domain could not be opened from the list, though the same campaign opened fine from its detail page
v2.2.0
May 17, 2026Contact import and export
Large contact files import in the background while the count updates in front of you, and you can export your list with the columns you choose. Both arrive by email when they finish.
- Import contact files up to 250 MB, processed in the background, with your contact count updating live as it runs
- A summary at the end telling you how many were new, how many were duplicates, and how many had errors
- Export your contacts with the columns you pick and the same filters as your contact view, zipped past 100 MB and delivered by a private link that expires in 24 hours
- Export everything in your workspace from a new Export Data page, with each file kept for 7 days
- Give one team member permission to export or delete contacts without making them an owner or an admin
- A downloadable contact template so your first file imports cleanly
- Your dashboard now follows the theme color you choose, in both light and dark mode
- Live progress had stopped arriving across the app, so imports and campaign sends appeared frozen even while they were running
- A large workspace export could be cut off after two minutes and silently retried
v2.1.0
April 25, 2026Faster send rates for every account
Hourly send rates raised significantly across all paid accounts after infrastructure load testing. Trials send at full speed. Stale-job protection keeps deleted recipients from tripping email sending service safeguards.
- Hourly send rates raised up to 5x: paid accounts now send between 25,000 and 80,000 emails per hour, up from 5,000 to 25,000
- Nonprofit accounts get the same raised rates as their standard counterparts
- Trial accounts send at 50,000 emails per hour, full paid speed
- Production worker pools rebalanced to deliver the new rates reliably
- Send speed is now published on the pricing page
- Queued sends whose recipient was deleted are discarded cleanly instead of failing and tripping email sending service safeguards
- Campaign build jobs get the same protection
- Worker timeouts raised so long-running sends complete reliably
- Internal load-testing safety gate hardened
v2.0.0
February 13, 2026Full Workspace Control
Complete AI-driven workspace management with 52 tools, 4 resources, and 5 prompts. Set up an entire email marketing workspace from scratch through natural language.
- Sending service management tools (create, delete, set default) for SMTP, SendGrid, Mailgun, and Postmark
- Domain management with DNS verification workflow
- Sender identity CRUD with default selection
- Email branding tools (colors, fonts, social links, logo upload)
- Image library management with upload and deletion
- Campaign lifecycle tools (send, pause, resume, cancel, duplicate)
- Contact group operations (add/remove contacts, update, delete)
- Template category management
- Plan usage and workspace info tools
- Design prompts for email creation and redesign
- Full workspace setup prompt for end-to-end onboarding
- OAuth 2.1 authentication via Laravel Passport
- Template creation now auto-normalizes design JSON: AI clients only need schemaVersion and sections
- Brand guidelines tool returns complete branding context including logo URLs and social links
- Workspace info now includes plan limits and usage counts
v1.0.0
January 15, 2026Initial MCP Release
First release of the GoodPostal MCP server with core template and campaign management capabilities.
- Template CRUD operations (list, get, create, update, delete, duplicate)
- Campaign CRUD operations (list, get, create, update, delete, duplicate)
- Contact management (search, create, update, delete)
- Contact group management (list, create)
- Send test emails from templates
- Block type reference resource for email document structure
- Tailwind class reference for email styling
- Email design guide resource with best practices