How do I send handwritten thank-you cards to customers?
For a one-off batch, build a campaign with the Client thank-yous occasion. For an ongoing thank-you triggered by a closed deal or a first order, create an inbound hook and fire it from your CRM, your store or Zapier — one POST per event, one card per POST.
On this page
#As a batch
Export the customers worth thanking
A useful cut is bought from us in the last twelve months, not everyone in the CRM. A thank-you that lands with someone who has never bought reads as a mailshot.
Build the campaign
New campaign → Client thank-yous, and upload or paste the export on step 2.
Import it into Contacts first if you keep a do-not-mail list: the campaign wizard does not check suppressions, but the contacts importer does.
Write something specific enough to be true
Merge in the company name and, if you have it, something concrete. Generic gratitude reads as a template because it is one.
A thank-you that does not read like a mailshot {{first_name}} — thank you for your business this year. Working with {{company}} has been a real pleasure, and we're looking forward to more of it. {{sender_name}}Schedule it away from the obvious weeks
A thank-you that arrives in the second week of January, when nobody else is sending anything, is read. One that arrives on 20 December is one of thirty.
#Automatically, when a deal closes
This is the highest-value pattern in the product and it needs no code beyond a Zap. The recipe is in sending cards from Zapier; the short version is:
Create an inbound hook
Integrations → New hook URL. Give it a name you will recognise (Closed-won thank you), a design, a handwriting and a message template with merge fields.
Copy the URL. It is shown once and stored hashed, exactly like an API key.
Point your trigger at it
In Zapier, Make, n8n, a Salesforce Flow, a Shopify Flow action or four lines in your own backend, POST a JSON body with the recipient's name and address to that URL when the deal moves to closed-won.
The smallest body that works { "first_name": "Dana", "last_name": "Okafor", "line1": "88 Colin P Kelly Jr St", "city": "San Francisco", "state": "CA", "zip": "94107", "deal_name": "Q3 renewal" }You’ll know it worked when The response is a
201with a card code, and the hook's cards sent counter goes up on the Integrations screen.Watch the first few
The Integrations screen logs every call with its status. A
422withtemplate_incompletemeans your payload is missing a field the message template needs.
Last checked against the product on . Something wrong or missing? Tell us.