Skip to main content

LinkedIn lead forms setup guide

StatusKindHow you connect
Coming soonLead sourceA Zap

This guide is coming soon: bubbl3 is still checking it end to end. It shows how LinkedIn lead forms will send leads to bubbl3, with nothing to install.

What it does​

LinkedIn hands each Lead Gen Form response to Zapier. With one Code step, the Zap sends it to a bubbl3 lead source, signed with the source's secret, so each response becomes (or updates) a bubbl3 contact and can start the source's workflow.

Before you start​

  • A LinkedIn ad account with Lead Gen Forms, and access to it for the person connecting Zapier.
  • A bubbl3 Lead URL for LinkedIn: in Settings, Integrations, under Lead sources, add a Lead URL source, set its labels, owner, consent setting and workflow, and copy its id (src_...) and signing secret, which is shown once.
  • A phone number question on the form. A lead needs one.

Setup​

With Zapier​

  1. In Zapier, create a Zap with the LinkedIn Lead Gen Forms trigger for a new form response, and choose the ad account and form.
  2. Add a Code by Zapier step (Run JavaScript) with the code below. In Input Data, add source_id, source_secret, tool set to linkedin, record_id mapped to the response's id, and phone, first_name, last_name and email mapped to the answers.
  3. Test the step. The lead shows on the source as received.
  4. Turn the Zap on.

Set the lead source's consent setting to match the consent wording your form shows, so each lead's consent is recorded. Leads can be texted either way, because you confirmed when creating the source that everyone you send has agreed to receive texts.

Templates​

The Zap's Code step​

Zap templates are made in Zapier's own editor, so this is a recipe: add a Code by Zapier step (Run JavaScript) after your LinkedIn lead forms trigger, map the Input Data names in the code's first lines, and paste this code. It signs the lead and sends it to your lead source, with LinkedIn lead forms's record id as the idempotency key.

Code by Zapier
// Code by Zapier (JavaScript): sends one lead to a bubbl3 lead source, signed with its secret.
// Input Data: source_id, source_secret, tool, record_id, phone, first_name, last_name, email.
const crypto = require('crypto');

// Without the record id every later lead would look like a duplicate, so stop instead.
if (!inputData.record_id) throw new Error("Map record_id to the trigger's record id");

const lead = {
event_id: `${inputData.tool}-${inputData.record_id}`,
phone: inputData.phone,
first_name: inputData.first_name,
last_name: inputData.last_name,
email: inputData.email,
};
const body = JSON.stringify(lead);
const t = String(Math.floor(Date.now() / 1000));
const v1 = crypto
.createHmac('sha256', inputData.source_secret)
.update(`${t}.${body}`)
.digest('hex');

const res = await fetch(`https://api.bubbl3.com/v1/inbound/leads/${inputData.source_id}`, {
method: 'POST',
headers: {
'content-type': 'application/json',
'bubbl3-signature': `t=${t},v1=${v1}`,
'Idempotency-Key': lead.event_id,
},
body,
});
if (!res.ok) throw new Error(`bubbl3 refused the lead (${res.status}): ${await res.text()}`);
output = { received: true, event_id: lead.event_id };

Data shared​

From LinkedIn to bubbl3: each response's id and the answers you map.

From bubbl3 to LinkedIn: nothing.

Sending rules that still apply​

LinkedIn lead forms never texts anyone itself. What it sends bubbl3 can start the lead source's workflow, and every workflow text goes through the same checks as a text you send from bubbl3. Nothing in LinkedIn lead forms can turn them off.

  • Consent. When you connect LinkedIn lead forms or create a lead source, you confirm that everyone you send to bubbl3 has agreed to receive texts from you, so its contacts can be texted straight away. bubbl3 never texts a contact who opted out, and a workspace set to text only opted-in contacts texts only them.
  • Opt-out. Replying STOP opts a contact out at once.
  • Quiet hours. No texts from 8:00 PM to 9:00 AM in the contact's own time zone (from the phone's area code). A text due then waits until the morning.
  • Pacing. Each line texts at most 15 new contacts an hour and 50 a day (fewer while a new line warms up), and spaces texts 20 to 90 seconds apart. A big import or batch is queued and sent as the limits allow, never dropped.
  • First messages. Until a contact replies, a text can't include links, photos or files, phone numbers or email addresses, must be 300 characters or fewer, and at most 3 texts go out.

What LinkedIn lead forms is told when bubbl3 doesn't send​

LinkedIn lead forms isn't told when bubbl3 doesn't send a text: the reason shows on the message in bubbl3, and in the message.status webhook if you use one.

ReasonCodeWhat you see
A link before the contact repliespre_reply_link_blockedNot sent: "Links can't be sent until the contact replies"
A photo or file before the contact repliespre_reply_media_blockedNot sent: "Photos and files can't be sent until the contact replies"
A phone number before the contact repliespre_reply_phone_blockedNot sent: "Phone numbers can't be sent until the contact replies"
An email address before the contact repliespre_reply_email_blockedNot sent: "Email addresses can't be sent until the contact replies"
A first message that is too longpre_reply_too_longNot sent: "First messages must be 300 characters or fewer"
Too many texts without a replypre_reply_message_limitNot sent: "Already sent 3 texts without a reply. Wait for the contact to reply"
The same text to too many people todayidentical_text_limitNot sent: "This exact text went to 20 people from this line today"
The line is paused after unanswered textsunanswered_streak_limitNot sent: "This line is paused after too many unanswered texts"
The contact opted outcontact_opted_outNot sent: "The contact opted out of texts"
The workspace texts only opted-in contactsconsent_requiredNot sent: "This workspace only texts contacts who opted in"
No line can reach the contactline_unavailableNot sent: "bubbl3's line for this contact isn't available"
Quiet hoursquiet_hoursHeld: "Scheduled for 9:00 AM America/Chicago, quiet hours"
The line's daily limitdaily_new_contact_capHeld: "Scheduled for Oct 15, 9:00 AM America/Chicago: today's limit for this line is reached"
The line's hourly limit of new contactshourly_new_contact_capHeld: "Scheduled for 2:00 PM America/Chicago: this hour's limit of new contacts for this line is reached"

The numbers are the default limits; a line's own limits change them. bubbl3's other checks (no phone number, a number that doesn't match) have their own plain reasons.

Limits and known gaps​

  • LinkedIn doesn't post Lead Gen Form responses to a webhook of your own; Zapier (or another LinkedIn marketing partner) reads them for you.
  • One lead per response id: a Zap replay is the same lead.
  • A response without a phone number is refused with "A lead needs a phone number".

Troubleshooting​

  • The trigger finds no responses. Check the connected LinkedIn user can manage the ad account's leads.
  • 403 from bubbl3. Check the source id and secret, and that the source isn't paused.