Private beta is open. Public beta opens December 1.Join the private beta →

Join private beta →Book a demo

Integrations · Clay

Direct mail as a step in your Clay table.

One HTTP API column enrolls each row into an always-on campaign. Mailyard finds and verifies the business address, mails the letter and reports back to the row.

HTTP API columnRan on 1 row
MethodPOST
URL…/campaigns/q4-reopen/enrollments
AccountMailyard key (Headers)
Responsequeued

What happens to a row

Enroll once. Mailyard handles the rest.

Set up the letter, proofs and funding once. The campaign then takes leads one at a time, like a sequencer.

  1. 01 · Scout

    Research

    Finds the company office closest to the contact's city.

  2. 02 · Proof

    Verify

    USPS CASS check. Anything unconfirmed is held with a reason.

  3. 03 · Gate

    Schedule

    Books the next send window, 24+ hours out, from your balance.

  4. 04

    Mail

    The letter prints with the contact's own QR code.

  5. 05 · Echo

    Report

    Status and delivery changes go back to your table by webhook.

Two ways to send rows.

Always-on campaign

Mail every new lead automatically.

Rows enroll into an approved campaign. Each letter is scheduled 24+ hours ahead and cancelable until it prints.

POST /api/v1/campaigns/{label}/enrollments
Lead list

Find addresses now, mail when you're ready.

Rows join a lead list in Leads. Attach it to any campaign later at no new research cost.

POST /api/v1/lead-lists/{id}/contacts

Inputs

Which Clay fields help.

Set "inputFormat": "clay" and send people-search fields in Clay's own shape.

FieldClay keyNeeded?Why it helps
Contact IDcontactIdRequiredEnrollment is idempotent on it, and results and scans carry it back.
First and last nameFirst Name, Last NameRequired for enrollmentPrints on the envelope and greeting.
Work emailEmailOne identity fieldIts domain names the company when there's no profile.
LinkedIn profile URLSocial Urls → LinkedinOne identity fieldConfirms the current employer.
Company name and domainMatched Experience → CompanyStrongly recommendedAnchors research to the right organization.
City and stateStructured LocationStrongly recommendedPicks the nearest office over headquarters.

US contacts only. A role with an end date is refused as a former employer. Letter fields go in fields under the campaign's names.

The column

What goes in the HTTP API column.

POST https://app.mailyard.ai/api/v1/campaigns/q4-reopen/enrollments
# Header, sent by a Clay connection, never typed into the column
Authorization: Bearer myk_your_api_key
Content-Type: application/json

{
  "contactId": "/Contact ID",
  "inputFormat": "clay",
  "First Name": "/First Name",
  "Last Name": "/Last Name",
  "Email": "/Work Email",
  "Social Urls": { "Linkedin": "/LinkedIn Profile" },
  "Matched Experience": {
    "Company": { "Name": "/Company Name", "Domain": "/Company Domain" }
  },
  "Structured Location": {
    "City": "/City",
    "State Or Province": "/State",
    "Country Iso": "/Country ISO"
  }
}

Column settings

  • Keep the key in an HTTP API (Headers) connection
  • Turn on remove empty values
  • Run only when Contact ID and a company or LinkedIn URL exist
  • About 5 requests a second (the limit is 10 per key)

Field paths to return

status, reasons, address.line1, address.city, address.state, scheduledFor, scan.scanUrl

Back into the table

Every status comes back to the row.

Point a flat-format enrollment.updated webhook at a Clay Monitor webhook and dedupe on Contact ID. The keys stay the same at each stage, so one column mapping holds.

  • The address used, with USPS detail and sources
  • Send window, cancel deadline, delivery stage and scans
enrollment.updatedflat · to Clay
queuedresearchingverifyingheldnot_foundscheduledprintingin_transitprocessed_for_deliveryreturnedcancelled
contact_id48213
statusscheduled
address_line11187 FOUNDRY ROW
scheduled_for2026-10-14T14:00Z

Setup

Set it up in ten steps.

In Mailyard

  1. Create an always-on campaign with a letter and a USPS-verified return address.
  2. Approve the proofs, rendered at the longest values your letter allows.
  3. Fund the balance under Settings → Billing.
  4. Activate it and copy its label, such as q4-reopen.
  5. Create an API key under Settings → API keys.

In Clay

  1. Add an HTTP API (Headers) connection: Authorization, Bearer plus your key.
  2. Add an HTTP API column: POST, the enrollment URL and the body above.
  3. Run it on one row. A 201 with queued means it's in.
  4. Add a Monitor webhook with auto-dedupe on Contact ID, and add its URL under Settings → Webhooks (flat format).
  5. Send a test event, map columns and run the table.

Automatic, inside limits you set.

Nothing prints unapproved

Edit the letter and printing waits for new proofs.

24 hours and a review

Each letter waits a day, and Mailyard's team reviews campaigns during the beta.

Spend stays capped

When the prepaid balance runs short, leads wait as held.

Suppression first

Suppressed people are held at intake, before research.

Questions

More in the full FAQ →

Do I need addresses in my Clay table?

No. A work email, LinkedIn profile URL or company is enough. If a row has a mailing address, send it in address to skip research. USPS verification still runs.

Will running the column twice mail someone twice?

No. Enrollment is idempotent on the campaign and Contact ID, so a rerun returns 200 with the current state.

What does a letter cost when it's enrolled from Clay?

The campaign's per-letter price, fixed when the piece is scheduled and drawn from your prepaid balance. Research uses a credit only for a verified, mailable address. See pricing.

Is Mailyard a native Clay integration?

It works through Clay's HTTP API column. There's no Mailyard action in Clay's list yet, so you set up the column once with the URL, a key connection and a JSON body.

Add a letter to your Clay workflow.

Set up an always-on campaign once, then add rows as they arrive.

Let's see if Mailyard fits.

Three quick questions, then pick a time for a 30-minute demo.

How many people do you want to reach each month?
Do you already have a lead list?