Skip to content
Open workspace
Browse help topics
Meta Pixel and Signals Gateway

Send Meta events only with consent.

Connect the Meta Pixel and Meta’s Signals Gateway Pixel to the visitor’s advertising choice, avoid counting events twice and test the result.

5 min readReviewed 30 September 2026

How Velo controls Meta tags

Meta tags do not read Google Consent Mode. They need their own consent setup, tied to Velo’s Advertising category.

When the standard Meta Pixel is on the page, Velo calls fbq('consent', 'grant') or fbq('consent', 'revoke') each time a choice takes effect. Velo does not yet send the choice to the Signals Gateway Pixel, which uses its own code. Control that pixel with GTM consent settings or by blocking its code until the visitor accepts.

Choose the route that matches how Meta is installed
How Meta is installedWhat to do
Meta Pixel in GTMAdd consent settings to the tag
Meta Pixel code in your websiteRevoke consent before the pixel starts
Signals Gateway PixelUse GTM consent settings or block the code

Set up the Meta Pixel in GTM

  1. Open the Meta Pixel tag and go to Advanced Settings → Consent Settings.
  2. Choose Require additional consent for tag to fire and add ad_storage, ad_user_data and ad_personalization.
  3. Add a Custom Event trigger for velo_consent_update to the page-view tag, so it fires once the visitor accepts.
  4. In Advanced Settings → Tag firing options, choose Once per page. Velo pushes velo_consent_update again when a visitor changes their choice.
  5. Add the same consent settings to your other Meta event tags, such as Lead or Purchase. They keep their own triggers.

A tag blocked by consent settings does not send anything. It does not queue the event for later.

Set up Meta Pixel code in your website

Velo loads asynchronously, so Meta’s base code can run first. Add fbq('consent', 'revoke') before fbq('init'), so the pixel waits for a choice. Velo grants consent when the visitor allows advertising.

Example only · use your own pixel ID
<script>
  /* Meta’s base code loader, unchanged */
  fbq('consent', 'revoke');
  fbq('init', 'YOUR-PIXEL-ID');
  fbq('track', 'PageView');
</script>

Read Meta’s consent guide for the Meta Pixel for the full base code.

Set up the Signals Gateway Pixel in GTM

Signals Gateway sends your events through a gateway on your own subdomain, then on to Meta. Install its pixel with Meta’s Signals Gateway Pixel template for GTM, then:

  1. On the Signals Gateway Pixel tag, go to Advanced Settings → Consent Settings. Choose Require additional consent for tag to fire and add ad_storage, ad_user_data and ad_personalization.
  2. Fire the tag on a Custom Event trigger for velo_consent_update, and set Tag firing options to Once per page.
  3. Use the same event ID in the regular Meta Pixel and the gateway pixel, so Meta can remove duplicates. See duplicate events.
Leave “Consent Granted (GDPR)” set to True.

The consent settings already stop the tag until the visitor accepts. Setting the field to False stops the pixel sending events even after consent.

Read Meta’s Signals Gateway documentation for creating the gateway and connecting your domain.

Block Meta code until the visitor accepts

Without GTM, you can hold back the Signals Gateway Pixel or Meta Pixel code with Velo. Change the script’s type to text/plain and add data-velo-category="ads". Velo runs the code once the visitor allows advertising.

Example only · keep your own code inside
<script type="text/plain" data-velo-category="ads">
  /* your Signals Gateway Pixel or Meta Pixel code, unchanged */
</script>

Put the script in the page head. Code that has already run keeps running until the page reloads. If a visitor withdraws consent, it stops from the next page.

Avoid duplicate events

If the Meta Pixel and the Signals Gateway Pixel, or the pixel and the Conversions API, both send the same event, Meta counts it twice unless the two copies match. Meta treats events with the same event name and event ID as one.

  1. Create one GTM variable that returns an ID unique to each event.
  2. Put that variable in the Event ID field of both tags.
  3. Check Events Manager for deduplication warnings after publishing.

See Meta’s deduplication guide.

Test Meta tags

  • Open the published website in a fresh session. Before choosing, check the Network panel: there should be no requests to facebook.com/tr or your gateway domain.
  • Accept advertising. Check that the page view appears in Meta Events Manager’s Test events, or in your gateway’s event activity.
  • In a new fresh session, reject advertising and browse two pages. No Meta requests should appear.
  • Accept, then withdraw through the privacy button, and load another page. Meta requests should stop.
  • Check that each event appears once after deduplication.

If something does not look right

A Meta page view is sent before the visitor chooses.

The pixel starts before Velo. In GTM, check the tag’s consent settings. In your website code, add fbq('consent', 'revoke') before fbq('init'), or block the code as shown above.

The gateway pixel sends events after a rejection.

The Signals Gateway Pixel tag has no consent settings, or its code is installed directly in the website. Velo does not yet control that pixel by itself. Use GTM consent settings or block the code.

Events are counted twice.

The two tags do not share the same event name and event ID. Use one variable for the Event ID field in both tags.

Does Velo set Meta’s Limited Data Use option?

No. If your policy requires Limited Data Use for some US states, set Data Processing Options in the pixel tag or code.