Clay → CRMown (push enriched leads)

Send leads from a Clay table into CRMown contacts with Clay's HTTP API column. Each row is upserted: matched by email, or by company domain + first and last name, so re-running a table updates the same contacts instead of duplicating them.

Open in CRMown →

Steps

  1. In CRMown: Settings → Integrations → Developer → create an API key, choose Public, and give it the contacts:write scope. Copy the key (it is shown once).
  2. In Clay: add an "HTTP API" enrichment column on your table. Method POST, URL https://app.crmown.io/api/v1/contacts/upsert.
  3. Headers: Authorization = Bearer <your key>, Content-Type = application/json, X-Source = clay.
  4. Body (JSON): map Clay columns to email, firstName, lastName, phone, title, companyDomain, tags (a list) and custom (an object for anything else, stored as custom fields).
  5. Run the column on a few rows first and check the response: {"id": "…", "created": true|false, "matchedBy": "email" | "domain_name" | null}.
  6. Optional — push companies too: POST https://app.crmown.io/api/v1/companies/upsert with domain (required), name, industry, size. A contact's companyDomain links it to an existing company; it never creates one.

Good to know

  • Send email when you have it. Without an email, companyDomain + firstName + lastName are all required (otherwise the API returns 400 missing_identity).
  • Clay contacts are created with source "clay" and NO email, SMS or marketing consent — enriched leads haven't opted in, so campaigns won't send to them until they do. Existing contacts keep their original source.
  • Re-runs are safe: supplied fields overwrite, omitted fields are left alone, tags are merged (never replaced), and a missing email is filled in but an existing one is never replaced.
  • Trashed contacts are never matched — a push for a deleted contact creates a fresh one.
  • CRMown → Clay: if your Clay plan offers a webhook source for tables, copy its URL into Settings → Integrations → Developer → Webhooks and pick events such as contact.created, deal.won or form.submitted. Each payload includes a source field you can filter on in Clay.
  • Full field reference and rate limits: app.crmown.io/api/v1/docs.

Troubleshooting

Clay shows 401 or 403
The key is missing, revoked, an internal (not Public) key, or lacks contacts:write.
Fix: Create a Public key with contacts:write in Settings → Integrations → Developer and update the Authorization header.
Clay shows 400 missing_identity
The row had no email and was missing one of companyDomain, firstName or lastName.
Fix: Map an email column, or make sure all three of companyDomain, firstName and lastName are filled.
Duplicates appear after a re-run
Rows had no email and the name or domain differed slightly between runs (e.g. "acme.com" vs "acme.co").
Fix: Send email where possible; otherwise keep companyDomain consistent. www. and https:// are ignored automatically.
Clay contacts are skipped by a campaign
They have no marketing consent by design.
Fix: Collect consent (e.g. a double opt-in form) before adding them to marketing sends.

View as Markdown