Browse documentation

Type to search the documentation. Press Esc to close.

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

  1. 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.

  2. 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.

  3. 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}}
  4. 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:

  1. 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.

  2. 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 201 with a card code, and the hook's cards sent counter goes up on the Integrations screen.

  3. Watch the first few

    The Integrations screen logs every call with its status. A 422 with template_incomplete means your payload is missing a field the message template needs.

Last checked against the product on . Something wrong or missing? Tell us.