Cold Leads

Send Typeform, Tally and Google Forms responses to Cold Leads

Who it is for
Teams collecting leads with form builders
The problem
Form builders keep responses in their own dashboards. You want each response to become a CRM contact you can answer, but Typeform and Tally send their webhooks in their own nested format, and Google Forms has no webhooks at all.
The solution
Use the route that delivers flat fields to Cold Leads' lead endpoint: a short Apps Script trigger for Google Forms, and a Make scenario or Zap for Typeform and Tally that maps the answers to email, name, company and message.
What you get
Every new form response becomes a Cold Leads contact with consent status inquiry, your tags and the stage you chose.

Addresses, IDs and results in the examples are illustrative. example.com is reserved for documentation, so a real check of these addresses returns invalid.

Which route to use

Form builderRouteWhat you need
Google FormsApps Script trigger on form submit posts to Cold LeadsA Google account that owns the form
TallyTally → Make (or Zapier) → HTTP request to Cold LeadsA Make account; Zapier needs a paid plan for webhooks
TypeformTypeform → Make (or Zapier) → HTTP request to Cold LeadsA Make account; Zapier needs a paid plan for webhooks

Pointing a Tally or Typeform webhook straight at /api/hooks/lead does not work: they send answers in nested structures (data.fields for Tally, form_response.answers for Typeform), and the endpoint expects a top-level email field.

Google Forms with Apps Script

  1. Open the form, then ⋮ → Apps Script, and paste the script below. Change the question titles in FIELDS to match your form.
  2. In the script editor, open Triggers → Add Trigger, choose sendToColdLeads, event source From form, event type On form submit, and save.
  3. Google asks you to authorize the script, because it connects to an external service. The trigger runs as the person who created it.
  4. Submit a test response and check Executions in the script editor if no contact appears.
Apps Script bound to the form
const COLDLEADS_KEY = "lk_your_website_key";
// Form question title → Cold Leads field
const FIELDS = { "Work e-mail": "email", "Name": "name", "Company": "company", "What do you need?": "message" };

function sendToColdLeads(e) {
  const lead = { tag: "google-forms" };
  // If the form collects e-mail addresses automatically, use that address.
  const respondent = e.response.getRespondentEmail();
  if (respondent) lead.email = respondent;
  for (const item of e.response.getItemResponses()) {
    const field = FIELDS[item.getItem().getTitle()];
    if (field) lead[field] = String(item.getResponse());
  }
  const res = UrlFetchApp.fetch("https://coldleads.app/api/hooks/lead", {
    method: "post",
    contentType: "application/json",
    headers: { "x-api-key": COLDLEADS_KEY },
    payload: JSON.stringify(lead),
    muteHttpExceptions: true,
  });
  if (res.getResponseCode() >= 300) console.warn(res.getResponseCode(), res.getContentText());
}

Tally or Typeform with Make

  1. In Make, create a scenario. Start it with your form builder's trigger for new responses, or with Webhooks → Custom webhook and paste that webhook's address into Tally (Integrations → Webhooks) or Typeform (Connect → Webhooks).
  2. Submit one test response so Make learns the structure of the answers.
  3. Add HTTP → Make a request: URL https://coldleads.app/api/hooks/lead, method POST, header x-api-key with your website key, body type Raw, content type JSON.
  4. In the body, map the answers to Cold Leads fields as in the example below. For Typeform, the e-mail answer is the item whose type is email; for Tally, it is the field whose type is INPUT_EMAIL.
  5. Run the scenario once, check that the contact appears in Cold Leads, then turn scheduling on.

The request body, with the placeholders replaced by mapped values in Make:

HTTP module body (JSON)
{
  "email": "{{email answer}}",
  "name": "{{name answer}}",
  "company": "{{company answer}}",
  "message": "{{message answer}}",
  "tag": "tally"
}

Tally or Typeform with Zapier

  1. Create a Zap with the Tally or Typeform trigger for new responses.
  2. Add Webhooks by Zapier → POST (available on Zapier's paid plans).
  3. URL https://coldleads.app/api/hooks/lead, Payload Type json, Data: email, name, company, message and tag mapped from the trigger, Headers: x-api-key with your website key.
  4. Test the step and publish the Zap.

FAQ

Can I send the Typeform webhook directly to Cold Leads?

No. Typeform's payload keeps answers in form_response.answers, and Cold Leads reads a top-level email field. Use Make or Zapier to map the fields.

Does the Apps Script need a paid Google plan?

No. Installable triggers and UrlFetchApp work with a regular Google account; Google's daily Apps Script quotas apply.

What consent status do these contacts get?

inquiry, the same as website forms. Use the endpoint only for people who filled in your form, not for bought lists; import those as a CSV file instead.