# How to collect leads from Meta lead ads

> Connect a Facebook Page through your own Meta app so leads from Facebook and Instagram lead ads arrive as contacts, sorted into lists and tags by form.

Product: Kelune CRM Cloud (hosted by us). Page: https://kelunecrm.com/docs/cloud/contacts/meta-lead-ads

Meta lead ads are Facebook and Instagram ads with a built-in form. When someone fills one in, Kelune CRM Cloud saves them as a contact within moments, adds the lists and tags you chose for that form, and keeps every answer they gave in a note on the contact. There is no export, spreadsheet, or integration service in between.

Each connection is one Facebook Page. A lead form on that Page, used in a Facebook or an Instagram ad, sends its leads through the connection.

> **Note:**
>
> You need the permission to manage lead ads connections. The Owner, Admin, and Manager roles have it by default. Each plan limits the number of connections (1 on Free, 3 on Starter, 10 on Growth, 25 on Scale), and contacts created from leads count toward the plan's contacts. See [How to check plans, usage, and billing](https://kelunecrm.com/docs/cloud/getting-started/plans-and-usage).

## How it works

Meta delivers leads only to a Meta app, so the connection reads your leads through an app that your business owns. You create the app once in Meta for Developers, and Kelune CRM Cloud does the rest:

1. You enter the app's ID and secret and a Page access token. Kelune CRM checks them with Meta, subscribes your Page to lead events, and reads the Page's lead forms.
2. You paste the connection's **Callback URL** and **Verify token** into the app's webhook settings.
3. Meta sends each new lead to that URL. Kelune CRM fetches the answers from Meta and saves the contact.
4. Every 15 minutes, Kelune CRM also reads the latest leads of each form, so a lead Meta failed to deliver still arrives.

## Prepare your Meta app

These steps happen in Meta for Developers and Meta Business Settings, so the names below are Meta's.

1. In Meta for Developers, create an app of type **Business**, owned by your business portfolio, and add the lead ads use case.
2. Give the app the `leads_retrieval`, `pages_show_list`, `pages_read_engagement`, and `pages_manage_metadata` permissions. Kelune CRM refuses a token that lacks `leads_retrieval` or `pages_manage_metadata`, and names the missing one.
3. Open **App settings › Basic**, add a privacy policy URL, and copy the **App ID** and **App secret**.
4. Create an access token for the Page. A token for a system user that has the Page assigned is best, because it does not expire when someone changes their password. A Page access token works too.
5. In Meta Business Settings, open **Integrations › Leads access** and allow the app, or its system user, on the Page. A missing Leads access entry is the most common reason Meta refuses to share leads.
6. Switch the app to **Live** mode. An app in development mode receives only test leads.

## Connect a Page

The **Meta lead ads** page lists the Pages you have connected, with how many leads each saved and how many need attention.

![The Meta lead ads page with two connected Facebook Pages, one active and one that needs attention](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/connections.webp)

1. Click **Settings** in the sidebar.
2. Under **Advanced**, click **Meta lead ads**.
3. Click **Connect a Page**.
4. Enter the **App ID**, **App secret**, and **Page access token**.
5. If the token reaches more than one Page, enter the **Page ID** of the one to connect.
6. Under **Where leads go**, choose the **Lists** and **Tags** every lead gets, unless its form has its own.
7. Choose the **Status for new contacts**.
8. Choose the **Country for local phone numbers**, so a number written without its calling code is saved in full.
9. Click **Connect**.

![The Connect a Page drawer with the app ID, app secret, Page access token and Page ID fields, and the lists, tags, status and phone country leads get](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/connect-page.webp)

Kelune CRM checks all three values with Meta before it saves the connection. The app secret and the access token are stored encrypted and are never shown again; to change one, enter a new value.

With **Status for new contacts** set to **Pending**, new contacts get the double opt-in email before your campaigns reach them. See [How to set up double opt-in](https://kelunecrm.com/docs/cloud/contacts/double-opt-in).

## Add the webhook in Meta

After you connect, the drawer opens the **Usage** tab with the two values your Meta app needs. You can come back to them at any time: click **Edit** on the connection, then **Usage**.

1. Copy the **Callback URL** and the **Verify token** with their copy buttons.
2. In your Meta app, open **Webhooks** and choose **Page**.
3. Paste both values, verify, and subscribe to the `leadgen` field.

![The Usage tab of a connection with its callback URL and verify token, each with a copy button](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/usage.webp)

> **Caution:**
>
> Each connection has its own callback URL and verify token. Treat them like a password: anyone who has the URL could try to send it data, although Kelune CRM accepts only requests signed with your app secret.

To check the whole path, click **Test** in the drawer, then send a test lead with Meta's Lead Ads Testing Tool. It appears on the **Leads** tab within moments.

## Send each form to its own lists and tags

The connection's **Settings** tab lists the Page's lead forms under **Forms**.

![The Forms table with lists and tags for each lead form and the holiday gift guide form turned off](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/forms.webp)

- Choose **Lists** and **Tags** for a form to send its leads there. A form with none set uses the defaults from **Where leads go**.
- Turn a form's **Status** switch off to stop saving its leads. They are logged as **Skipped**, and you can retry them later.
- A form you created after connecting appears when you click the refresh button beside **Forms**.

## What a lead becomes

A lead needs an email address or a phone number, nothing else. Your workspace's required contact fields do not apply to leads.

- **Matching:** Kelune CRM looks for an existing contact by email first, then by phone. A match is updated; otherwise a new contact is created.
- **Unique fields still hold:** if the email belongs to one contact and the phone to another, the first contact is updated without the phone, and the phone is kept in the note. Contacts are never merged.
- **The note:** every lead adds one note to the contact with the form, the ad and campaign, the platform (Facebook or Instagram), the time, and every answer, including your custom questions.
- **Channel:** contacts created from leads show **Lead ads** as the channel they came in through.
- **Automations:** a new contact starts automations with the **Contact created** trigger, and an updated one starts those with **Contact updated**. See [How to use triggers, delays, and actions](https://kelunecrm.com/docs/cloud/marketing-automation/triggers-delays-actions).

Standard form questions fill these contact fields:

| Meta question | Contact field |
| --- | --- |
| Email, work email | Email |
| Phone number, work phone number | Phone |
| First name and last name, or full name | First name and last name |
| Company name | Company |
| Street address, city, state or province, ZIP or post code, country | Address fields |

Every other answer, such as a job title or a custom question, is kept in the note.

## Read the lead log

The **Leads** tab lists every lead from every connected Page, newest first. Search by name, email, or phone, or filter by **Status** and **Page**. Each row shows the **Form**, **Platform**, **Status**, **Source**, and when it was **Received**. **Source** is **Delivered** for a lead Meta sent, and **Found later** for one the 15-minute check picked up.

![The Leads tab with saved leads from Facebook and Instagram and held leads from a Page that needs attention](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/leads.webp)

| Status | What it means | What to do |
| --- | --- | --- |
| **Waiting** | The lead arrived and is queued | Nothing; it is saved within moments |
| **Saving** | The answers are being fetched from Meta | Nothing |
| **Saved** | The contact was created or updated | Click **Open contact** to see them |
| **Needs review** | The lead has no email and no phone | Click **View answers** and add the contact by hand if you want them |
| **Held** | Meta refused the connection, so the lead waits | Fix the connection; held leads are queued again |
| **Plan limit** | The workspace reached its contacts limit | Upgrade or make room, then click **Retry** |
| **Skipped** | The lead's form is turned off | Turn the form on, then click **Retry** |
| **Failed** | Meta did not return the lead after every retry | Click **Retry** |

When Meta is briefly unavailable, Kelune CRM tries again after 1 minute, 5 minutes, 15 minutes, 1 hour, 3 hours, and 6 hours, and shows the next try under the status. Only after the last one does the lead become **Failed**.

**View answers** shows the raw answers for 30 days after the lead arrives. After that, the answers remain only in the note on the contact.

![The answers of a lead that needs review: a full name and an answer to a custom question, with no email or phone](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/answers.webp)

## When a connection needs attention

If Meta stops accepting the access token, for example because it expired or Leads access was removed, the connection's status changes to **Needs attention**. New leads are kept as **Held**, and members who can manage lead ads get one email about it.

![A connection that needs attention, with the reason Meta gave for refusing the access token](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/needs-attention.webp)

1. Click **Edit** on the connection.
2. Enter a new **Page access token**, and check Leads access in Meta Business Settings.
3. Click **Update**.
4. Click **Test** to confirm Meta accepts the connection.

Once the connection works again, the held leads are queued again and saved.

## Manage connections

The **Connections** tab shows each Page with its **Status**, **Saved leads**, leads that **Need attention**, **Last lead**, and when it was **Connected**. Click **Edit** to change the token or defaults, or open **More actions**:

![The More actions menu of a connection with Test connection, Retry failed leads, Turn off, Regenerate URL and Delete](https://kelunecrm.com/images/docs/cloud/contacts/meta-lead-ads/more-actions.webp)

| Action | What it does |
| --- | --- |
| **Test connection** | Checks the app, the token, and the Page subscription with Meta again |
| **Retry failed leads** | Queues the connection's held, plan limit, skipped, and failed leads again |
| **Turn off**, **Turn on** | Stops or resumes saving leads from the Page. While it is off, its leads are not saved |
| **Regenerate URL** | Creates a new callback URL. The old one stops working at once, so paste the new one into your Meta app |
| **Delete** | Removes the connection and its lead log. Contacts already saved are kept |

> **Tip:**
>
> Lead ads connections and [incoming webhooks](https://kelunecrm.com/docs/cloud/marketing-automation/incoming-webhooks) both bring contacts in from outside. Use a lead ads connection for Facebook and Instagram lead forms, and an incoming webhook for anything else that can post data to a URL.
