Meta's optimisation is only as good as the events you feed it. If the strongest signal in your dataset is a submitted application, Meta will get very good at finding people who submit applications — including people your underwriting will decline. The Conversions API (CAPI) is how you move the optimisation target down the funnel, from form fills to approvals and issued loans.

This is a build guide: what to send, how to keep identity intact, where the timing constraints bite, and what the Credit special ad category changes.

Why the browser pixel alone under-reports lending funnels

Three things break client-side tracking for lenders specifically:

  • Browser restrictions. Safari's tracking prevention and similar measures shorten or block cookie lifetimes, so a click today and a conversion tomorrow may not be connected.
  • Consent gating. Under GDPR and the ePrivacy rules, your CMP blocks the pixel until a user accepts advertising cookies. Events for non-consenting users simply do not exist, and that is correct behaviour.
  • The conversion is not on your site. Approval happens in your decision engine. Issuance happens after KYC, affordability checks and disbursement. No browser tag fires when a loan is paid out.

CAPI solves the third problem properly and mitigates the first. It does not solve the second, and you should not try to make it: consent status has to travel with the lead.

An event map for a credit funnel

Keep the map small. Meta needs volume per event to optimise, and splitting your funnel into eight micro-events starves each one.

Funnel stageSuggested eventSourcePurpose
Application startedInitiateCheckout or a custom eventBrowser + CAPIDiagnostics, early audience building
Application submittedLead or SubmitApplicationBrowser + CAPIFallback optimisation at low volume
Approved by underwritingCustom event, e.g. LoanApprovedCAPI onlyPrimary optimisation event
Loan issued / disbursedPurchase with valueCAPI onlyValue optimisation and true reporting

Standard events give you cleaner reporting surfaces; custom events let you name things the way your credit team does. Either works for optimisation, as long as the event exists in the dataset with enough weekly volume for the campaign to exit learning.

Use value and currency on the issued-loan event. For a lender, value is usually a revenue proxy — expected interest and fees over the product's life, or a fixed contribution margin per product tier. Pick one definition, document it, and do not change it quietly mid-quarter.

Worked example, hypothetical figures only. Say you spend €40,000 a month on Meta and the pixel reports 2,000 leads at €20 cost per lead. Your CRM shows 600 approvals and 420 issued loans from that cohort. Your real cost per issued loan is about €95, and two of your five ad sets may be producing most of the leads and almost none of the loans. Nothing in Meta's interface tells you that until the CRM outcomes flow back in.

Identity: fbc, fbp and external_id

Server events match to a person through two mechanisms: click identifiers and hashed personal data. For lending, both matter.

fbc from fbclid. When someone arrives from a Meta ad, the URL carries an fbclid parameter. The pixel normally turns it into an _fbc cookie in the format fb.{subdomainIndex}.{timestamp}.{fbclid}, where the timestamp is when you first saw the click, in milliseconds. If the pixel is blocked by consent gating or ad blockers, you can construct the same value server-side from the URL parameter — but only once the user has given advertising consent.

Practical rule: capture fbclid, the capture timestamp and the full _fbc and _fbp cookie values into hidden form fields, and store them on the lead record in your CRM. Every later event about that applicant — approval, issuance — ships with the same identifiers. If the identifiers only live in a browser cookie, they are gone by the time underwriting makes a decision.

Hashed customer data. Normalise before hashing with SHA-256: lowercase and trim emails, convert phone numbers to E.164 without the plus sign or spaces, use two-letter country codes. Send what you lawfully hold — email, phone, first and last name, city, postcode, country, date of birth. Lenders usually hold more verified identity data than most advertisers, which is an advantage for match quality, and a reason to be deliberate about what you transmit.

external_id. Send a stable, hashed CRM identifier on every event for the same person. It links the browser event and the back-office event even when other identifiers are partial.

action_source. Website-originated journeys normally use website with event_source_url, client IP and user agent captured at the time of the application. Purely back-office events are sometimes sent as system_generated. The requirements differ by source type, so confirm the current field requirements in Meta's documentation before you finalise the payload.

Deduplication with event_id

If you fire Lead in the browser and also send it from your server, Meta must recognise them as one event. Deduplication needs two things to match: the same event_name and the same event_id.

  • Generate one ID per event occurrence — a UUID is fine. Generate it server-side when rendering the page, or client-side and pass it to your backend with the form submission.
  • Do not reuse the user ID, the session ID or the lead ID as the event ID. One applicant can produce several events.
  • Send both copies close together in time. Meta's deduplication lookback is limited, so a browser event today and a server copy tomorrow will likely be counted twice. Check the current documented window rather than assuming.
  • Events that exist only server-side — approvals, issuance — still need a unique event_id, so that retries and backfills do not double-count.

The 7-day window

Meta accepts server events with a backdated event_time, but only within a limited window — documented as 7 days at the time of writing. Events sent later may still land in the dataset, but they will not be usable for attribution and optimisation the way fresh ones are.

For consumer credit this is the main architectural constraint:

  • Approvals are usually fine. Automated decisioning returns a result in seconds to hours. Send the approval event as soon as the decision is final.
  • Issuance sometimes is not. If disbursement waits on documents, bank verification or a co-signer, a share of your loans will be issued outside the window.

The usual design: optimise on approval, because it arrives quickly and is closely correlated with issuance; send issuance for value reporting and for value-based optimisation where timing allows. Run a weekly job that checks for outcomes still inside the window and sends them — do not batch monthly. And measure what share of issued loans arrives too late; if it is large, your campaign-level revenue reporting needs a CRM-side view as the source of truth, not Ads Manager.

The Credit special ad category

Meta requires advertisers running credit offers to declare the Credit special ad category where the policy applies. Declaration restricts targeting: age and gender targeting are removed, detailed interest and behaviour targeting is limited, geographic granularity is reduced, and the old special-ad-audience workaround for lookalikes no longer exists.

Whether the declaration is required depends on where your ads are delivered, and the scope has changed over time — check what Ads Manager asks for in your account and confirm with compliance rather than copying another market's setup.

The practical consequence is the point of this whole article: when you cannot hand-pick an audience, the conversion signal becomes your main steering mechanism. A credit campaign in a special ad category optimising to Lead has very little working in its favour. The same campaign optimising to a verified approval event does.

Copy rules tighten in parallel. Claims such as "guaranteed approval" or "no credit check" are not acceptable under Google's and Meta's financial services policies, and representative example requirements under the EU Consumer Credit Directive as implemented locally apply to ad creative as well as landing pages. Have your compliance team sign off on the exact wording.

Only send events for users who gave advertising consent. That means:

  1. Your CMP records a consent decision with a timestamp and scope.
  2. The lead record in the CRM stores that decision alongside the fbc, fbp and hashed identifiers.
  3. Your CAPI job filters on it before every send, including approvals weeks later.
  4. Withdrawal of consent stops future sends and triggers your deletion process.

Treat this as a data-processing design question with your DPO, not a tagging question.

What to do this week

  1. Agree one definition each of "approved" and "issued" with the credit team, with timestamps you can query.
  2. Add fbclid, _fbc, _fbp, consent state and event_id to the lead payload your landing pages send to the CRM.
  3. Ship browser and server copies of the application event with matching event_name and event_id, and verify deduplication in Events Manager test mode.
  4. Add the approval event via CAPI, let it accumulate volume, then switch one campaign's optimisation target to it and compare cost per issued loan, not cost per lead.
  5. Build the weekly backfill job and monitor how many outcomes miss the window.

If you would rather not maintain this plumbing in-house, Ads Rehub — an internal tool operated by SIA Batwatex in Latvia — connects landing pages, Google Ads, Meta and ChatGPT Ads accounts to the lender's CRM, reports cost per application, per approved and per issued loan, and sends approved and issued loans back to Google Ads and Meta as offline conversions for visitors who gave advertising consent.

None of this is legal advice. Confirm consent mechanics, representative example requirements and special ad category obligations with your compliance team and the current official texts.

Key takeaways

  • Optimising to form submissions teaches Meta to find applicants, not borrowers; approvals sent by CAPI move the target down the funnel.
  • Store fbclid, _fbc, _fbp, hashed identifiers and consent state on the lead record, because the conversion happens days later in the CRM, not in the browser.
  • Deduplication needs identical event_name and event_id on both copies, sent close together; never reuse a user or lead ID as the event ID.
  • Server events are usable only within a limited backdating window — approvals usually fit, late issuances often do not, so plan reporting accordingly.
  • The Credit special ad category strips away targeting levers, which makes conversion signal quality the main thing you still control.