Send Real Leads to Meta Ads
GoodInbound sends every real lead to Meta as a Lead event through the Conversions API. Spam, bots, and leads you reject are never sent, so campaigns that optimize for leads, including Advantage+, find more people like your buyers instead of more form-fill bots. Each event carries the submission ID as its event_id, so Meta counts a lead once even when your browser pixel reports it too.

Before you start#
- A dataset (pixel) your campaigns optimize for, and admin access to it in Events Manager.
- Click IDs are captured. The Lead Screen script is on the pages your ads land on, or your ads point to GoodInbound hosted forms. It records
fbclidand the_fbcand_fbpcookies.
This covers forms on your own site. Leads from Meta's instant forms stay in Meta.
1. Get your dataset ID and an access token#
- Open Meta Events Manager and select the dataset (pixel) your ads use. Copy its ID.
- Open the Settings tab and scroll to Conversions API.
- Under Set up direct integration, click Generate access token and copy it. Meta shows it once.
2. Connect Meta in GoodInbound#
- Open Settings → Integrations. In the Ad platforms card, click Connect next to Meta Ads.
- Paste the Dataset (Pixel) ID and the Conversions API access token.
- Click Connect.

GoodInbound checks the token against the dataset before it saves anything, and shows the dataset's name once connected. The token is stored encrypted and never shown again. The Real leads to Meta workflow is switched on, and real leads start arriving in Events Manager as server events.
3. Send a test lead#
- In Events Manager, open the dataset's Test events tab and copy the test code (for example
TEST12345). - In GoodInbound, click Send a test lead on the Meta row, paste the code, and click Send test lead.

A Lead event from the server shows up under Test events within a minute. Test events never count as conversions.
4. Optimize for real leads#
- Set your lead campaigns' conversion event to Lead on this dataset.
- If your browser pixel fires
Leadon every form submit, stop it, or fire it from GoodInbound's accepted-lead event with the same ID so Meta keeps one:
document.addEventListener("leadscreen:lead", function (event) {
fbq("track", "Lead", {}, { eventID: event.detail.event_id });
});
GoodInbound hosted forms with the Meta Pixel connected already do this.
What GoodInbound sends#
| Field | Value |
|---|---|
event_name |
Lead |
event_id |
The submission ID |
event_time |
When the submission became a lead |
action_source |
website |
event_source_url |
The page the form was on |
user_data |
SHA-256 hashes of the email and phone, fbc (from the _fbc cookie or fbclid), fbp, the visitor's IP and user agent, and a hashed external_id |
Sending the click ID, IP, and user agent with every lead raises your Event Match Quality.
When a lead changes#
A lead is sent as soon as it's accepted. Meta can't retract an event, so a lead you later relabel as spam stays counted in Meta. Leads labelled review wait until someone relabels them as lead.
Troubleshooting#
"Invalid OAuth access token." The token was copied incompletely or revoked. Generate a new one and click Update on the Meta row.
The row shows a failed send. The message is Meta's own. Fix the cause and send a test lead to confirm. The next lead is sent normally.
Events arrive with low match quality. Make sure the Lead Screen script runs on the landing page, so the click ID and cookies are captured, and that your form asks for an email.